<p>PHP中计算相对路径的代码</p><pre class="brush:php;toolbar:false">functiontransfer($apa,$apb,&amp;$rpa,&amp;$rpb) { $apa=str_replace(&#39;\\&#39;,&#39;/&#39;,$apa);//把\预处理为/ $apb=str_replace(&#39;\\&#39;,&#39;/&#39;,$apb); //对于某一个串为空串或者只含有一个/或者\ if($apa==&#39;&#39;||$apb==&#39;&#39;||$apa==&#39;/&#39;|| $apb==&#39;/&#39;||$apa==&#39;\\&#39;||$apb==&#39;\\&#39;) returnfalse; $apa_arr=explode(&#39;/&#39;,trim($apa,&#39;/&#39;)); $apb_arr=explode(&#39;/&#39;,trim($apb,&#39;/&#39;)); $al=count($apa_arr); $bl=count($apb_arr); $i=0; while(true) { if($i&gt;=$al||$i&gt;=$bl) { break; } if($apa_arr[$i]!=$apb_arr[$i]) { break; } $i++; } $rpa=&#39;&#39;; $rpb=&#39;&#39;; for($j=$i;$j&lt;$al-1;$j++) { $rpb.=&#39;../&#39;; $rpa.=$apa_arr[$j].&#39;/&#39;; } for($j=$i;$j&lt;$bl-1;$j++) { $rpa=&#39;../&#39;.$rpa; $rpb.=$apb_arr[$j].&#39;/&#39;; } $rpa.=$apa_arr[$al-1]; $rpb.=$apb_arr[$bl-1]; returntrue; }</pre><p>使用样例进行测试:</p><p>分别为:</p><p>1、两个路径中其中一个为空串</p><p>2、两个路径在不同的目录下</p><p>3、两个路径在同一目录下</p><p>4、其中一个路径的父路径和另一条路径在同一目录下</p><p>测试程序:</p><pre class="brush:php;toolbar:false">&lt;?php echo&quot;绝对路径to相对路径:&lt;br/&gt;&quot;; functiontransfer($apa,$apb,&amp;$rpa,&amp;$rpb) { $apa=str_replace(&#39;\\&#39;,&#39;/&#39;,$apa);//把\预处理为/ $apb=str_replace(&#39;\\&#39;,&#39;/&#39;,$apb); //对于某一个串为空串或者只含有一个/或者\ if($apa==&#39;&#39;||$apb==&#39;&#39;||$apa==&#39;/&#39;|| $apb==&#39;/&#39;||$apa==&#39;\\&#39;||$apb==&#39;\\&#39;) returnfalse; $apa_arr=explode(&#39;/&#39;,trim($apa,&#39;/&#39;)); $apb_arr=explode(&#39;/&#39;,trim($apb,&#39;/&#39;)); $al=count($apa_arr); $bl=count($apb_arr); $i=0; while(true) { if($i&gt;=$al||$i&gt;=$bl) { break; } if($apa_arr[$i]!=$apb_arr[$i]) { break; } $i++; } $rpa=&#39;&#39;; $rpb=&#39;&#39;; for($j=$i;$j&lt;$al-1;$j++) { $rpb.=&#39;../&#39;; $rpa.=$apa_arr[$j].&#39;/&#39;; } for($j=$i;$j&lt;$bl-1;$j++) { $rpa=&#39;../&#39;.$rpa; $rpb.=$apb_arr[$j].&#39;/&#39;; } $rpa.=$apa_arr[$al-1]; $rpb.=$apb_arr[$bl-1]; returntrue; } functionoutput($apa,$apb) { echo&quot;串a:$apa&lt;br/&gt;串b:$apb&lt;br/&gt;&quot;; if(transfer($apa,$apb,$a,$b)) echo&#39;a相对于b的路径:&#39;.$a.&#39;&lt;br/&gt;b相对于a的路径:&#39;.$b.&#39;&lt;br/&gt;&#39;; else echo&#39;不存在相对路径&#39;; echo&#39;&lt;br/&gt;&lt;br/&gt;&#39;; } output(&#39;/home/web/test/a.php&#39;,&#39;&#39;); output(&#39;/home/web/test/a.php&#39;,&#39;/home/data/d.png&#39;); output(&#39;/home/web/test/a.php&#39;,&#39;/home/web/test/d.png&#39;); output(&#39;/home/web/test/myyy/a.php&#39;,&#39;/home/web/test/d.png&#39;); ?&gt; 结果: 绝对路径to相对路径: 串a:/home/web/test/a.php 串b: 不存在相对路径 串a:/home/web/test/a.php 串b:/home/data/d.png a相对于b的路径:../web/test/a.php b相对于a的路径:../../data/d.png 串a:/home/web/test/a.php 串b:/home/web/test/d.png a相对于b的路径:a.php b相对于a的路径:d.png 串a:/home/web/test/myyy/a.php 串b:/home/web/test/d.png a相对于b的路径:myyy/a.php b相对于a的路径:../d.png</pre>
T:0.006645s,M:207.49 KB
返回顶部 留言