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 相关文章推荐
destoon实现调用图文新闻的方法
Aug 21 PHP
php中的观察者模式简单实例
Jan 20 PHP
php通过function_exists检测函数是否存在的方法
Mar 18 PHP
PHP中each与list用法分析
Jan 08 PHP
PHP常用设计模式之委托设计模式
Feb 13 PHP
php 数组随机取值的简单实例
May 23 PHP
php禁用cookie后session设置方法分析
Oct 19 PHP
PHP实现的观察者模式实例
Jun 21 PHP
php7安装mongoDB扩展的方法分析
Aug 02 PHP
thinkphp5框架前后端分离项目实现分页功能的方法分析
Oct 08 PHP
laravel-admin表单提交隐藏一些数据,回调时获取数据的方法
Oct 08 PHP
laravel 出现command not found问题的解决方案
Oct 23 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
使用Apache的htaccess防止图片被盗链的解决方法
2013/04/27 PHP
php的4种常见运行方式
2015/03/20 PHP
深入浅析PHP7.0新特征(五大新特征)
2015/10/29 PHP
PHP Cookei记录用户历史浏览信息的代码
2016/02/03 PHP
Yii2表单事件之Ajax提交实现方法
2017/05/04 PHP
宝塔面板在NGINX环境中TP5.1如何运行?
2021/03/09 PHP
javascript正则表达式中分组详解
2016/07/17 Javascript
如何在AngularJs中调用第三方插件库
2017/05/21 Javascript
JS实现非首屏图片延迟加载的示例
2018/01/06 Javascript
Vue绑定内联样式问题
2018/10/17 Javascript
vue设计一个倒计时秒杀的组件详解
2019/04/06 Javascript
vue实现文字加密功能
2019/09/27 Javascript
vue自定义指令和动态路由实现权限控制
2020/08/28 Javascript
[03:02]生活中的Dendi之野外度假篇
2016/08/09 DOTA
[01:07:46]完美世界DOTA2联赛循环赛 Magma vs IO BO2第二场 11.01
2020/11/02 DOTA
python3写的简单本地文件上传服务器实例
2018/06/04 Python
python地震数据可视化详解
2019/06/18 Python
anaconda中更改python版本的方法步骤
2019/07/14 Python
django settings.py 配置文件及介绍
2019/07/15 Python
Python3 Click模块的使用方法详解
2020/02/12 Python
Python3操作读写CSV文件使用包过程解析
2020/04/10 Python
Selenium元素定位的30种方式(史上最全)
2020/05/11 Python
PyTorch预训练Bert模型的示例
2020/11/17 Python
浅析CSS3 中的 transition,transform,translate之间区别和作用
2020/03/26 HTML / CSS
法国和欧洲海边和滑雪度假:Pierre & Vacances
2017/01/04 全球购物
国际性能运动服装品牌:Dare 2b
2018/07/27 全球购物
澳大利亚优质的家居用品和生活方式公司:Bed Bath N’ Table
2019/04/16 全球购物
中国入世承诺
2014/04/01 职场文书
《祁黄羊》教学反思
2014/04/22 职场文书
工厂搬迁方案
2014/05/11 职场文书
关心下一代工作先进事迹
2014/08/15 职场文书
离婚协议书格式
2015/01/26 职场文书
红白喜事主持词
2015/07/06 职场文书
军训结束新闻稿
2015/07/17 职场文书
2015年成本会计工作总结
2015/10/14 职场文书
详解如何使用Node.js实现热重载页面
2021/05/06 Javascript