2011-07-15 50 views
0

我有一個奇怪的問題,我無法找到文檔。我在我的服務器的以下位置有一個頁面。Mod重寫規則正在改變PHP中的CWD - 爲什麼?

{SITE_ROOT}/admin/myfolder/myfile.php 

此文件使用一個包含運行駐留在服務器的根目錄的全局配置文件 - 這種相對不給自己

// {SITE_ROOT}/admin/myfolder/myfile.php 
// includes {SITE_ROOT}/config.php See below explanation after edit 
include('../config.php); 

,直到我添加下面的.htaccess這工作得很好文件到myfolder目錄。

// {SITE_ROOT}/admin/myfolder/.htaccess 
RewriteEngine On 
RewriteRule ^([0-9A-Z]+)\.gif$ gif_generator.php?gifid=$1 [L] 

這一規則的目的並不重要 - 事實是,上述(myfile.php)的頁面不應該受到這條規則(影響它不應該」除非我弄錯了,否則不匹配正則表達式 - 我可能會)。然而似乎在使用這個規則時,myfile.php中的include()失敗。就好像php文件的當前工作目錄由於啓用了RewriteEngine而改變了。

這是記錄任何地方,是有辦法避免這種情況的發生?

編輯 - 我錯過了一些比較重要的。原始文件({SITE_ROOT} /admin/myfolder/myfile.php)本身已被文件包含在以下位置({SITE_ROOT} /admin/frontcontroller.php)中。 myfile.php中的包含路徑實際上是相對於這個文件。我已經改變了上面的問題來反映這一點。

+0

是重寫規則不相匹配的網址,因此這並沒有太大的意義。這就是你的.htaccess文件中的所有內容嗎? – stephenbayer

+0

@stephenbayer - 這是整個文件。該目錄中有另一個文件使用php來動態生成gif圖像 - 因此是規則。 – calumbrodie

+0

@stephenbayer - 道歉 - 我錯過了原始問題中相當重要的信息。現在更新。 – calumbrodie

回答

0

這也許是有用的給你:

dirname(__FILE__) 

返回目錄中的文件是在所以,如果你知道你的網站的目錄結構,你可以使用類似

dirname(dirname(__FILE__)) 

可以。也可使用

DIRECTORY_SEPARATOR 

獲取服務器特定的目錄分隔符操作系統

在你的情況,這將成爲

include(rtrim(dirname(dirname(__FILE__)),'/\\').DIRECTORY_SEPARATOR.'config.php')