2010-04-21 100 views
2

我想知道是否有一種方法可以從每個需要包含或需要由AJAX請求的文件創建主文件夾(index.php所在的位置)的相對路徑。包含和請求時的路徑AJAX

我想結合AJAX和PHP包括所以第一次用PHP加載頁面,然後能夠使用AJAX刷新頁面的部分,但文件是相同的,位於子文件夾中。

我遇到了路徑問題,儘管我可以設置絕對路徑,但每次服務器更改時都必須更改它。我想要一個到我的項目的相對路徑,但不是DOCUMENT_ROOT,因爲那個不能使用別名。 (或者你知道如何使它與別名一起工作嗎?)

謝謝!

編輯* 這裏是我的目錄結構的樣子:

[main_dir]的index.php - 主要索引文件

[main_dir]/phpinc - PHP的包含文件 - 只有一起工作包括(對他們沒有AJAX調用)

[main_dir]/modules - 模塊是頁面的一部分,可以包含在PHP或AJAX中隨處調用(無所謂,它們將作爲一個個人加載HTML文件,因此PHP中的路徑與模塊在實際位置的位置相關。

當你將它們包含在PHP中,他們通常會採取[main_dir]路徑(因爲已經index.php中包括他們)

所以我的問題是:從模塊文件,我想包括在phpinc一些文件文件夾,但它可以是../phpinc/file.php或phpinc/file.php。

有沒有更優雅的方式不僅僅是把一個

if (is_dir("phpinc")) { 
$inc_path = "phpinc"; 
} else if (is_dir("../phpinc")) { 
$inc_path = "../phpinc"; 
} 

在每個模塊的開始?
希望這個說明足夠好。

+0

你能舉一個你正在嘗試的例子嗎? – Dolph 2010-04-21 12:21:47

+0

好的。我會盡力。我將編輯問題描述以添加它。 – Cristian 2010-04-22 09:56:03

+0

看到我的更新! – 2010-04-22 12:24:05

回答

0

我建議使用PHP的自動加載磁帶機:

我創建了一個類CAutoloadManager具有這種方法:

static public addRepositoryForFilePattern(String $aPath, String $sPattern) {} 

內的index.php我打電話

AutoloadManager::addRepositoryForFilePattern('./actions/', 'C*Action.inc.php'); 
AutoloadManager::addRepositoryForFilePattern('./includes/', '*.inc.php'); 

指示自動加載首先嚐試在./actions/中找到類,如CShowWelcomeAction.inc.php或CLoginAction.inc.php。 CAutoloadManager搜索./包括/爲其他類。

PHP的自動加載()函數用於這樣的:

function __autoload($class_name) { 

    include $class_name . '.php'; 

} 

PHP調用它每次加載失敗的上課時間。

Actuall,這個作品非常好 - 雖然只適用於課程。