http://hi.baidu.com/ken00821/blog/item/6a4cf8d48dc7a4ce50da4b09.html
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
function getRelativePath($a,$b){ $a_url = array(dirname($a)); $b_url = array(dirname($b)); $a_arr = explode('/',$a_url[0]); $b_arr = explode('/',$b_url[0]); $len = count($a_arr); $art1 = ''; $art2 = ''; for($i=1;$i<$len;$i++){ if($a_arr[$i]<>$b_arr[$i]){ $art1.= '../'; $art2.= $a_arr[$i].'/'; } } return $art1.$art2; } $a = '/a/b/c/d/e.php'; $b = '/a/b/12/34/c.php'; echo getRelativePath($a, $b); //../../c/d/ |
解决的问题:当你在一个文件可能会被很多个文件包含,并且路径不过顶的时候,可能会使用到这个方法:这个方法是对上面方法的修改:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
function getRelativePath($a,$b){ // =/MyWebSite/dev/gov1Dev/config/dbConfig.php // =/MyWebSite/dev/gov1Dev/index.php //a=/MyWebSite/dev/gov1Dev/config/dbConfig.php //b=/MyWebSite/dev/gov1Dev/pages/level1.php //echo "a=".$a."<br>"; //echo "b=".$b."<br>"; $fileName = substr($a,strripos($a,"/")+1); $a_url = array(dirname($a)); $b_url = array(dirname($b)); $a_arr = explode('/',$a_url[0]); $b_arr = explode('/',$b_url[0]); $len = count($a_arr); $len1 = count($b_arr); $art1 = ''; $art2 = ''; for($i=1;$i<$len;$i++){ if($a_arr[$i]<>$b_arr[$i]){ $art1.= '../'; $art2.= $a_arr[$i].'/'; } } if((count($a_arr)-count($b_arr))>0) return $art2.$fileName; else return $art1.$art2.$fileName; //return $art2.$fileName; } |
第一个参数: 被包含文件:/dev/gov1Dev/config/dbConfig.php
第二个参数: 包含文件:/dev/gov1Dev/pages/level2.php
得到结果:../config/dbConfig.php
那么,在level.php包含dbConfig的应该写成:../config/dbConfig.php