//寫一個函數,算出兩個文件的相對路徑,如 $a='/a/b/c/d/e.php';$b='/a/b/12/34/c.php';
//計算出$b相對於$a的相對路徑應是 ../../c/d ;
方法一、
1 //計算出 c.php相對於e.php的相對路徑應該是../../c/d/e/f/g/h/ 2 $a = '/a/b/c/d/e/f/g/h/e.php'; 3 $b = '/a/b/1/2/c.php'; 4 //c.php相對於e.php 5 echo getpathinfo($a, $b); 6 //e.php相對於c.php 7 //echo getpathinfo($b, $b); 8 /** 9 * 方法一 10 * @param $path1 11 * @param $path2 12 * @return string 13 */ 14 function getpathinfo($path1, $path2) { 15 $a2array = explode('/', dirname($path1)); 16 $b2array = explode('/', dirname($path2)); 17 $pathinfo = ''; 18 for( $i = 1; $i <= count($b2array)-1; $i++ ) { 19 //如果兩個路徑長度不同下標 20 if(!isset($a2array[$i])){ 21 $a2array[$i]=''; 22 }elseif(!isset($a2array[$i])){ 23 $b2array[$i]=''; 24 } 25 $pathinfo.=$a2array[$i] == $b2array[$i] ? '../' : $b2array[$i].'/'; 26 27 } 28 return $pathinfo; 29 } 30
方法二、
1 //方法二、 2 echo "<br/>"; 3 echo getRelativePath($a, $b); 4 echo "<br/>"; 5 6 /** 7 * 方法二 8 * @param $path1 9 * @param $path2 10 */ 11 function getRelativePath($path1, $path2){ 12 $arr1=explode('/',dirname($path1)); 13 $arr2=explode('/',dirname($path2)); 14 for($i=0, $len=count($arr2); $i<$len; $i++ ){ 15 if($arr1[$i]!=$arr2[$i]){ 16 break ; 17 } 18 } 19 20 if($i<$len){ 21 $return_path=array_fill(0,$len-$i,'..'); 22 } 23 //$b相對於$a 24 $return_path=array_merge($return_path,array_slice($arr1,$i)); 25 /*//$a相對於$b 26 $return_path=array_merge($return_path,array_slice($arr2,$i));*/ 27 echo implode('/',$return_path); 28 29 }