这里有新鲜出炉的 PHP 设计模式,程序狗速度看过来!
PHP(外文名: Hypertext Preprocessor,中文名:"超文本预处理器")是一种通用开源脚本语言。语法吸收了 C 语言、Java 和 Perl 的特点,入门门槛较低,易于学习,使用广泛,主要适用于 web 开发领域。PHP 的文件后缀名为 php。
本篇文章主要介绍了 PHP 实现递归目录的 5 种方法,主要是利用一些循环来实现的,感兴趣的小伙伴们可以参考一下。
项目开发中免不了要在服务器上创建文件夹,比如上传图片时的目录,模板解析时的目录等。这不当前手下的项目就用到了这个,于是总结了几个循环创建目录的方法。
方法一:使用 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";
- ?>
来源: http://www.phperz.com/article/17/0803/341662.html