码库记事本

码库记事本

php计算两个文件相对路径的方法

小诸哥 0

本文实例讲述了php计算两个文件相对路径的方法。分享给大家供大家参考。具体如下:

一、问题:

写一个php函数算出两个文件的相对路径。例如$a="/a/b/c/d/e.php"; $b="/a/b/12/34/c.php",B相对于A的相对路径是什么?

二、解决方法:

  1. <?php
  2. /**
  3.      * 求$b相对于$a的相对路径
  4.      * @param string $a
  5.      * @param string $b
  6.      * @return string
  7.      */
  8. function getRelativePath ($a, $b)
  9. {
  10.      $patha = explode('/', $a);
  11.      $pathb = explode('/', $b);
  12.      $counta = count($patha) - 1;
  13.      $countb = count($pathb) - 1;
  14.      $path = "../";
  15.      if ($countb > $counta) {
  16.      while ($countb > $counta) {
  17.          $path .= "../";
  18.          $countb --;
  19.      }
  20.      }
  21.      // 寻找第一个公共结点
  22.      for ($i = $countb - 1; $i >= 0;) {
  23.      if ($patha[$i] != $pathb[$i]) {
  24.          $path .= "../";
  25.          $i --;
  26.      } else {
  27. //判断是否为真正的第一个公共结点,防止出现子目录重名情况
  28.          for ($j = $i - 1, $flag = 1; $j >= 0; $j --) {
  29.          if ($patha[$j] == $pathb[$j]) {
  30.              continue;
  31.          } else {
  32.              $flag = 0;
  33.              break;
  34.          }
  35.          }
  36.          if ($flag)
  37.          break;
  38.          else
  39.          $i ++;
  40.      }
  41.      }
  42.      for ($i += 1; $i <= $counta; $i ++) {
  43.      $path .= $patha[$i] . "/";
  44.      }
  45.      return $path;
  46. }
  47. $a = "/a/c/d/e.php";
  48. $b = "/a/c.php";
  49. $path = getRelativePath($a, $b);
  50. echo $path;

希望本文所述对大家的php程序设计有所帮助。

标签: 相对路径