2012-10-07 69 views
4

我正在尋找切換到一個新的主機,他們提供這個很好的「臨時url」來測試你的文件,然後再切換。所有的罰款和花花公子。所以我複製了所有的文件。在每頁頂部I require存儲在public_html/includes/head.php處的服務器中的另一個文件。現在無論什麼原因,$ _SERVER ['document_root'] var返回/public_html/htdocs/includes/head.php(服務器上不存在),而不是/public_html/includes/head.php(它確實存在) 。產生的錯誤如下:

Warning: require_once(/home/secure31/public_html/htdocs/includes/head.php) 
[function.require-once]: failed to open stream: Permission denied in 
/home/stephe80/public_html/index.php on line 6 

有罪代碼:

require_once($_SERVER['DOCUMENT_ROOT'] . '/includes/head.php'); 

我傾向於認爲這是他們暫時的URL設置相關的錯誤,但我不想轉學過來的我的DNS,發現我的所有文件都壞了。我可以將它們改爲絕對路徑,但我很好奇我是否缺少一些東西。任何洞察力將不勝感激。謝謝!

+0

'$ _SERVER ['DOCUMENT_ROOT']'是基於調用文件的位置。你有沒有試過尋找調用文件的'$ _SERVER ['SCRIPT_FILENAME']'和'$ _SERVER ['PHP_SELF']的值? –

回答

0

以供將來參考(如果任何人有類似的問題),事實證明,這個問題是與他們的測試服務器。我用原來的代碼啓動了它(風險很大,我知道),結果都很好。

4

我建議使用__FILE__常量,並從那裏計算出htdocs文件夾。它比依賴$ _SERVER超全局更可靠,因爲實際上每個服務器都不同。

例(你會在根文件夾的index.php調用):

$htdocs = str_replace(basename(__FILE__), __FILE__, ''); 
define('ROOT_FOLDER', $htdocs); 
require_once(ROOT_FOLDER . '/includes/head.php'); 
+5

'__DIR__'對此更好。 – Marwelln

+2

@Marwelln不錯,我不知道他們補充說......雖然它是5.3+,所以不適用於所有環境 –

+0

謝謝ZathrusWriter和@Marwelln的迴應。這似乎是一個更一致的方法,我一定會考慮實施它。原來問題出在他們的測試服務器上(就像我想的那樣)。 –

相關問題