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 相关文章推荐
第十三节 对象串行化 [13]
Oct 09 PHP
PHP新手上路(六)
Oct 09 PHP
PHP之数组学习
May 29 PHP
php中修改浏览器的User-Agent来伪装你的浏览器和操作系统
Jul 29 PHP
php获取ip的三个属性区别介绍(HTTP_X_FORWARDED_FOR,HTTP_VIA,REMOTE_ADDR)
Sep 23 PHP
PHP中怎样防止SQL注入分析
Oct 23 PHP
WordPress开发中短代码的实现及相关函数使用技巧
Jan 05 PHP
PHP中session跨子域的三种实现方法
Jul 25 PHP
php图形jpgraph操作实例分析
Feb 22 PHP
PHP jpgraph库的配置及生成统计图表:折线图、柱状图、饼状图
May 15 PHP
Yii框架日志记录Logging操作示例
Jul 12 PHP
php 自定义函数实现将数据 以excel 表格形式导出示例
Nov 13 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
第十二节--类的自动加载
2006/11/16 PHP
php数组函数序列之krsort()- 对数组的元素键名进行降序排序,保持索引关系
2011/11/02 PHP
PHP上传图片进行等比缩放可增加水印功能
2014/01/13 PHP
prototype 的说明 js类
2006/09/07 Javascript
js 函数调用模式小结
2011/12/26 Javascript
THREE.JS入门教程(4)创建粒子系统
2013/01/24 Javascript
原生JS实现表单checkbook获取已选择的值
2013/07/21 Javascript
jquery checkbox 勾选的bug问题解决方案与分析
2014/11/13 Javascript
jquery实现可旋转可拖拽的文字效果代码
2016/01/27 Javascript
两种方法解决javascript url post 特殊字符转义 + &amp; #
2016/04/13 Javascript
浅析jQuery中使用$所引发的问题
2016/05/29 Javascript
js创建对象几种方式的优缺点对比
2016/09/28 Javascript
JavaScript数据结构链表知识详解
2016/11/21 Javascript
使用vue.js实现联动效果的示例代码
2017/01/10 Javascript
EsLint入门学习教程
2017/02/17 Javascript
vue 计时器组件的实现代码
2017/09/14 Javascript
vue中的event bus非父子组件通信解析
2017/10/27 Javascript
JavaScript Dom 绑定事件操作实例详解
2019/10/02 Javascript
在vue中使用Echarts画曲线图的示例
2020/10/03 Javascript
[02:19]DOTA2上海特级锦标赛 观赛指南 Spectator Guide
2016/02/04 DOTA
[42:06]2019国际邀请赛全明星赛 8.23
2019/09/05 DOTA
Python3基础之list列表实例解析
2014/08/13 Python
跟老齐学Python之字典,你还记得吗?
2014/09/20 Python
用Python解决计数原理问题的方法
2016/08/04 Python
Python操作mysql数据库实现增删查改功能的方法
2018/01/15 Python
Python实现JSON反序列化类对象的示例
2018/01/31 Python
对Python 内建函数和保留字详解
2018/10/15 Python
django搭建项目配置环境和创建表过程详解
2019/07/22 Python
基于Python实现2种反转链表方法代码实例
2020/07/06 Python
HTML5之SVG 2D入门11—用户交互性(动画)介绍及应用
2013/01/30 HTML / CSS
逻辑链路控制协议
2016/10/01 面试题
数控专业推荐信范文
2013/12/02 职场文书
生产部统计员岗位职责
2014/01/05 职场文书
目标管理责任书
2014/04/15 职场文书
办公室主任竞聘演讲稿
2014/05/15 职场文书
tree shaking对打包体积优化及作用
2022/07/07 Java/Android