php专区

 首页 > php专区 > PHP高级 > 文件上传 > php遍历目录与文件夹的几种方法 - php文件操作

php遍历目录与文件夹的几种方法 - php文件操作

分享到:
【字体:
导读:
          遍历目录或遍历目录下指定类型的文件,这是每一个童鞋在写程序的时候难免会用到的,PHP本身也提供了很多非常有用的函数,正确地使用它们,不会有错,下面就我个人学习过程中的一些总结...

php遍历目录与文件夹的几种方法

遍历目录或遍历目录下指定类型的文件,这是每一个童鞋在写程序的时候难免会用到的,PHP本身也提供了很多非常有用的函数,正确地使用它们,不会有错,下面就我个人学习过程中的一些总结.

本函数可以列出指定目录下所有的文件,包括子目录下的,代码如下:

  1. function getfiles($path){  
  2. foreach(scandir($pathas $afile
  3.  
  4. if($afile=='.'||$afile=='..'continue;  
  5. if(is_dir($path.'/'.$afile))  
  6. {  
  7. getfiles($path.'/'.$afile);  
  8. else {  
  9. echo $path.'/'.$afile.'';  
  10. }  
  11. }  
  12. //简单的demo,列出当前目录下所有的文件 
  13.  
  14. getfiles(__DIR__); 

scandir() 是返回指定目录下所有的文件和目录组成的数组,在PHP中,还提供了一个非常强大的函数glob(),glob()有2个参数,至于第2个参数是可选的,稍后再讲,直接来看,用glob()怎么遍历目录的.

可以看出,glob()返回的内容中已经过滤掉了'.'和'..',其中*表示遍历目录下所有文件,相应的,如果改为*.txt,则会遍历目录下所的txt文件,是不是很方便呢?它的方便之处可不止这一点,代码如下:

  1. function getfiles($path){  
  2. foreach(glob($pathas $afile){  
  3. if(is_dir($afile))  
  4. { getfiles($afile.'/*'); } else { echo $afile.''; }  
  5. }  
  6. //简单的demo,列出当前目录下所有的文件 
  7. getfiles(__DIR__);0 

既然说用 *.txt,就会遍历目录下所的txt文件,那如果我想让它同时遍历某几种格式的文件呢?怎么办?肯定有童鞋想到用数组了,然后很快的写出来替换进去{*.txt,*.jpg,*.zip,...},当然也很快地发现,程序返回false,什么都得不到,不要失望,这涉及到了刚才所说的第2个可选参数,这个参数是用来改变glob的行为的,具体都有些什么,可以查阅PHP手册,这里不多讲,只说一个GLOB_BRACE,这是用来扩充 {a,b,c,...} 来匹配 'a','b' 或 'c',...的,用法如下:

foreach(glob($path.'/{*.txt,*.jpg,*.zip,...}', GLOB_BRACE) as $fileName){...}

至于完整的遍历目录下所有的指定文件类型函数,我们可以看下面实例.

遍历文件夹及子文件夹所有文件,代码如下:

  1.  
  2.      
  3.         
  4.             function traverse($path = '.') { 
  5.                 $current_dir = opendir($path);    //opendir()返回一个目录句柄,失败返回false 
  6.                 while(($file = readdir($current_dir)) !== false) {    //readdir()返回打开目录句柄中的一个条目 
  7.                     $sub_dir = $path . DIRECTORY_SEPARATOR . $file;    //构建子目录路径 
  8.                     if($file == '.' || $file == '..') { 
  9.                         continue
  10.                     } else if(is_dir($sub_dir)) {    //如果是目录,进行递归 
  11.                         echo 'Directory ' . $file . ':
    '
  12.                         traverse($sub_dir); 
  13.                     } else {    //如果是文件,直接输出 
  14.                         echo 'File in Directory ' . $path . ': ' . $file . '
    '
  15.                     } 
  16.                 } 
  17.             } 
  18.              
  19.             traverse('xxtt'); 
  20.         ?> 
  21.      
  22.  

一些常用的实例,代码如下:

  1. $dir="E:/video"//这里输入其它路径 
  2. //PHP遍历文件夹下所有文件 
  3. $handle=opendir($dir.".");  
  4. echo "文件:
    "
  5. while (false !== ($file = readdir($handle))) 
  6. if ($file != "." && $file != "..") { 
  7. echo $file//输出文件名 
  8. closedir($handle);  
  9. ?> 

用了这段代码遍历所有文件,我把所有文件名存为一个数组,代码如下:

  1. $s=explode("/n",trim(`dir/b e://video`)); 
  2. print_r($s); 
  3. ?> 
  4.  
  5. $dir="E:/video"//这里输入其它路径  
  6. //PHP遍历文件夹下所有文件  
  7. $handle=opendir($dir.".");  
  8. echo "文件:
    "
    ;  
  9. while (false !== ($file = readdir($handle)))  
  10. {  
  11. if ($file != "." && $file != "..") {  
  12. $file=$file.','//输出文件名  
  13. $file=explode(',',$file); 
  14. }  
  15. }  
  16. print_r($file);//输出的就是数组了 
  17. closedir($handle);  
  18. ?> 
  19.  
  20. $dir="."//这里输入其它路径  
  21. //PHP遍历文件夹下所有文件  
  22. $handle=opendir($dir.".");  
  23. echo "文件:
    "
    ;  
  24. //定义用于存储文件名的数组 
  25. $array_file = array(); 
  26. while (false !== ($file = readdir($handle)))  
  27. {  
  28. if ($file != "." && $file != "..") {  
  29. $array_file[] = $file//输出文件名  
  30. }  
  31. }  
  32. closedir($handle); 
  33.  
  34. print_r("
    "); 
  35. print_r($array_file); 
  36. print_r(""); 
  37. ?> 
分享到:
PHP递归删除文件与目录函数 - php文件操...
PHP递归删除文件与目录函数 在php中删除文件与目录rmdir()函数就可以搞定,但是要删除一个非空目录,将不能进行快速的删除,必须先将目录中文件删除,但是目录里可能还会有子目录所以要进行PHP递归删除目录. 递归函数为自调用函数,在函数体内直接或间接自己调用自己,但需要设置自调用的条件,若...
PHP file_put_contents 将字符串写入或追...
PHP file_put_contents 将字符串写入或追加到文件 在php中文件file_put_contents函数是可以把我们字符串写入到文件中,这个与php fwrite文件有一点相同了,下面我来看看看file_put_contents用法与fwrite区别. PHP file_put_contents() 函数是一次性向文件写入字符串或追加字符串内容的最合适...
  •         php迷,一个php技术的分享社区,专属您自己的技术摘抄本、收藏夹。
  • 在这里……