2013-02-21 100 views
1

我想在運行Apache2和PHP5的Linux上安裝PHP應用程序。

我注意到,無論何時我嘗試訪問應用程序(例如,擊中index.php文件),瀏覽器都會返回空白頁。運行一個phpinfo()工作正常。

通過測試,我已經意識到,問題出在應用A,它已經失去了行像這樣的的代碼:

require_once($_SERVER['DOCUMENT_ROOT'] . '/202-config/functions.php');

如果我更改爲require_once('./202-config/functions.php');,然後在應用程序運行OK(至少是應用程序的一部分

如果我跑print_r($_SERVER)DOCUMENT_ROOT顯示爲空

我爲你們的問題是:。因爲我不想要通過這個應用程序中的所有代碼並替換這些require_once語句,有沒有辦法來定義DOCUMENT_ROOT的值?

謝謝。

+1

這將是一個好主意,打開錯誤報告,以便您的空白頁變成有用的東西 – Popnoodles 2013-02-21 11:04:11

+0

有你試過'require_once(__ DIR__。'/202-config/functions.php');'? – SDC 2013-02-21 11:06:24

+0

解決方法:在'index.php'中放置'$ _SERVER ['DOCUMENT_ROOT'] = __DIR __;'。 '$ _SERVER'是超全球性的,這種改變會影響所有後續的使用。 – 2013-02-21 11:07:07

回答

0

您是否已在您的Apache-Virtualhost-Config中設置了DocumentRoot "/var/www"?在CLI中,該字段爲空。在這種情況下,可以手動設置該值:

if ($_SERVER['DOCUMENT_ROOT'] == '') { 
    $_SERVER['DOCUMENT_ROOT'] = __DIR__; 
} 

或PHP < 5.2

if ($_SERVER['DOCUMENT_ROOT'] == '') { 
    $_SERVER['DOCUMENT_ROOT'] = dirname(__FILE__); 
} 
5

docs

此數組中的條目由web服務器創建的。有沒有保證每個網絡服務器將提供任何這些;

此外,如果您從命令行運行腳本,它可能不會被設置。

解決方法是設定明確:

if (!isset($_SERVER['DOCUMENT_ROOT']) || empty($_SERVER['DOCUMENT_ROOT'])) 
    $_SERVER['DOCUMENT_ROOT'] = __DIR__; //or dirname(__FILE__) for older php verstions 

注:您使用$_SERVER['DOCUMENT_ROOT']包括腳本。所以最好依靠常量__DIR____FILE__而不是$_SERVER

+0

但他們總是會被設置?即'isset($ _ SERVER ['DOCUMENT_ROOT'])'總是返回true,所以使用$ _SERVER ['DOCUMENT_ROOT']不會出錯,因爲它只是空的?編輯:你的編輯建議不。 – Popnoodles 2013-02-21 11:08:10

+0

@popnoodles沒有得到您的評論。有兩種可能性:1.在'$ _SERVER'中沒有像'DOCUMENT_ROOT'這樣的索引。 2.有關鍵「DOCUMENT_ROOT」的元素,但它是空的。樣本涵蓋兩個。如果還有其他改變您的評論,請。 – Leri 2013-02-21 11:12:46

+0

我在問「will'isset($ _ SERVER ['DOCUMENT_ROOT'])?'總是返回true嗎?但是你編輯檢查這個,而不是離開你原來的表示它總是會被設置,但可能是空 – Popnoodles 2013-02-21 14:10:09

0

你也可以做這樣的事情:

if (empty($_SERVER['DOCUMENT_ROOT'])) { 
$_SERVER['DOCUMENT_ROOT'] = './'; 
} 

但是,這不是一個很好的方式

相關問題