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 相关文章推荐
一次编写,随处运行
Oct 09 PHP
php学习笔记之 函数声明
Jun 09 PHP
PHP 第一节 php简介
Apr 28 PHP
PHP 简易输出CSV表格文件的方法详解
Jun 20 PHP
关于PHP自动判断字符集并转码的详解
Jun 26 PHP
php中error与exception的区别及应用
Jul 28 PHP
thinkphp配置连接数据库技巧
Dec 02 PHP
php实现面包屑导航例子分享
Dec 19 PHP
php将一维数组转换为每3个连续值组成的二维数组
May 06 PHP
PHP页面输出时js设置input框的选中值
Sep 30 PHP
PHP使用mysqli操作MySQL数据库的简单方法
Feb 04 PHP
php判断str字符串是否是xml格式数据的方法示例
Jul 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 抓取新浪读书频道的小说并生成txt电子书的代码
2009/12/18 PHP
探讨各种PHP字符串函数的总结分析
2013/06/05 PHP
PHP echo,print,printf,sprintf函数之间的区别与用法详解
2013/11/27 PHP
使用PHP生成图片的缩略图的方法
2015/08/18 PHP
CCPry JS类库 代码
2009/10/30 Javascript
EditPlus注册码生成器(js代码实现)
2013/03/25 Javascript
Javascript中匿名函数的多种调用方式总结
2013/12/06 Javascript
解决jquery中美元符号命名冲突问题
2014/01/08 Javascript
jQuery - css() 方法示例详解
2014/01/16 Javascript
javascript实现控制浏览器全屏
2015/03/30 Javascript
JavaScript的jQuery库插件的简要开发指南
2015/08/12 Javascript
javaScript实现可缩放的显示区效果代码
2015/10/26 Javascript
基于javascript实现漂亮的页面过渡动画效果附源码下载
2015/10/26 Javascript
jQuery购物网页经典制作案例
2016/08/19 Javascript
js初始化验证实例详解
2016/11/26 Javascript
详解vue数据渲染出现闪烁问题
2017/06/29 Javascript
基于JavaScript实现微信抢红包功能
2017/07/20 Javascript
基于vue2.0实现简单轮播图
2017/11/27 Javascript
JavaScript 日期时间选择器一些小结
2018/04/02 Javascript
微信小程序实现音乐播放页面布局
2020/12/11 Javascript
[42:20]2014 DOTA2华西杯精英邀请赛5 24 DK VS NewBee
2014/05/25 DOTA
浅谈Python单向链表的实现
2015/12/24 Python
Python 爬虫图片简单实现
2017/06/01 Python
Django在Model保存前记录日志实例
2020/05/14 Python
解决keras使用cov1D函数的输入问题
2020/06/29 Python
Python调用C/C++的方法解析
2020/08/05 Python
python tkinter实现连连看游戏
2020/11/16 Python
Python基于Faker假数据构造库
2020/11/30 Python
Python使用tkinter制作在线翻译软件
2021/02/22 Python
求最大连续递增数字串(如"ads3sl456789DF3456ld345AA"中的"456789")
2015/09/11 面试题
师范大学应届生求职信
2013/11/21 职场文书
企业文化建设实施方案
2014/03/22 职场文书
战友聚会策划方案
2014/06/13 职场文书
影子教师研修方案
2014/06/14 职场文书
2015年学校管理工作总结
2015/07/20 职场文书
请假条应该怎么写?
2019/06/24 职场文书