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 相关文章推荐
第五节 克隆 [5]
Oct 09 PHP
收藏的一个php小偷的核心程序
Apr 09 PHP
PHP 采集程序原理分析篇
Mar 05 PHP
第五章 php数组操作
Dec 30 PHP
yii实现创建验证码实例解析
Jul 31 PHP
php格式化金额函数分享
Feb 02 PHP
php使用curl出现Expect:100-continue解决方法
Mar 03 PHP
Zend Framework教程之请求对象的封装Zend_Controller_Request实例详解
Mar 07 PHP
thinkphp框架实现删除和批量删除
Jun 29 PHP
thinkPHP交易详情查询功能详解
Dec 02 PHP
php递归函数怎么用才有效
Feb 24 PHP
PHP读取目录树的实现方法分析
Mar 22 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
基于qmail的完整WEBMAIL解决方案安装详解
2006/10/09 PHP
详解WordPress中分类函数wp_list_categories的使用
2016/01/04 PHP
使用PHPStorm+XDebug搭建单步调试环境
2017/11/19 PHP
JavaScript 指导方针
2007/04/05 Javascript
JS 图片缩放效果代码
2010/06/09 Javascript
使用jQuery重置(reset)表单的方法
2014/05/05 Javascript
JavaScript中的数组特性介绍
2014/12/30 Javascript
JavaScript中创建字典对象(dictionary)实例
2015/03/31 Javascript
javascript实现仿IE顶部的可关闭警告条
2015/05/05 Javascript
基于js实现投票的实例代码
2015/08/04 Javascript
jQuery实现的超简单点赞效果实例分析
2015/12/31 Javascript
AngularJS API之copy深拷贝详解及实例
2016/09/14 Javascript
JS实现JSON.stringify的实例代码讲解
2017/02/07 Javascript
jquery Easyui Datagrid实现批量操作(编辑,删除,添加)
2017/02/20 Javascript
vue.js todolist实现代码
2017/10/29 Javascript
vue2.0安装style/css loader的方法
2018/03/14 Javascript
动态加载、移除js/css文件的示例代码
2018/03/20 Javascript
axios向后台传递数组作为参数的方法
2018/08/11 Javascript
vue中使用element ui的弹窗与echarts之间的问题详解
2019/10/25 Javascript
Websocket 向指定用户发消息的方法
2020/01/09 Javascript
用Python编写脚本使IE实现代理上网的教程
2015/04/23 Python
python简单获取数组元素个数的方法
2015/07/13 Python
python difflib模块示例讲解
2017/09/13 Python
Python+pandas计算数据相关系数的实例
2018/07/03 Python
python中的decorator的作用详解
2018/07/26 Python
python3+selenium自动化测试框架详解
2019/03/17 Python
python脚本定时发送邮件
2020/12/22 Python
阿巴庭院:Abba Patio
2019/06/18 全球购物
总经理助理工作职责
2014/02/06 职场文书
消防安全宣传标语
2014/06/07 职场文书
旅游专业毕业生自荐书
2014/06/30 职场文书
2014公司党员自我评价范文
2014/09/11 职场文书
校园主题婚礼活动策划方案
2014/09/15 职场文书
2014公司年终工作总结
2014/12/19 职场文书
建筑安全员岗位职责
2015/02/15 职场文书
python热力图实现的完整实例
2022/06/25 Python