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 类商品秒杀计时实现代码
May 05 PHP
php 中英文语言转换类代码
Aug 11 PHP
php源代码安装常见错误与解决办法分享
May 28 PHP
使用PHP计算两个路径的相对路径
Jun 14 PHP
php通过字符串调用函数示例
Mar 02 PHP
php数据库备份还原类分享
Mar 20 PHP
PHP防盗链代码实例
Aug 27 PHP
PHP中$_SERVER使用说明
Jul 05 PHP
PHP基于文件存储实现缓存的方法
Jul 20 PHP
php生成唯一数字id的方法汇总
Nov 18 PHP
PHP的cookie与session原理及用法详解
Sep 27 PHP
PHP常用函数之格式化时间操作示例
Oct 21 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利用cookie实现自动登录的方法
2014/12/10 PHP
PHP会话处理的10个函数
2015/08/11 PHP
PHP 文件锁与进程锁的使用示例
2017/08/07 PHP
php redis setnx分布式锁简单原理解析
2020/10/23 PHP
javascript 快速排序函数代码
2012/05/30 Javascript
Jquery操作js数组及对象示例代码
2014/05/11 Javascript
一个Action如何调用两个不同的方法
2014/05/22 Javascript
JavaScript中的值类型详细介绍
2014/12/29 Javascript
JavaScript常用脚本汇总(三)
2015/03/04 Javascript
js判断浏览器类型及设备(移动页面开发)
2015/07/30 Javascript
Javascript数组Array方法解读
2016/03/13 Javascript
在微信、支付宝、百度钱包实现点击返回按钮关闭当前页面和窗口的方法
2016/08/05 Javascript
解决node.js安装包失败的几种方法
2016/09/02 Javascript
详解Python中logging日志模块在多进程环境下的使用
2016/12/26 Javascript
gulp解决跨域的配置文件问题
2017/06/08 Javascript
layui.js实现的表单验证功能示例
2017/11/15 Javascript
JavaScript实现新年倒计时效果
2018/11/17 Javascript
Python守护进程(daemon)代码实例
2015/03/06 Python
python对象及面向对象技术详解
2016/07/19 Python
TensorFlow变量管理详解
2018/03/10 Python
python和flask中返回JSON数据的方法
2018/03/26 Python
python实现NB-IoT模块远程控制
2018/06/20 Python
Python 查找list中的某个元素的所有的下标方法
2018/06/27 Python
python最小生成树kruskal与prim算法详解
2019/01/17 Python
celery在python爬虫中定时操作实例讲解
2020/11/27 Python
Python操作PostgreSql数据库的方法(基本的增删改查)
2020/12/29 Python
如何使用html5与css3完成google涂鸦动画
2012/12/16 HTML / CSS
纽约著名的服装辅料来源:M&J Trimming
2017/07/26 全球购物
创业计划书怎样才能打动风投
2014/01/01 职场文书
过程装备与控制工程专业求职信
2014/07/02 职场文书
卖车协议书范本4篇
2014/10/01 职场文书
2014年医务科工作总结
2014/12/18 职场文书
武当山导游词
2015/02/03 职场文书
民事起诉书范本
2015/05/19 职场文书
2015个人年度工作总结范文
2015/05/28 职场文书
Python爬虫进阶之Beautiful Soup库详解
2021/04/29 Python