手机浏览 RSS 2.0 订阅 膘叔的简单人生 , 腾讯云RDS购买 | 超便宜的Vultr , 注册 | 登陆

Easy way to find a file in subdirectory with php

首页 > PHP >

原文地址:http://blog.makemepulse.com/2008/02/18/tips-easy-way-to-find-a-file-in-subdirectory-with-php/

 

PHP代码
  1. <?php   
  2. class DirectorySearch  {       
  3.     
  4. private  
  5.       $iterator,   
  6.       $directoryname;    
  7. public function __construct($directoryname){   
  8.         $this->iterator = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($directoryname,RecursiveDirectoryIterator::KEY_AS_FILENAME));   
  9.     }   
  10.     
  11. public function find($filename){   
  12.         foreach($this->iterator as $entry){   
  13.            if($filename == $this->iterator->current()){   
  14.             return $this->iterator->getPathName();   
  15.           }   
  16.         }   
  17.         return false;   
  18.     }   
  19. }  

 实际应用:

PHP代码
  1. <?php   
  2. $directory = dirname(__FILE__)."/directory";   
  3.     
  4. $search_directory = new DirectorySearch($directory);   
  5. $path_file = $search_directory->find("file_to_find.php");   
  6.     
  7. if($path_file !== false){   
  8.    //include_once($path_file);   
  9.    echo $path_file;   
  10. }  

If we don’t use the KEY_AS_FILENAME with the recursiveDirectoryIterator we will have the whole path of the file in $this->iterator->current();

如果我们不使用recursiveDirectoryIterator类的KEY_AS_FILENAME,我们也可以使用文件的全路径$this->iterator->current();

All of this is a basic example of the RecursiveIteratorIterator with the RecursiveDirectoryIterator. SPL is a very powerfull toolkit !

这只是RecursiveDirectoryIterator的一个基本的功能,不得不说,SPL是一个非常好的工具。

自己的话:

以前遍历目录找文件一般是两种方法:1、opendir,2、glob,然后来遍历整个目录。如今SPL里有现成的,那肯定是这样的速度更快,效率更高喽?只是。。。不知道对中文文件名的支持会怎么[已测试,让我失望]

 

PHP代码
  1. <?php   
  2. function read_dir( $dir) {   
  3.    $array = array();   
  4.    $d = dir($dir);   
  5.    while (false !== ($entry = $d->read())) {   
  6.        if($entry!='.' && $entry!='..') {   
  7.            $entry = $dir.'/'.$entry;   
  8.            if(is_dir($entry)) {   
  9.                $array[] = $entry;   
  10.                $array = array_merge($array, read_dir($entry));   
  11.            } else {   
  12.                $array[] = $entry;   
  13.            }   
  14.        }   
  15.    }   
  16.    $d->close();   
  17.    return $array;   
  18. }   
  19. function get_file ($file$file_path ){   
  20.     foreach ( $file_path as $_k => $_v ){   
  21.         if ( basename($_v) == $file ){   
  22.             return $_v ;   
  23.         }   
  24.     }   
  25.   
  26. }   
  27. ?>  

测试下来。。。让我失望。

 

PHP代码
  1. <?php   
  2. $directory = dirname(__FILE__)."/Discuz!_6.0.0_SC_UTF8";   
  3. $sTime = microtime(true);   
  4.   
  5. $search_directory = new DirectorySearch($directory);   
  6. $path_file = $search_directory->find("buy中文.htm");   
  7.   
  8. if($path_file !== false){   
  9. //include_once($path_file);   
  10.     echo$path_file );   
  11. }   
  12. echo '<pre>';   
  13. print_r( microtime(true) - $sTime );   
  14. echo '</pre>';   
  15.   
  16. $sTime = microtime(true);   
  17. $f = 'buy中文.htm';   
  18. echo( get_file($f,read_dir($directory)) );   
  19. echo '<pre>';   
  20. print_r( microtime(true) - $sTime );   
  21. echo '</pre>';   

使用CLass的时间是0.86550688743591

使用function的时间是:0.54081797599792

鉴定完毕:支持中文文件名




本站采用创作共享版权协议, 要求署名、非商业和保持一致. 本站欢迎任何非商业应用的转载, 但须注明出自"易栈网-膘叔", 保留原始链接, 此外还必须标注原文标题和链接.

Tags: php, spl

« 上一篇 | 下一篇 »

只显示10条记录相关文章

使用PHP得到所有的HTTP请求头 (浏览: 62688, 评论: 3)
我为什么会选用phpstorm (浏览: 52521, 评论: 5)
快速生成目录树 (浏览: 46714, 评论: 7)
通过file_get_contents来Post数据的实例 (浏览: 46287, 评论: 5)
PHP导入导出Excel方法 (浏览: 45090, 评论: 3)
PHP的XSS攻击过滤函数 (浏览: 42619, 评论: 2)
PHP中Eval的作用 (浏览: 41554, 评论: 4)
超详细:在Mac OS X中配置Apache + PHP + MySQL (浏览: 40234, 评论: 1)
PHP常见错误(二) (浏览: 39692, 评论: 1)
PHP sendmail (浏览: 37841, 评论: 7)

发表评论

评论内容 (必填):