php 相对路径以主引用文件为基准,相对路径的拼接将抹煞被引用文件之间的包含关系。在多层引用中,不管被引用文件是直接还是间接地引用了另外的文件,对主引用文件来说,它们都是直接引用。
下面的程序在第二篇参考文件提出的程序基础上略作修改而成。
/*
* 动态获取主引用文件相对于应用程序根目录的相对路径,存于常量GO2ROOT中
* 如果主引用文件为 www/mysite/a.php, 则 GO2ROOT == "./"
* 如果主引用文件为 www/mysite/a/b.php, 则 GO2ROOT == "../"
* 如果主引用文件为 www/mysite/a/b/c.php, 则 GO2ROOT == "../../"
* 依此类推...
*
* 除引用本文件外,其余包含文件引用格式为“相对路径/绝对路径”(示例):
* include(GO2ROOT.“absoult_path/a.php");
* GO2ROOT 表示主引用文件相对于应用程序根目录的相对路径
* absoult_path 表示被引用文件相对于应用程序根目录的绝对路径
*
* GO2ROOT 常量值末尾包含了路径的"/"符号,在引用时不要再加"/"
* example:
* correct: GO2ROOT."images/logo.gif"
* wrong: GO2ROOT."/images/logo.gif"
*/
if(!defined(GO2ROOT)) define(GO2ROOT,go2root());
function go2root(){
$path_self = ($_SERVER['PHP_SELF'] == "" ) ? $_SERVER['REQUEST_URI'] : $_SERVER['PHP_SELF'];
$path_array = explode("/",$path_self);//分割目录
$path_count = count($path_array);//统计目录层数
$path_root = "";
//原程序没有 if() 判断,只有 for 循环,且 $i < $path_count -2
if($path_count == 3) $path_root = './';// 指这种情况: mysite/a.php
else if($path_count >3){
for ($i=0; $i < $path_count - 3; $i++)
{
// print_r($path_array);//调试信息
$path_root = '../'.$path_root;
}
}
return $path_root;
}
?>
另两篇参考:
阅读(1395) | 评论(1) | 转发(0) |