php读出目录下的所有目录及子目录下文件
一个利用php读出目录下的所有目录及子目录下文件的代码,很简单方便的第一个就是读取一级目录,后面可以无限目录读取,实例代码如下:
- <?php
- $dirname=@opendir("abc")or die("打开目录不成功<br>");
- readdir($dirname)."<br>";
- readdir($dirname)."<br>";
- while(($filess=readdir($dirname))!=false)
- {
- if(is_dir("abc/".$filess))
- {
- echo "目录:".$filess."<br>";
- }
- else
- {
- echo "文件:".$filess."<br>";
- }
- }
- closedir($dirname);
- ?>
只能读出html文件名,读不出abc目录下的目录名,下面我们再看一实例,实例代码如下:
- <?php
- /*
- * 递归获取指定路径下的所有文件或匹配指定正则的文件(不包括“.”和“..”),结果以数组形式返回
- * @param string $dir
- * @param string [$pattern]
- * @return array
- */
- function file_list($dir,$pattern="")
- {
- $arr=array();
- $dir_handle=opendir($dir);
- if($dir_handle)
- {
- // 这里必须严格比较,因为返回的文件名可能是“0”
- 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;
- }
- // 列出网站根目录下所有以".php"扩展名(不区分大小写)结尾的文件
- echo '<pre>';
- print_r(file_list($_SERVER['DOCUMENT_ROOT'],"//.php$/i"));
- echo '</pre>';
- ?>