2013-11-01 78 views
1

我在過去幾個月花了在本地主機上構建網站。在整個網站中,我使用$_SERVER["DOCUMENT_ROOT"]來訪問我的服務器的根目錄,而不是使用相對路徑,所以我可以從那裏引用文件。但是,我只是決定將我的網站上傳到000webhost。正如我很快發現的那樣,對於那些使用它們的人,您可能知道,他們的服務器根目錄與您上傳文件的實際目錄不同。我相信這是虛擬主機......反正,我現在$_SERVER["DOCUMENT_ROOT"]拋出錯誤沿着這個網站上線:

警告:include_once()的[一旦function.include-]:實際上open_basedir的限制。文件(在/ usr /本地/ Apache/htdocs中/ mypath中)不

其他網站我看了看說,你應該只由000webhost的提供給你的home目錄替換$_SERVER["DOCUMENT_ROOT"]允許的路徑(S)內。但是,如果我想在將來更改託管服務,我就搞砸了。有沒有什麼辦法可以使用$_SERVER來訪問設定的虛擬目錄,或者使用htaccess或其他東西來使我的代碼工作?我嘗試在我的根目錄下的htaccess文件中使用DocumentRoot,但它在嘗試訪問該頁面時拋出了404錯誤。

回答

4

我絕不會推薦使用DOCUMENT_ROOT。例如,如果您想要通過命令行或cron運行腳本,則無用。

我反而會通過你的一個腳本設置include_path。每一頁都包含一些東西(比如某種配置或引導腳本)。

例如,假設你在你的應用程序的根目錄config.php(可能是文檔根目錄,但是這並不重要),它包含在每一頁上

set_include_path(implode(PATH_SEPARATOR, array(
    __DIR__, // this is the directory of this file, config.php 
    get_include_path() 
))); 

然後,你可以放心地使用此位置的相對路徑在include/require報表

include 'foo.php';   // APP_ROOT/foo.php 
include 'somedir/bar.php'; // APP_ROOT/somedir/bar.php 

當設置包含路徑,它並沒有真正身在何處的腳本所在,只是構建適當的路徑。說config.php住在APP_ROOT/configs/config.php,包含路徑將

realpath(__DIR__ . '/..') // realpath just resolves the path traversal 
+1

@Nickersoft'我在過去的幾個月中在localhost上構建了一個網站:這意味着在主機切換之前網站並沒有完全活動,這意味着您有時間來實現這個解決方案。當潮水很低時就去做,而不是在以後有顧客時再感到絕望。 –

+0

哈哈我還沒有客戶......我只是希望很快就會推出。 – Nickersoft

相關問題