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 ADODB使用方法集锦
Mar 25 PHP
php实现jQuery扩展函数
Oct 30 PHP
php 验证码实例代码
Jun 01 PHP
php在线代理转向代码
May 05 PHP
php curl基本操作详解
Jul 23 PHP
php读取本地文件常用函数(fopen与file_get_contents)
Sep 09 PHP
php时间戳格式化显示友好的时间函数分享
Oct 21 PHP
PHP抓取网页、解析HTML常用的方法总结
Jul 01 PHP
twig里使用js变量的方法
Feb 05 PHP
phpstudy默认不支持64位php的解决方法
Feb 20 PHP
thinkphp中的多表关联查询的实例详解
Oct 12 PHP
PHP strripos函数用法总结
Feb 11 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面试题(对属性或方法的访问控制)
2012/09/13 PHP
解析crontab php自动运行的方法
2013/06/24 PHP
php简单判断两个字符串是否相等的方法
2015/07/13 PHP
Yii安装与使用Excel扩展的方法
2016/07/13 PHP
基于PHP的加载类操作以及其他两种魔术方法的应用实例
2017/08/28 PHP
浅析ajax请求json数据并用js解析(示例分析)
2013/07/13 Javascript
js判断客户端是iOS还是Android等移动终端的方法
2013/12/11 Javascript
js unicode 编码解析关于数据转换为中文的两种方法
2014/04/21 Javascript
JavaScript中获取高度和宽度函数总结
2014/10/08 Javascript
node.js中的console.dir方法使用说明
2014/12/10 Javascript
jQuery表单验证插件解析(推荐)
2016/07/21 Javascript
AngularJs 终极购物车(实例讲解)
2017/11/08 Javascript
webpack本地开发环境无法用IP访问的解决方法
2018/03/20 Javascript
vuejs使用axios异步访问时用get和post的实例讲解
2018/08/09 Javascript
angularjs $http调用接口的方式详解
2018/08/13 Javascript
Javascript模块化机制实现原理详解
2020/04/02 Javascript
微信小程序实现列表滚动头部吸顶的示例代码
2020/07/12 Javascript
[50:04]DOTA2上海特级锦标赛D组小组赛#2 Liquid VS VP第二局
2016/02/28 DOTA
使用python实现省市三级菜单效果
2016/01/20 Python
神经网络(BP)算法Python实现及应用
2018/04/16 Python
pandas 实现字典转换成DataFrame的方法
2018/07/04 Python
Python 爬虫之Beautiful Soup模块使用指南
2018/07/05 Python
对python生成业务报表的实例详解
2019/02/03 Python
如何从csv文件构建Tensorflow的数据集
2020/09/21 Python
Pytorch实现WGAN用于动漫头像生成
2021/03/04 Python
财务会计专业毕业生自荐信
2013/10/02 职场文书
大专计算机个人求职的自我评价
2013/10/21 职场文书
大学生写自荐信的技巧
2014/01/08 职场文书
一份创业计划书范文
2014/02/08 职场文书
公司廉洁自律承诺书
2014/03/27 职场文书
群众路线党课主持词
2014/04/01 职场文书
秋天的怀念教学反思
2014/04/28 职场文书
2015年爱牙日活动总结
2015/02/05 职场文书
旅游投诉信范文
2015/07/02 职场文书
【超详细】八大排序算法的各项比较以及各自特点
2021/03/31 Python
Android基于Fresco实现圆角和圆形图片
2022/04/01 Java/Android