PHP 批量获取指定目录下的文件列表(递归,穿透所有子目录)

时间:2023-01-20 09:12:19
//调用
$dir = '/Users/xxx/www';
$exceptFolders = array('view','test');
$exceptFiles = array('BaseController.php','LogController.php');
$files = getFilesFromFolder($dir,$exceptFolders,$exceptFiles);
print_r($files);

/**
 * 批量获取指定目录下的文件列表
 * @param string $folder 指定的目录
 * @param array() $exceptFolders 排除的目录
 * @param array() $exceptFiles 排除的文件
 */
function getFilesFromFolder($dir,$exceptFolders,$exceptFiles){
    foreach ($exceptFolders as $k1=>$v1){
        $except_fo[] = $dir.'/'.$v1;
    }
    foreach ($exceptFiles as $k2=>$v2){
        $except_fi[] = $dir.'/'.$v2;
    }
    
    global $file_list;
     if(is_dir($dir)&&file_exists($dir)){
         $ob=scandir($dir);
         foreach($ob as $file){
              if($file=="."||$file==".."){
                   continue;
              }
              $file=$dir."/".$file;
              if(is_file($file)){
                      if(pathinfo($file)['extension'] == 'php' && !in_array($file, $except_fi)){
                          $file_list[] = $file;
                      }
              }elseif(is_dir($file)){
                      if(!in_array($file, $except_fo)){
                          getFilesFromFolder($file,$exceptFolders,$exceptFiles);
                      }
              }
         }
     } 

     return $file_list;
}