note 77203 deleted from function.realpath by peehaa
| From: | peehaa@php.net | Date: | Sun, 28 Apr 2019 09:51:13 +0000 |
| Subject: | note 77203 deleted from function.realpath by peehaa | ||
| References: | 1 | Groups: | php.notes |
| Request: | Send a blank email to php-notes+get-210720@lists.php.net to get a copy of this message | ||
Note Submitter: Santosh Patnaik
----
Given real paths of two files, this function finds the relative path of one ($dest) with respect to
the other ($root).
<?php
echo rel_path('a/b/c', 'd/e'); // './../../a/b/c'
echo rel_path('a/b/c', 'a/b/c/d/e'); // './../..'
echo rel_path('a/b/c/d/e', 'a/b/c'); // './d/e'
function rel_path($dest, $root = '', $dir_sep = '/')
{
$root = explode($dir_sep, $root);
$dest = explode($dir_sep, $dest);
$path = '.';
$fix = '';
$diff = 0;
for($i = -1; ++$i < max(($rC = count($root)), ($dC = count($dest)));)
{
if(isset($root[$i]) and isset($dest[$i]))
{
if($diff)
{
$path .= $dir_sep. '..';
$fix .= $dir_sep. $dest[$i];
continue;
}
if($root[$i] != $dest[$i])
{
$diff = 1;
$path .= $dir_sep. '..';
$fix .= $dir_sep. $dest[$i];
continue;
}
}
elseif(!isset($root[$i]) and isset($dest[$i]))
{
for($j = $i-1; ++$j < $dC;)
{
$fix .= $dir_sep. $dest[$j];
}
break;
}
elseif(isset($root[$i]) and !isset($dest[$i]))
{
for($j = $i-1; ++$j < $rC;)
{
$fix = $dir_sep. '..'. $fix;
}
break;
}
}
return $path. $fix;
}
?>