PHP遍历文件夹

xiaoxiao2021-02-28  104

首先,PHP需要先支持使用 iconv函数(在php.ini文件中有配置 iconv 的地方)

以下几种遍历,返回值得形式有所不同:

<?php //队列方式遍历文件夹(结果为一维数组,值既有文件,又有子文件夹) function read_dir_queue($dir){      $dir=iconv("utf-8","gb2312",$dir);      $files=array();       $queue=array($dir);       while($data=each($queue)){           $path=$data['value'];           if(is_dir($path) && $handle=opendir($path)){               while($file=readdir($handle)){                   if($file=='.'||$file=='..') continue;                   $files[] = $real_path=$path.'/'.$file;                   if (is_dir($real_path)) $queue[] = $real_path;               }           }           closedir($handle);       }   $arr=array(); foreach($files as $v){ $a=iconv("gb2312","utf-8",$v); $arr[]=$a; }      return $arr;   }   //只保留file的队列数组,不包括子文件夹 function read_dir_files($dir){ $dir=iconv("utf-8","gb2312",$dir);       $files=array();       $queue=array($dir);  $files2=array();      while($data=each($queue)){           $path=$data['value'];           if(is_dir($path) && $handle=opendir($path)){               while($file=readdir($handle)){                   if($file=='.'||$file=='..') continue;                   $files[] = $real_path=$path.'/'.$file;                   if (is_dir($real_path)) $queue[] = $real_path;               }           }           closedir($handle);       }  foreach($files as $v){ if(is_dir($v)){   continue; }else{ $files2[]=$v; } }      $arr=array(); foreach($files2 as $v){ $a=iconv("gb2312","utf-8",$v); $arr[]=$a; }      return $arr;   }   //返回结果为数组,值为文件名(不包括文件的目录、子文件夹) function read_dir_files1($dir){      $dir=iconv("utf-8","gb2312",$dir);       $files=array();       $queue=array($dir);  $files2=array();      while($data=each($queue)){           $path=$data['value'];           if(is_dir($path) && $handle=opendir($path)){               while($file=readdir($handle)){                   if($file=='.'||$file=='..') continue;                   $files[] = $real_path=$path.'/'.$file;                   if (is_dir($real_path)) $queue[] = $real_path;               }           }           closedir($handle);       }  foreach($files as $v){ if(!is_dir($v)){ $a=explode("/",$v); $s=end($a); $files2[]=$s; } }      $arr=array(); foreach($files2 as $v){ $b=iconv("gb2312","utf-8",$v); $arr[]=$b; }      return $arr;    }  

由于windows7文件命名编码为 gb2312,PHP网页编码为UTF-8,所以需要转换:

$dir=iconv("utf-8","gb2312",$dir); 

返回的结果由于是数组,要对数组中的元素逐个转换。

  $arr=array();  foreach($files2 as $v){  $b=iconv("gb2312","utf-8",$v);  $arr[]=$b;  }

转载请注明原文地址: https://www.6miu.com/read-60229.html

最新回复(0)