php读出目录下的所有目录及子目录下文件

一个利用php读出目录下的所有目录及子目录下文件的代码,很简单方便的第一个就是读取一级目录,后面可以无限目录读取,实例代码如下:

  1. <?php
  2. $dirname=@opendir("abc")or die("打开目录不成功<br>");
  3. readdir($dirname)."<br>";
  4. readdir($dirname)."<br>";
  5. while(($filess=readdir($dirname))!=false)
  6. {
  7. if(is_dir("abc/".$filess))
  8. {
  9. echo "目录:".$filess."<br>";
  10. }
  11. else
  12. {
  13. echo "文件:".$filess."<br>";
  14. }
  15. }
  16. closedir($dirname);
  17. ?>

只能读出html文件名,读不出abc目录下的目录名,下面我们再看一实例,实例代码如下:

  1. <?php
  2. /*
  3. * 递归获取指定路径下的所有文件或匹配指定正则的文件(不包括“.”和“..”),结果以数组形式返回
  4. * @param string $dir
  5. * @param string [$pattern]
  6. * @return array
  7. */
  8. function file_list($dir,$pattern="")
  9. {
  10. $arr=array();
  11. $dir_handle=opendir($dir);
  12. if($dir_handle)
  13. {
  14. // 这里必须严格比较,因为返回的文件名可能是“0”
  15. while(($file=readdir($dir_handle))!==false)
  16. {
  17. if($file==='.' || $file==='..')
  18. {
  19. continue;
  20. }
  21. $tmp=realpath($dir.'/'.$file);
  22. if(is_dir($tmp))
  23. {
  24. $retArr=file_list($tmp,$pattern);
  25. if(!emptyempty($retArr))
  26. {
  27. $arr[]=$retArr;
  28. }
  29. }
  30. else
  31. {
  32. if($pattern==="" || preg_match($pattern,$tmp))
  33. {
  34. $arr[]=$tmp;
  35. }
  36. }
  37. }
  38. closedir($dir_handle);
  39. }
  40. return $arr;
  41. }
  42. // 列出网站根目录下所有以".php"扩展名(不区分大小写)结尾的文件
  43. echo '<pre>';
  44. print_r(file_list($_SERVER['DOCUMENT_ROOT'],"//.php$/i"));
  45. echo '</pre>';
  46. ?>