Home  >  Article  >  Backend Development  >  PHP implementation code for calculating the relative paths of two files

PHP implementation code for calculating the relative paths of two files

WBOY
WBOYOriginal
2016-07-25 08:57:01998browse
How to calculate the relative path between two files? It is very simple to implement using PHP. Here is a piece of code that can calculate the relative paths of two files. Friends in need may wish to refer to it.

Calculate the relative paths of two files. For example, there is the following file: $a="/a/b/c/d/e.php"; $b="/a/b/12/34/c.php". So how to calculate the relative path of B relative to A?

Code:

<?php
 /**
 * 求$b相对于$a的相对路径
 * @param string $a
 * @param string $b
 * @return string
 * @site bbs.it-home.org
 */
function getRelativePath ($a, $b)
{
    $patha = explode('/', $a);
    $pathb = explode('/', $b);
     
    $counta = count($patha) - 1;
    $countb = count($pathb) - 1;
     
    $path = "../";
    if ($countb > $counta) {
        while ($countb > $counta) {
            $path .= "../";
            $countb --;
        }
    }
     
    // 寻找第一个公共结点
    for ($i = $countb - 1; $i >= 0;) {
        if ($patha[$i] != $pathb[$i]) {
            $path .= "../";
            $i --;
        } else { // 判断是否为真正的第一个公共结点,防止出现子目录重名情况
            for ($j = $i - 1, $flag = 1; $j >= 0; $j --) {
                if ($patha[$j] == $pathb[$j]) {
                    continue;
                } else {
                    $flag = 0;
                    break;
                }
            }
             
            if ($flag)
                break;
            else
                $i ++;
        }
    }
     
    for ($i += 1; $i <= $counta; $i ++) {
        $path .= $patha[$i] . "/";
    }
     
    return $path;
}

//调用示例 
$a = "/a/c/d/e.php";
$b = "/a/c.php";
 
$path = getRelativePath($a, $b);
echo $path;
?>


Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn