PHP計算相対パス
PHPで相対パスを計算するコード
サンプルを使用してテスト:
それぞれ:
1、2つのパスのうちの1つが空白です
2、2つのパスが異なるディレクトリの下にある
3、2つのパスが同じディレクトリの下にある
4.1つのパスの親パスと別のパスが同じディレクトリの下にある
試験手順:
結果:
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
サンプルを使用してテスト:
それぞれ:
1、2つのパスのうちの1つが空白です
2、2つのパスが異なるディレクトリの下にある
3、2つのパスが同じディレクトリの下にある
4.1つのパスの親パスと別のパスが同じディレクトリの下にある
試験手順:
";
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 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