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 中的输出缓冲
Dec 21 PHP
php用数组返回无限分类的列表数据的代码
Aug 08 PHP
解析PHP自带的进位制之间的转换函数
Jun 08 PHP
ThinkPHP模板范围判断输出In标签与Range标签用法详解
Jun 30 PHP
PHP队列用法实例
Nov 05 PHP
DOM基础及php读取xml内容操作的方法
Jan 23 PHP
PHP微信开发之二维码生成类
Jun 26 PHP
php微信公众平台开发之微信群发信息
Sep 13 PHP
PHP实现的mysql主从数据库状态检测功能示例
Jul 20 PHP
PHP levenshtein()函数用法讲解
Mar 08 PHP
PHP基于timestamp和nonce实现的防止重放攻击方案分析
Jul 26 PHP
Laravel5.3+框架定义API路径取消CSRF保护方法详解
Apr 06 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
德生PL660的电路分析和打磨
2021/03/02 无线电
PHP网站提速三大“软”招
2006/10/09 PHP
跟我学Laravel之路由
2014/10/15 PHP
总结一些PHP中好用但又容易忽略的小知识
2017/06/02 PHP
Laravel框架表单验证操作实例分析
2019/09/30 PHP
PHP读取文件,解决中文乱码UTF-8的方法分析
2020/01/22 PHP
使用Modello编写JavaScript类
2006/12/22 Javascript
JavaScript 学习笔记之一jQuery写法图片等比缩放以及预加载
2012/06/28 Javascript
什么是json和jsonp,jQuery json实例详详细说明
2012/12/11 Javascript
纯javascript响应式树形菜单效果
2015/11/10 Javascript
整理Javascript函数学习笔记
2015/12/01 Javascript
js倒计时抢购实例
2015/12/20 Javascript
JavaScript实现简单Tip提示框效果
2016/04/20 Javascript
React Router基础使用
2017/01/17 Javascript
微信小程序 template模板详解及实例代码
2017/03/09 Javascript
JS实现获取汉字首字母拼音、全拼音及混拼音的方法
2017/11/14 Javascript
利用Javascript开发一个二维周视图日历
2017/12/14 Javascript
vue给input file绑定函数获取当前上传的对象完美实现方法
2017/12/15 Javascript
Angular实现点击按钮后在上方显示输入内容的方法
2017/12/27 Javascript
AngularJS模态框模板ngDialog的使用详解
2018/05/11 Javascript
vue中子组件的methods中获取到props中的值方法
2018/08/27 Javascript
vue实现动态给id赋值,点击事件获取当前点击的元素的id操作
2020/11/09 Javascript
利用Python演示数型数据结构的教程
2015/04/03 Python
python可视化实现代码
2019/01/15 Python
详解Python的三种拷贝方式
2020/02/11 Python
Python类的动态绑定实现原理
2020/03/21 Python
Python Json数据文件操作原理解析
2020/05/09 Python
Python urlopen()参数代码示例解析
2020/12/10 Python
一张图片能隐含千言万语之隐藏你的程序代码
2012/12/13 HTML / CSS
HTML5画渐变背景图片并自动下载实现步骤
2013/11/18 HTML / CSS
如何写出好的Java代码
2014/04/25 面试题
文明礼仪演讲稿
2014/05/12 职场文书
三月雷锋月活动总结
2014/07/03 职场文书
2016护理专业求职自荐书
2016/01/28 职场文书
使用springboot暴露oracle数据接口的问题
2021/05/07 Oracle
浅谈tf.train.Saver()与tf.train.import_meta_graph的要点
2021/05/26 Python