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


Posted in PHP onMarch 14, 2015

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

一、问题:

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

二、解决方法:

<?php
/**
 * 求$b相对于$a的相对路径
 * @param string $a
 * @param string $b
 * @return string
 */
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;

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

PHP 相关文章推荐
php 网页游戏开发入门教程一(webgame+design)
Oct 26 PHP
php中global和$GLOBALS[]的分析之一
Feb 02 PHP
解析将多维数组转换为支持curl提交的一维数组格式
Jul 08 PHP
php实现的zip文件内容比较类
Sep 24 PHP
php使用MySQL保存session会话的方法
Jun 18 PHP
PHP实现获取文件后缀名的几种常用方法
Aug 08 PHP
php语言中使用json的技巧及json的实现代码详解
Oct 27 PHP
php的socket编程详解
Nov 20 PHP
php取出数组单个值的方法
Mar 12 PHP
php使用filter_var函数判断邮箱,url,ip格式示例
Jul 06 PHP
PHP 文件写入和读取操作实例详解【必看篇】
Nov 04 PHP
PHP copy函数使用案例代码解析
Sep 01 PHP
php计算两个日期相差天数的方法
Mar 14 #PHP
php压缩和解压缩字符串的方法
Mar 14 #PHP
php单例模式实现方法分析
Mar 14 #PHP
php写入数据到CSV文件的方法
Mar 14 #PHP
php从数组中随机选择若干不重复元素的方法
Mar 14 #PHP
php利用反射实现插件机制的方法
Mar 14 #PHP
php检测apache mod_rewrite模块是否安装的方法
Mar 14 #PHP
You might like
Windows中安装Apache2和PHP4权威指南
2006/11/18 PHP
人尽可用的Windows技巧小贴士之下篇
2007/03/22 PHP
Linux下ZendOptimizer的安装与配置方法
2007/04/12 PHP
YII CLinkPager分页类扩展增加显示共多少页
2016/01/29 PHP
PHP微信刮刮卡 附微信接口
2016/07/22 PHP
laravel 之 Eloquent 模型修改器和序列化示例
2019/10/17 PHP
[HTML/CSS/Javascript]WWTJS
2007/09/25 Javascript
用JQuery在网页中实现分隔条功能的代码
2012/08/09 Javascript
JavaScript操作select元素和option的实例代码
2016/01/29 Javascript
WordPress 单页面上一页下一页的实现方法【附代码】
2016/03/10 Javascript
浅析JavaScript中的对象类型Object
2016/05/26 Javascript
D3.js实现雷达图的方法详解
2016/09/22 Javascript
js实现鼠标移动到图片产生遮罩效果
2017/10/21 Javascript
js 提取某()特殊字符串长度的实例
2017/12/06 Javascript
Vue中div contenteditable 的光标定位方法
2018/08/25 Javascript
微信小程序实现顶部下拉菜单栏
2018/11/04 Javascript
vue+iview/elementUi实现城市多选
2019/03/28 Javascript
maptalks+three.js+vue webpack实现二维地图上贴三维模型操作
2020/08/10 Javascript
Vue-cli打包后部署到子目录下的路径问题说明
2020/09/02 Javascript
[01:04:29]DOTA2-DPC中国联赛 正赛 Phoenix vs XG BO3 第二场 1月31日
2021/03/11 DOTA
收藏整理的一些Python常用方法和技巧
2015/05/18 Python
python开发之IDEL(Python GUI)的使用方法图文详解
2015/11/12 Python
Python实现代码统计工具(终极篇)
2016/07/04 Python
python读取TXT每行,并存到LIST中的方法
2018/10/26 Python
Python 中包/模块的 `import` 操作代码
2019/04/22 Python
师德个人剖析材料
2014/02/02 职场文书
运动会闭幕式解说词
2014/02/21 职场文书
竞选大队委员演讲稿
2014/04/28 职场文书
2014年文明创建工作总结
2014/11/25 职场文书
作文评语怎么写
2014/12/25 职场文书
悬空寺导游词
2015/02/05 职场文书
学术会议通知
2015/04/15 职场文书
入伍通知书
2015/04/23 职场文书
用python批量解压带密码的压缩包
2021/05/31 Python
Golang并发操作中常见的读写锁详析
2021/08/30 Golang
如何通过一篇文章了解Python中的生成器
2022/04/02 Python