2012-12-16 81 views
5

我的目錄結構是這樣的:PHP - 相對路徑「規定」

blog -> admin -> index.php 
blog.php 
db.php 
functions.php 

我一直在試圖includerequire,真的)在admin/index.phpblog.php,但面臨很多的錯誤。我正在學習一門PHP課程,而導師也成功地做了同樣的事情。

管理/ index.php文件:

require "../blog.php"; 

,反過來,要求在其目錄下兩個文件。

require "db.php"; 
require "functions.php"; 
+0

我認爲你需要只是一步出來的水平,即。 '../../ blog.php'假設'blog.php'不在'blog'文件夾中。 – prodigitalson

+0

我不認爲這會奏效。 'blog.php'位於'blog'目錄中。 – Rafay

+0

啊目錄結構的符號是令人困惑我:-) – prodigitalson

回答

18

如果發現相關包含路徑工作不正常,速戰速決是冠以__DIR__到你想包括路徑的前面。

require __DIR__ . "/../blog.php"; 

這是相當乾淨,你不需要修改包含路徑或工作目錄。

+0

這工作。謝謝!雖然我不知道爲什麼我必須這樣做。教師離開'require「../ blog.php」;'沒有任何問題。是因爲操作系統的差異嗎?他在Mac上,而我在Windows上。 – Rafay

+2

我其實並不完全確定 - 我相信它與當前工作目錄不一定匹配腳本的目錄。 –

+1

@Rafay:無論如何它是一個糟糕的做法。你應該總是計算絕對路徑,然後需要/包含。 – prodigitalson

-3

我喜歡用chdir($_SERVER['DOCUMENT_ROOT'])開始我的文件。這使我能夠爲我的所有內容獲得一個不錯的邏輯基本路徑。

+0

這就是爲什麼你必須在php.ini include_path指令。 –

+0

'include_path'不適的東西像'file_exists'雖然,沒有真正的使用)每個PHP文件 –

+0

和一個文件操作。考慮使用PSR-0或使用__DIR__。 –

1

如果你包括這個文件中index.phpdb.php and functions.php那麼你必須編寫代碼

require "../db.php"; 
require "../functions.php"; 

或者如果你是包括blog.php這個文件,然後編寫代碼

require "db.php"; 
require "functions.php";