2013-09-23 53 views
0

我想在一臺新服務器上設置一個我不是原始所有者的網站 - 在Apache2中,文檔根目錄已經設置爲/ var/www/html,這是index.php所在的位置我想成爲默認的'主頁'所在地。如何使require_once從上面的目錄中獲取文件?

www中的其他目錄中有許多文件。例如,/common/cachelite/Lite.php也可以在/ var/www中找到。

的index.php中引用的這個PHP使用require_once,象下面這樣:

error_reporting(E_ALL); 
ini_set('Display_errors','On'); 
require_once('../common/cachelite/Lite.php'); 

但引發以下錯誤,我已經從我的Apache2 error.log中採取:

PHP Fatal error: require_once(): Failed opening required '../common/cachelite/Lite.php' (include_path='.:/usr/share/php:/usr/share/pear') in /var/www/html/index.php on line 4 

的文件本身肯定存在,所以任何人都可以爲我解釋這個問題?這是怎麼回事?

+0

'require' /'include'不受Web服務器的文檔根限制。這是一個只存在於網絡服務器中的概念。 PHP只能看到文件系統,並且可以訪問其包含的用戶ID有權訪問的任何文件/目錄。 –

+0

我以爲這麼多,但然後事實上,我似乎無法要求這個文件,讓我質疑我自己的知識...... – Newnab

+0

在與您的PHP腳本相同的目錄打開一個shell。然後找出'../什麼'路徑應該從腳本所在的位置到包含文件的位置。這將是您在PHP中需要的路徑。 –

回答

1

我已經遇到了這個問題幾次,並總是像這樣修復它。

$file = dirname(dirname(__file__)); 
require_once($file ."/common/cachelite/Lite.php"); 

進一步縮小範圍。

試試這個 如果做Web服務器上,而不是命令行添加<預> < /預>標籤。

echo __file__ . "\n"; 
echo dirname(__file__). "\n"; 
echo dirname(dirname(__file__)). "\n"; 

我的下一個想法是,文件權限或拼寫錯誤的單詞。

+0

似乎並沒有解決這個問題,我擔心,和以前一樣的錯誤(顯然,行號加到5,很顯然) – Newnab

+0

更新了我的條目以進行調試。 –

0

您可以將代碼更改爲類似

require_once($_SERVER['DOCUMENT_ROOT'].'/common/cachelite/Lite.php'); 

,或者您也可以按照這種方式:

require_once(dirname(__FILE__).'/common/cachelite/Lite.php'); 
+0

無法正常工作,導致'PHP致命錯誤:require_once():無法打開'/var/www/html/common/cachelite/Lite.php'(include_path =')。:/ usr/share/php:/ usr/share/pear')in /var/www/html/index.php on line 4' – Newnab

0

檢查你正在試圖要求對文件的權限/包括。如果他們無法被訪問/網絡用戶讀取,那麼這將解釋您遇到的錯誤。