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的FTP学习(一)[转自奥索]
Oct 09 PHP
php设计模式 Composite (组合模式)
Jun 26 PHP
字符串长度函数strlen和mb_strlen的区别示例介绍
Sep 09 PHP
ThinkPHP公共配置文件与各自项目中配置文件组合的方法
Nov 24 PHP
PHP多线程之内部多线程实例分析
Mar 09 PHP
深入理解PHP内核(二)之SAPI探究
Nov 10 PHP
PHP微信开发用Cache 解决数据缓存
Jul 11 PHP
CI框架实现优化文件上传及多文件上传的方法
Jan 04 PHP
PHP用PDO如何封装简单易用的DB类详解
Jul 30 PHP
PHP基于堆栈实现的高级计算器功能示例
Sep 15 PHP
PHP实现微信提现(企业付款到零钱)
Aug 01 PHP
yii框架结合charjs统计上一年与当前年数据的方法示例
Apr 04 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发电子邮件
2006/10/09 PHP
php中防止伪造跨站请求的小招式
2011/09/02 PHP
用PHP写的基于Memcache的Queue实现代码
2011/11/27 PHP
php+js实现图片的上传、裁剪、预览、提交示例
2013/08/27 PHP
php正则判断是否为合法身份证号的方法
2017/03/16 PHP
PHP数据对象映射模式实例分析
2019/03/29 PHP
70+漂亮且极具亲和力的导航菜单设计国外网站推荐
2011/09/20 Javascript
js 页面元素的几个用法总结
2013/11/18 Javascript
js动画效果制件让图片组成动画代码分享
2014/01/14 Javascript
js给selected添加options的方法
2015/05/06 Javascript
javascript创建对象、对象继承的实用方式详解
2016/03/08 Javascript
jQuery树形控件zTree使用小结
2016/08/02 Javascript
javascript 组合按键事件监听实现代码
2017/02/21 Javascript
Vue中的数据监听和数据交互案例解析
2017/07/12 Javascript
ES6中Array.includes()函数的用法
2017/09/20 Javascript
vue路由切换之淡入淡出的简单实现
2019/10/31 Javascript
微信小程序表单验证WxValidate的使用
2019/11/27 Javascript
vue2.0实现列表数据增加和删除
2020/06/17 Javascript
在Python中使用zlib模块进行数据压缩的教程
2015/06/26 Python
python自动发邮件库yagmail的示例代码
2018/02/23 Python
python实现树的深度优先遍历与广度优先遍历详解
2019/10/26 Python
Python&&GDAL实现NDVI的计算方式
2020/01/09 Python
Python 实现Image和Ndarray互相转换
2020/02/19 Python
总结python 三种常见的内存泄漏场景
2020/11/20 Python
HTML 5 标签、属性、事件及浏览器兼容性速查表 附打包下载
2012/10/20 HTML / CSS
苹果中国官方网站:Apple中国
2016/07/22 全球购物
Bitiba意大利:在线宠物商店
2020/10/31 全球购物
百度软件工程师职位
2013/02/14 面试题
最新英语专业学生求职信范文
2013/09/21 职场文书
一个大学生十年的职业规划
2014/01/17 职场文书
五型班组建设方案
2014/02/10 职场文书
优秀食品类广告词
2014/03/19 职场文书
刑事辩护授权委托书格式
2014/10/13 职场文书
党员违纪检讨书怎么写
2014/11/01 职场文书
幼儿园体操比赛口号
2015/12/25 职场文书
MySQL 逻辑备份与恢复测试的相关总结
2021/05/14 MySQL