我的網站結構是這樣的。包括文件上的文件包含在相對路徑的文件中:有時僅工作
htdocs文件夾:/WEB/mysite/htdocs/
ADMIN文件夾:/WEB/mysite/htdocs/admin/
編輯管理文件夾:/WEB/mysite/htdocs/admin/edit
的.htaccess保護文件夾:/WEB/mysite/htdocs/admin/flock/
TEST文件夾:/WEB/mysite/htdocs/test/
形勢1
以下script1.php被放置在管理文件夾:
<?php
require_once 'flock/sql.php' or die("Error");
?>
現在我包括scripttest.php script1.php放置在編輯admin文件夾:
<?php
require_once '../script1.php' or die ("Error");
?>
它工作沒有任何錯誤。
情況2
現在我已經script2.php放置在測試文件夾:
<?php
require_once '../admin/flock/sql.php' or die("Error");
?>
而且從scripttest.php在編輯admin文件夾總是放在調用它:
<?php
require_once '../../test/script2.php';
?>
它不會工作了。這些都是錯誤的:
Warning: require_once() [function.require-once]:
Unable to access ../admin/flock/sql.php in /WEB/mysite/htdocs/test/script2.php
on line 2
Warning: require_once(../admin/flock/sql.php) [function.require-once]:
failed to open stream: No such file or directory in /WEB/mysite/htdocs/test/script2.php
on line 2
Fatal error: require_once() [function.require]: Failed opening required
'../admin/flock/sql.php' (include_path='/usr/local/lib/php/:/WEB/mysite/') in
/WEB/mysite/htdocs/test/script2.php on line 2.
兩種情況是一樣的。他們不是嗎? 爲什麼情況二不起作用?
謝謝。但是,如果我明白了這一點: 'include(COMMON_INCLUDES。「/ header.php」);' 將與'include $ _SERVER ['DOCUMENT_ROOT']。'/ includes/header.php'相同。那麼,如果'header.php'在另一個目錄中,我將不得不再次使用相對路徑?!那麼不是簡單地總是使用'include $ _SERVER ['DOCUMENT_ROOT']。'/ pathtothefile/file.php''並停止使用相對路徑? – Perocat
它會更安全。添加我概述的常量的抽象是一個很好的方法來使用說,如果你有一個由於某種原因或另一個原因不能在網站的根生活的網站的開發版本。那麼對於那個你可以改變常量到'define(「INCLUDE_PATH」,$ _SERVER [「DOCUMENT_ROOT」]。「/ mydevsite/includes」);'當在不同環境中登臺時提供更大的靈活性。 – Orangepill
在一邊注意另一件事,這種方法(建立一個靜態點包括關閉)爲你做的是防止'chdir'命令。當你在其中一個包含它的其中一個出現時,它烘烤你在它之後定義的所有相對路徑。 – Orangepill