PHP实现递归目录的5种方法


Posted in PHP onOctober 27, 2016

项目开发中免不了要在服务器上创建文件夹,比如上传图片时的目录,模板解析时的目录等。这不当前手下的项目就用到了这个,于是总结了几个循环创建目录的方法。

方法一:使用glob循环

<?php
//方法一:使用glob循环
 
function myscandir1($path, &$arr) {
 
  foreach (glob($path) as $file) {
    if (is_dir($file)) {
      myscandir1($file . '/*', $arr);
    } else {
 
      $arr[] = realpath($file);
    }
  }
}
?>

方法二:使用dir && read循环

<?php
//方法二:使用dir && read循环
function myscandir2($path, &$arr) {
 
  $dir_handle = dir($path);
  while (($file = $dir_handle->read()) !== false) {
 
    $p = realpath($path . '/' . $file);
    if ($file != "." && $file != "..") {
      $arr[] = $p;
    }
 
    if (is_dir($p) && $file != "." && $file != "..") {
      myscandir2($p, $arr);
    }
  }
}
?>

方法三:使用opendir && readdir循环

<?php
//方法三:使用opendir && readdir循环
function myscandir3($path, &$arr) {
   
  $dir_handle = opendir($path);
  while (($file = readdir($dir_handle)) !== false) {
 
    $p = realpath($path . '/' . $file);
    if ($file != "." && $file != "..") {
      $arr[] = $p;
    }
    if (is_dir($p) && $file != "." && $file != "..") {
      myscandir3($p, $arr);
    }
  }
}
 ?>

 方法四:使用scandir循环
 

<?php
//方法四:使用scandir循环
function myscandir4($path, &$arr) {
   
  $dir_handle = scandir($path);
  foreach ($dir_handle as $file) {
 
    $p = realpath($path . '/' . $file);
    if ($file != "." && $file != "..") {
      $arr[] = $p;
    }
    if (is_dir($p) && $file != "." && $file != "..") {
      myscandir4($p, $arr);
    }
  }
}
 ?>

方法五:使用SPL循环

<?php
//方法五:使用SPL循环
function myscandir5($path, &$arr) {
 
  $iterator = new DirectoryIterator($path);
  foreach ($iterator as $fileinfo) {
 
    $file = $fileinfo->getFilename();
    $p = realpath($path . '/' . $file);
    if (!$fileinfo->isDot()) {
      $arr[] = $p;
    }
    if ($fileinfo->isDir() && !$fileinfo->isDot()) {
      myscandir5($p, $arr);
    }
  }
}
?>

 可以用xdebug测试运行时间

<?php
myscandir1('./Code',$arr1);//0.164010047913 
myscandir2('./Code',$arr2);//0.243014097214 
myscandir3('./Code',$arr3);//0.233012914658 
myscandir4('./Code',$arr4);//0.240014076233
myscandir5('./Code',$arr5);//0.329999923706
 
 
//需要安装xdebug
echo xdebug_time_index(), "\n";
?>

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

PHP 相关文章推荐
php mssql 时间格式问题
Jan 13 PHP
PHP 正则判断中文UTF-8或GBK的思路及具体实现
Nov 26 PHP
更改localhost为其他名字的方法
Feb 10 PHP
PHP魔术引号所带来的安全问题分析
Jul 15 PHP
php生成验证码函数
Oct 20 PHP
php实现给一张图片加上水印效果
Jan 02 PHP
ThinkPHP框架里隐藏index.php
Apr 12 PHP
PHP6连接SQLServer2005的三部曲
Apr 15 PHP
PHP通过引用传递参数用法分析
Dec 01 PHP
Laravel框架FormRequest中重写错误处理的方法
Feb 18 PHP
Laravel框架实现抢红包功能示例
Oct 31 PHP
Laravel框架源码解析之模型Model原理与用法解析
May 14 PHP
PHP读取大文件的几种方法介绍
Oct 27 #PHP
php array_multisort 对数组进行排序详解及实例代码
Oct 27 #PHP
PHP中的密码加密的解决方案总结
Oct 26 #PHP
php 解析xml 的四种方法详细介绍
Oct 26 #PHP
PHP 以POST方式提交XML、获取XML,解析XML详解及实例
Oct 26 #PHP
php 生成签名及验证签名详解
Oct 26 #PHP
PHP XML和数组互相转换详解
Oct 26 #PHP
You might like
我的群发邮件程序
2006/10/09 PHP
Zend framework处理一个http请求的流程分析
2010/02/08 PHP
thinkPHP3.1验证码的简单实现方法
2016/04/22 PHP
Laravel 5.1 on SAE环境开发教程【附项目demo源码】
2016/10/09 PHP
Laravel中日期时间处理包Carbon的简单使用
2017/09/21 PHP
实例讲解php实现多线程
2019/01/27 PHP
js 无提示关闭浏览器页面的代码
2010/03/09 Javascript
jQuery find和children方法使用
2011/01/31 Javascript
JQuery中的$.getJSON 使用说明
2011/03/10 Javascript
jQuery事件之键盘事件(ctrl+Enter回车键提交表单等)
2014/05/11 Javascript
jQuery中:input选择器用法实例
2015/01/03 Javascript
javascript同步服务器时间和同步倒计时小技巧
2015/09/24 Javascript
node中间层实现文件上传功能
2018/06/11 Javascript
Webpack 4.x搭建react开发环境的方法步骤
2018/08/15 Javascript
详解JS中统计函数执行次数与执行时间
2018/09/04 Javascript
关于JavaScript 数组你应该知道的事情(推荐)
2019/04/10 Javascript
vue draggable resizable 实现可拖拽缩放的组件功能
2019/07/15 Javascript
node实现简单的增删改查接口实例代码
2019/08/22 Javascript
vue vant Area组件使用详解
2019/12/09 Javascript
Python for Informatics 第11章 正则表达式(一)
2016/04/21 Python
python flask web服务实现更换默认端口和IP的方法
2019/07/26 Python
python set集合使用方法解析
2019/11/05 Python
Pytorch保存模型用于测试和用于继续训练的区别详解
2020/01/10 Python
python为Django项目上的每个应用程序创建不同的自定义404页面(最佳答案)
2020/03/09 Python
Python读取二进制文件代码方法解析
2020/06/22 Python
Html5 localStorage入门教程
2018/04/26 HTML / CSS
css3 transform 3d 使用css3创建动态3d立方体(html5实践)
2013/01/06 HTML / CSS
美国在线宠物用品商店:Entirely Pets
2017/01/01 全球购物
计算机网络专业个人的自我评价
2013/10/17 职场文书
经理秘书找工作求职信
2013/12/19 职场文书
成龙霸王洗发水广告词
2014/03/14 职场文书
公司联欢晚会主持词
2014/03/22 职场文书
2014年人事专员工作总结
2014/11/19 职场文书
Python 把两层列表展开平铺成一层(5种实现方式)
2021/04/07 Python
MySQL磁盘碎片整理实例演示
2022/04/03 MySQL
MySQL中优化SQL语句的方法(show status、explain分析服务器状态信息)
2022/04/09 MySQL