php 计算出相对路径,PHP计算相对路径

PHP中计算相对路径的代码

function transfer($apa, $apb, &$rpa, &$rpb)

{

$apa = str_replace('\\', '/', $apa); // 把\预处理为/

$apb = str_replace('\\', '/', $apb);

// 对于某一个串为空串或者只含有一个/或者\

if($apa == '' || $apb == '' || $apa == '/' ||

$apb == '/' || $apa == '\\' || $apb == '\\')

return false;

$apa_arr = explode('/', trim($apa, '/'));

$apb_arr = explode('/', trim($apb, '/'));

$al = count($apa_arr);

$bl = count($apb_arr);

$i=0;

while(true)

{

if($i>=$al || $i>=$bl)

{

break;

}

if($apa_arr[$i] != $apb_arr[$i])

{

break;

}

$i++;

}

$rpa = '';

$rpb = '';

for($j=$i; $j

{

$rpb .= '../';

$rpa .= $apa_arr[$j].'/';

}

for($j=$i; $j

{

$rpa = '../'.$rpa;

$rpb .= $apb_arr[$j].'/';

}

$rpa .= $apa_arr[$al-1];

$rpb .= $apb_arr[$bl-1];

return true;

}

使用样例进行测试:

分别为:

1、两个路径中其中一个为空串

2、两个路径在不同的目录下

3、两个路径在同一目录下

4、其中一个路径的父路径和另一条路径在同一目录下

测试程序:

echo "绝对路径 to 相对路径:
";

function transfer($apa, $apb, &$rpa, &$rpb)

{

$apa = str_replace('\\', '/', $apa); // 把\预处理为/

$apb = str_replace('\\', '/', $apb);

// 对于某一个串为空串或者只含有一个/或者\

if($apa == '' || $apb == '' || $apa == '/' ||

$apb == '/' || $apa == '\\' || $apb == '\\')

return false;

$apa_arr = explode('/', trim($apa, '/'));

$apb_arr = explode('/', trim($apb, '/'));

$al = count($apa_arr);

$bl = count($apb_arr);

$i=0;

while(true)

{

if($i>=$al || $i>=$bl)

{

break;

}

if($apa_arr[$i] != $apb_arr[$i])

{

break;

}

$i++;

}

$rpa = '';

$rpb = '';

for($j=$i; $j

{

$rpb .= '../';

$rpa .= $apa_arr[$j].'/';

}

for($j=$i; $j

{

$rpa = '../'.$rpa;

$rpb .= $apb_arr[$j].'/';

}

$rpa .= $apa_arr[$al-1];

$rpb .= $apb_arr[$bl-1];

return true;

}

function output($apa, $apb)

{

echo "串a:$apa
串b:$apb
";

if(transfer($apa, $apb, $a, $b))

echo 'a相对于b的路径:'.$a.'
b相对于a的路径:'.$b.'
';

else

echo '不存在相对路径';

echo '
';

}

output('/home/web/test/a.php','');

output('/home/web/test/a.php','/home/data/d.png');

output('/home/web/test/a.php','/home/web/test/d.png');

output('/home/web/test/myyy/a.php','/home/web/test/d.png');

?>

结果:

绝对路径 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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值