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的面向对象编程
Oct 09 PHP
PHP PDO函数库详解
Apr 27 PHP
《PHP编程最快明白》第七讲:php图片验证码与缩略图
Nov 01 PHP
php处理json时中文问题的解决方法
Apr 12 PHP
Php图像处理类代码分享
Jan 19 PHP
深入解析php之apc
May 15 PHP
PHP使用header()输出图片缓存实例
Dec 09 PHP
php中的观察者模式简单实例
Jan 20 PHP
PHP正则验证Email的方法
Jun 15 PHP
wamp服务器访问php非常缓慢的解决过程
Jul 01 PHP
PHP用PDO如何封装简单易用的DB类详解
Jul 30 PHP
[原创]PHP实现生成vcf vcard文件功能类定义与使用方法详解【附demo源码下载】
Sep 02 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
解析CodeIgniter自定义配置文件
2013/06/18 PHP
PHP array_shift()用法实例分析
2019/01/07 PHP
JavaScript 提升运行速度之循环篇 译文
2009/08/15 Javascript
javascript 定义初始化数组函数
2009/09/07 Javascript
document.getElementById获取控件对象为空的解决方法
2013/11/20 Javascript
js 剪切板应用clipboardData详细解析
2013/12/17 Javascript
JS延迟加载加快页面打开速度示例代码
2013/12/30 Javascript
jQuery+ajax实现动态执行脚本的方法
2015/01/27 Javascript
JavaScript实现算术平方根算法-代码超简单
2015/09/11 Javascript
关于JS中setTimeout()无法调用带参函数问题的解决方法
2016/06/21 Javascript
Javascript this 函数深入详解
2016/12/13 Javascript
jquery mobile移动端幻灯片滑动切换效果
2020/04/15 Javascript
ES6中Class类的静态方法实例小结
2017/10/28 Javascript
layui实现文件或图片上传记录
2018/08/28 Javascript
基于mpvue的简单弹窗组件mptoast使用详解
2019/08/02 Javascript
[00:50]深扒TI7聊天轮盘语音出处6
2017/05/11 DOTA
python为tornado添加recaptcha验证码功能
2014/02/26 Python
Python正规则表达式学习指南
2016/08/02 Python
详解Django+Uwsgi+Nginx的生产环境部署
2018/06/25 Python
pytorch: tensor类型的构建与相互转换实例
2018/07/26 Python
django框架用户权限中的session缓存到redis中的方法
2019/08/06 Python
python定义类的简单用法
2020/07/24 Python
如何用Django处理gzip数据流
2021/01/29 Python
Aeropostale官网:美国著名校园品牌及青少年服饰品牌
2019/03/21 全球购物
翻译专业应届生求职信
2013/11/23 职场文书
给实习单位的感谢信
2014/02/01 职场文书
营销计划书
2015/01/17 职场文书
商务宴请邀请函范文
2015/02/02 职场文书
幼儿园父亲节活动总结
2015/02/12 职场文书
2015国庆节放假通知范文
2015/07/30 职场文书
2016秋季小学开学寄语
2015/12/03 职场文书
学前班教学反思
2016/02/24 职场文书
2016年村党支部公开承诺书
2016/03/24 职场文书
调研报告的主要写法
2019/04/18 职场文书
Python之Matplotlib绘制热力图和面积图
2022/04/13 Python
纯CSS打字动画的实现示例
2022/08/05 HTML / CSS