2011-11-28 157 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'] 

,这将给你到你的网站根目录下,你可以从建立直接路径。