2011-11-28 35 views
0

我正在爲我公司的網站編寫404頁面,它有一個$depth變量,它顯示「../site/」。這適用於基本目錄中的任何錯誤的URL,但是子文件夾中的任何內容都使用$depth變量從錯誤的位置抓取CSS文件。我試過$depth = '/site/',它根本沒有抓取任何css文件。我的問題是,我怎樣才能讓PHP動態地計算出$depth,具體來說,要放入的數量是../?如果我能得到一個數字或其他東西,這很容易,但我似乎無法找到一個快速,簡單的方法來做到這一點。PHP:如何獲取當前網址的目錄深度?

編輯:原來,在404.php文件只在一個位置,無論哪個目錄下的不良URL被引用的。所以,我真正的問題可能根本不是php相關的。爲什麼404頁面在從www.siteurl.com/404到達一個文件夾時會得到一個css文件,但是從www.siteurl.com/foo/bar到達時從另一個文件夾中獲取同名的css文件?

+0

你爲什麼不只是絕對鏈接到CSS文件,忘了'$ depth'爲了這個目的? – Kris

回答

1

這是我幾年前寫了一個功能,我用它在我的網站。 它應該幫助:

<? 
function absolute_include($file) 
     { 
     /* 
     $file is the file url relative to the root of your site. 
     Yourdomain.com/folder/file.inc would be passed as 
     "folder/file.inc" 
     */ 

     $folder_depth = substr_count($_SERVER["PHP_SELF"] , "/"); 

     if($folder_depth == false) 
      $folder_depth = 1; 

     include(str_repeat("../", $folder_depth - 1) . $file); 
     } 
?> 
0

你必須映射已知webpath到已知diskpath(如網絡/ diskroot)。基於這些信息,您可以從當前網絡路徑指向的位置得出結論。

2

使用CSS文件的絕對URL來避免弄亂像這樣的路徑。

如果由於某種原因無法爲您工作,請嘗試查看$_SERVER陣列,特別是$_SERVER['PHP_SELF']$_SERVER['DOCUMENT_ROOT']

+0

好暗示! – maraspin

1

如果你只是想在CSS拉,在你的HTML的頭,你可以使用/ < path_to_css>的.css

通過使用/開頭,你告訴瀏覽器去到您網站的根目錄以查找請求的網站。

如果需要通過PHP的路徑,你可以使用

$_SERVER['DOCUMENT_ROOT'] 

,這將給你到你的網站根目錄下,你可以從建立直接路徑。