PHP遍历目录文件的常用方法小结


Posted in PHP onFebruary 03, 2017

本文实例总结了PHP遍历目录文件的常用方法。分享给大家供大家参考,具体如下:

测试算法(源代码经过本站工具http://tools.3water.com/code/3water_php_format进行格式化处理,以便于读者阅读)

算法1.简短系

foreach(glob('*.*') as $filename)
{
  echo 'Filename:'.$filename.;
}

算法2.规矩系

if($handle = opendir('C:\\Inetpub\\wwwroot\\test\\')){
  echo "Files:\n";
  while (false !== ($file = readdir($handle))){
    echo "$file\n";
  }
  closedir($handle);
}

算法3.函数系

function tree($directory)
{
  $mydir=dir($directory);
  while($file=$mydir->read()){
    if((is_dir("$directory/$file")) AND ($file!=".") AND ($file!=".."))
    {
      echo "$file\n";
      tree("$directory/$file");
    } else
    echo "$file\n";
  }
  echo "\n";
  $mydir->close();
}
tree("C:\\Inetpub\\wwwroot\\test\\");

算法4.函数系II

function listDir($dir){
  if(is_dir($dir)){
    if ($dh = opendir($dir)) {
      while (($file= readdir($dh)) !== false){
        if((is_dir($dir."/".$file)) && $file!="." && $file!=".."){
          echo "文件名:",$file;
          listDir($dir."/".$file."/");
        } else{
          if($file!="." && $file!=".."){
            echo $file;
          }
        }
      }
      closedir($dh);
    }
  }
}
listDir("C:\\Inetpub\\wwwroot\\test\\");

算法5.递归系

function file_list($dir,$pattern="")
{
  $arr=array();
  $dir_handle=opendir($dir);
  if($dir_handle)
  {
    while(($file=readdir($dir_handle))!==false)
    {
      if($file==='.' || $file==='..')
      {
        continue;
      }
      $tmp=realpath($dir.'/'.$file);
      if(is_dir($tmp))
      {
        $retArr=file_list($tmp,$pattern);
        if(!emptyempty($retArr))
        {
          $arr[]=$retArr;
        }
      } else
      {
        if($pattern==="" || preg_match($pattern,$tmp))
        {
          $arr[]=$tmp;
        }
      }
    }
    closedir($dir_handle);
  }
  return $arr;
}
print_r(file_list("C:\\Inetpub\\wwwroot\\test\\"));

测试方法

我们采取在测试代码的头部和尾部添加如下的内容来检测执行时间,并测试5次取平均结果作为最终成绩。

$stime=microtime(true);
//测试代码
//......
//......
$etime=microtime(true);
$total=($etime-$stime)*1000;
echo "{$total} Millisecond(s)";

测试结果:

算法1

算法1在浏览器能正确输出所有项目,5次测验耗费的时间分别是:

平均用时=3803.618621824 毫秒

算法2

算法2在浏览器也能正确输出所有项目,但在开头会给出“..”(上级目录)的信息。5次测验耗费的时间分别是:

平均用时=381.0853481294 毫秒

算法3

算法3在浏览器能正确输出所有项目,也仍会给出“..”(上级目录)的信息。5次测验耗费的时间分别是:

平均用时=24299.2805485 毫秒

算法4

算法4和算法3类似,在浏览器能正确输出所有项目,5次测验耗费的时间分别是:

平均用时=24020.66812516 毫秒

算法5

算法5曾一度让我以为IIS又出问题了。虽说它在浏览器能正确输出所有项目,但数据的结果默认为数组。5次测验耗费的时间分别是:

平均用时=61411.31243706 毫秒

测试总结

根据测试结果,我们很容易得出下面的速度排名。

算法2 > 算法1 > 算法4 >  算法3 > 算法5

为什么算法2要比其他算法都高效一些呢?

实际上是因为算法中只使用了php中内置用来读取目录内容的函数“readdir()” 。除了算法1以外,其他算法在引用readdir()的时候,为了弥补函数的先天不足,干了很多其他的事情。

如果说,我们需要指定扩展名的列举目录内所有文件的话。Rt推荐使用算法1的模式,我们将代码写成这样就可以了。

foreach(glob('*.需要的扩展名') as $filename)
{
  echo 'Filename:'.$filename.;
}

结语

不管作为一个代码新手还是一个资深的程序员,在堆砌代码的时候,更应该关注程序的效率和安全。

请不要忽略任何一种可能,也请不要让孩子般的代码成为拖累服务器的罪魁祸首。

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

PHP 相关文章推荐
PHP中MD5函数使用实例代码
Jun 07 PHP
PHP乱码问题,UTF-8乱码常见问题小结
Apr 09 PHP
windows下apache搭建php开发环境
Aug 27 PHP
WordPress中制作导航菜单的PHP核心方法讲解
Dec 11 PHP
浅谈PHP表单提交(POST&GET&URL编/解码)
Apr 03 PHP
PHP设计模式之状态模式定义与用法详解
Apr 02 PHP
php 将json格式数据转换成数组的方法
Aug 21 PHP
PHP常用工具函数小结【移除XSS攻击、UTF8与GBK编码转换等】
Apr 27 PHP
php求斐波那契数的两种实现方式【递归与递推】
Sep 09 PHP
laravel 框架结合关联查询 when()用法分析
Nov 22 PHP
PHP xpath提取网页数据内容代码解析
Jul 16 PHP
PHP时间类完整代码实例
Feb 26 PHP
详解yii2实现分库分表的方案与思路
Feb 03 #PHP
php获取客户端IP及URL的方法示例
Feb 03 #PHP
php观察者模式应用场景实例详解
Feb 03 #PHP
PHP CURL采集百度搜寻结果图片不显示问题的解决方法
Feb 03 #PHP
php使用curl代理实现抓取数据的方法
Feb 03 #PHP
php实现xml转换数组的方法示例
Feb 03 #PHP
php删除txt文件指定行及按行读取txt文档数据的方法
Jan 30 #PHP
You might like
php设计模式之享元模式分析【星际争霸游戏案例】
2020/03/23 PHP
jQuery 标题的自动翻转实现代码
2009/10/14 Javascript
fancybox1.3.1 基于Jquery的插件在IE中图片显示问题
2010/10/01 Javascript
js实现鼠标拖动图片并兼容IE/FF火狐/谷歌等主流浏览器
2013/06/06 Javascript
jquery选择器、属性设置用法经验总结
2013/09/08 Javascript
jQuery控制DIV层实现由大到小,由远及近动画变化效果
2015/10/09 Javascript
使用jQuery制作基础的Web图片轮播效果
2016/04/22 Javascript
基于jquery实现即时检查格式是否正确的表单
2016/05/06 Javascript
AngularJS入门教程之ng-checked 指令详解
2016/08/01 Javascript
浅析JavaScript动画模拟拖拽原理
2016/12/09 Javascript
easyui datebox 时间限制,datebox开始时间限制结束时间,datebox截止日期比起始日期大的实现代码
2017/01/12 Javascript
基于vue 实现token验证的实例代码
2017/12/14 Javascript
浅谈React前后端同构防止重复渲染
2018/01/05 Javascript
vue 实现边输入边搜索功能的实例讲解
2018/09/16 Javascript
微信小程序结合mock.js实现后台模拟及调试
2019/03/28 Javascript
在Vue中使用antv的示例代码
2020/06/29 Javascript
python删除指定类型(或非指定)的文件实例详解
2015/07/06 Python
Django的信号机制详解
2017/05/05 Python
python实现数据图表
2017/07/29 Python
Django 路由系统URLconf的使用
2018/10/11 Python
使用Python操作FTP实现上传和下载的方法
2019/04/01 Python
python为QT程序添加图标的方法详解
2020/03/09 Python
在jupyter notebook 添加 conda 环境的操作详解
2020/04/10 Python
matplotlib quiver箭图绘制案例
2020/04/17 Python
Html5无刷新修改browser Url的方法
2014/01/15 HTML / CSS
UGG英国官方网站:UGG UK
2018/02/08 全球购物
Hibernate持久层技术
2013/12/16 面试题
挖掘机司机岗位职责
2014/02/12 职场文书
公立医院改革实施方案
2014/03/14 职场文书
2015羊年春节慰问信
2015/02/14 职场文书
裁员通知
2015/04/25 职场文书
村级干部党员公开承诺事项
2015/05/04 职场文书
毕业论文答辩演讲稿
2015/06/23 职场文书
忠诚教育学习心得体会
2016/01/23 职场文书
浅谈Python数学建模之线性规划
2021/06/23 Python
解决vue-router的beforeRouteUpdate不能触发
2022/04/14 Vue.js