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 实例化类的一点摘记
Mar 23 PHP
PHP 函数语法介绍一
Jun 14 PHP
浏览器预览PHP文件时顶部出现空白影响布局分析原因及解决办法
Jan 11 PHP
php检测文件编码的方法示例
Apr 25 PHP
PHP类的反射用法实例
Nov 03 PHP
PHP中预定义的6种接口介绍
May 12 PHP
PHP常用的小程序代码段
Nov 14 PHP
php版阿里大于(阿里大鱼)短信发送实例详解
Nov 30 PHP
yii2使用GridView实现数据全选及批量删除按钮示例
Mar 01 PHP
PHP实现的curl批量请求操作示例
Jun 06 PHP
PHP实现的AES双向加密解密功能示例【128位】
Sep 03 PHP
ThinkPHP中图片按比例切割的代码实例
Mar 08 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 什么是PEAR?(第三篇)
2009/03/19 PHP
php中mkdir函数用法实例分析
2014/11/15 PHP
php生成验证码,缩略图及水印图的类分享
2016/04/07 PHP
php的无刷新操作实现方法分析
2020/02/28 PHP
IE浏览器PNG图片透明效果代码
2008/09/02 Javascript
FileUpload 控件 禁止手动输入或粘贴的实现代码
2010/04/07 Javascript
网页上的Javascript编辑器和代码格式化
2010/04/25 Javascript
浅谈JS原型对象和原型链
2016/03/02 Javascript
浅谈Angular的$q, defer, promise
2016/12/20 Javascript
ionic中列表项增加和删除的实现方法
2017/01/22 Javascript
jQuery插件DataTables分页开发心得体会
2017/08/22 jQuery
详解webpack 打包文件体积过大解决方案(code splitting)
2018/04/10 Javascript
vue.js使用v-if实现显示与隐藏功能示例
2018/07/06 Javascript
VueJS 组件参数名命名与组件属性转化问题
2018/12/03 Javascript
搭建Vue从Vue-cli到router路由护卫的实现
2019/11/14 Javascript
Vue表单控件数据绑定方法详解
2020/02/05 Javascript
vue中使用腾讯云Im的示例
2020/10/23 Javascript
Python 实现随机数详解及实例代码
2017/04/15 Python
python3.6连接MySQL和表的创建与删除实例代码
2017/12/28 Python
Python3爬虫教程之利用Python实现发送天气预报邮件
2018/12/16 Python
python多个模块py文件的数据共享实例
2019/01/11 Python
Python数学形态学实例分析
2019/09/06 Python
Python shutil模块用法实例分析
2019/10/02 Python
python中字符串的编码与解码详析
2020/12/03 Python
利用CSS3实现平移动画效果示例代码
2016/10/12 HTML / CSS
Burt’s Bees英国官网:世界领先的天然个人护理品牌
2020/08/17 全球购物
如何在.net Winform里面显示PDF文档
2012/09/11 面试题
电大毕业生自我鉴定
2013/11/10 职场文书
自我评价怎么写好呢?
2013/12/05 职场文书
主办会计岗位职责
2014/03/13 职场文书
春节请假条
2014/04/11 职场文书
积极向上的团队口号
2014/06/06 职场文书
讲文明倡议书
2015/04/29 职场文书
朋友离别感言
2015/08/04 职场文书
大学社团活动总结怎么写
2019/06/21 职场文书
Python字典的基础操作
2021/11/01 Python