PHP文件操作之获取目录下文件与计算相对路径的方法


Posted in PHP onJanuary 08, 2016

获取目录下文件

1、获取目录下文件,不包括子目录

//获取某目录下所有文件、目录名(不包括子目录下文件、目录名) 
  $handler = opendir($dir); 
  while (($filename = readdir($handler)) !== false) {//务必使用!==,防止目录下出现类似文件名“0”等情况 
    if ($filename != "." && $filename != "..") { 
        $files[] = $filename ; 
      } 
    } 
  } 
  closedir($handler); 
    
//打印所有文件名 
foreach ($filens as $value) { 
  echo $value."<br />"; 
}

2、获取目录下所有文件,包括子目录

function get_allfiles($path,&$files) { 
  if(is_dir($path)){ 
    $dp = dir($path); 
    while ($file = $dp ->read()){ 
      if($file !="." && $file !=".."){ 
        get_allfiles($path."/".$file, $files); 
      } 
    } 
    $dp ->close(); 
  } 
  if(is_file($path)){ 
    $files[] = $path; 
  } 
} 
   
function get_filenamesbydir($dir){ 
  $files = array(); 
  get_allfiles($dir,$files); 
  return $files; 
} 
   
$filenames = get_filenamesbydir("static/image/"); 
//打印所有文件名,包括路径 
foreach ($filenames as $value) { 
  echo $value."<br />"; 
}

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

例如:
文件A 的路径是 /home/web/lib/img/cache.php
文件B的路径是 /home/web/api/img/show.php
那么,文件A相对于文件B的路径是 ../../lib/img/cache.php,即文件B 访问 文件A的相对路径。

function getRelativePath

<?php 
/** 计算path1 相对于 path2 的路径,即在path2引用paht1的相对路径 
* @param String $path1 
* @param String $path2 
* @return String 
*/ 
function getRelativePath($path1, $path2){ 
  $arr1 = explode('/', $path1); 
  $arr2 = explode('/', $path2); 
 
  // 获取相同路径的部分 
  $intersection = array_intersect_assoc($arr1, $arr2); 
 
  $depth = 0; 
 
  for($i=0,$len=count($intersection); $i<$len; $i++){ 
    if(!isset($intersection[$i])){ 
      $depth = $i; 
      break; 
    } 
  } 
 
  // 将path2的/ 转为 ../,path1获取后面的部分,然后合拼 
  $tmp = array_merge(array_fill(0, count($arr2)-$depth-1, '..'), array_slice($arr1, $depth)); 
 
  $relativePath = implode('/', $tmp); 
 
  return $relativePath; 
} 
?>

demo

<?php 
$path1 = '/home/web/lib/img/cache.php'; 
$path2 = '/home/web/api/img/show.php'; 
 
echo getRelativePath($path1, $path2); // ../../lib/img/cache.php 
?>
PHP 相关文章推荐
php 变量定义方法
Jun 14 PHP
php设计模式 Bridge (桥接模式)
Jun 26 PHP
php抽奖小程序的实现代码
Jun 18 PHP
解析yii数据库的增删查改
Jun 20 PHP
实现PHP多线程异步请求的3种方法
Jan 17 PHP
php动态绑定变量的用法
Jun 16 PHP
46 个非常有用的 PHP 代码片段
Feb 16 PHP
YII Framework教程之异常处理详解
Mar 14 PHP
静态html文件执行php语句的方法(推荐)
Nov 21 PHP
PHP第三方登录―QQ登录实现方法
Feb 06 PHP
PHP使用zlib扩展实现GZIP压缩输出的方法详解
Apr 09 PHP
ThinkPHP like模糊查询,like多匹配查询,between查询,in查询,一般查询书写方法
Sep 26 PHP
关于扩展 Laravel 默认 Session 中间件导致的 Session 写入失效问题分析
Jan 08 #PHP
在PHP站点的页面上添加Facebook评论插件的实例教程
Jan 08 #PHP
理解PHP中的Session及对Session有效期的控制
Jan 08 #PHP
PHP实现搜索地理位置及计算两点地理位置间距离的实例
Jan 08 #PHP
PHP使用数组依次替换字符串中匹配项
Jan 08 #PHP
PHP 7.0.2 正式版发布
Jan 08 #PHP
深入浅析php中sprintf与printf函数的用法及区别
Jan 08 #PHP
You might like
关于session在PHP5的配置文件中的详细设置参数说明
2011/04/20 PHP
php各种编码集详解和以及在什么情况下进行使用
2011/09/11 PHP
PHP实现链式操作的原理详解
2016/09/16 PHP
PHP面向对象类型约束用法分析
2019/06/12 PHP
js判断IE6/IE7/FF的代码[XMLHttpRequest]
2011/02/16 Javascript
jquery的ajax跨域请求原理和示例
2014/05/08 Javascript
JS+CSS实现可以凹陷显示选中单元格的方法
2015/03/02 Javascript
jQuery事件的绑定、触发、及监听方法简单说明
2016/05/10 Javascript
JS如何判断json是否为空
2016/07/06 Javascript
jQuery过滤选择器经典应用
2016/08/18 Javascript
微信小程序 for 循环详解
2016/10/09 Javascript
JS 终止执行的实现方法
2016/11/24 Javascript
AngularJS路由Ui-router模块用法示例
2017/05/29 Javascript
详解基于Vue+Koa的pm2配置
2017/10/24 Javascript
Bootstrap实现下拉菜单多级联动
2017/11/23 Javascript
vue实现tab切换外加样式切换方法
2018/03/16 Javascript
在vue+element ui框架里实现lodash的debounce防抖
2019/11/13 Javascript
Vue页面手动刷新,实现导航栏激活项还原到初始状态
2020/08/06 Javascript
解决vue中使用less/sass及使用中遇到无效的问题
2020/10/24 Javascript
[02:52]2014DOTA2西雅图国际邀请赛 CIS战队巡礼
2014/07/07 DOTA
python计算最小优先级队列代码分享
2013/12/18 Python
10种检测Python程序运行时间、CPU和内存占用的方法
2015/04/01 Python
Python 文件处理注意事项总结
2017/04/10 Python
利用python将pdf输出为txt的实例讲解
2018/04/23 Python
基于Python的Post请求数据爬取的方法详解
2019/06/14 Python
Python3 虚拟开发环境搭建过程(图文详解)
2020/01/06 Python
中文师范生自荐信
2014/01/30 职场文书
货物运输服务质量承诺书
2014/05/29 职场文书
农村文化活动总结
2014/08/28 职场文书
文明倡议书
2015/01/19 职场文书
2015年幼儿园个人工作总结
2015/04/25 职场文书
员工开除通知书
2015/04/25 职场文书
党小组评议意见
2015/06/02 职场文书
初一英语教学反思
2016/02/15 职场文书
《普罗米修斯》教学反思
2016/02/22 职场文书
微软Win11 全新照片应用面向 Dev预览版推出 新版本上手体验图集
2022/09/23 数码科技