2013-02-24 4 views
8

PHP를 사용하면 폴더 나 해당 하위 폴더 (깊이)의 모든 .php 파일을 어떻게 찾을 수 있습니까? 당신은 RecursiveDirectoryIteratorRecursiveIteratorIterator을 사용할 수 있습니다폴더의 모든 .php 파일을 재귀 적으로 찾으십시오.

function listFolderFiles($dir){ 
    $ffs = scandir($dir); 
    $i = 0; 
    $list = array(); 
    foreach ($ffs as $ff){ 
     if ($ff != '.' && $ff != '..'){ 
      if (strlen($ff)>=5) { 
       if (substr($ff, -4) == '.php') { 
        $list[] = $ff; 
        //echo dirname($ff) . $ff . "<br/>"; 
        echo $dir.'/'.$ff.'<br/>'; 
       }  
      }  
      if(is_dir($dir.'/'.$ff)) 
        listFolderFiles($dir.'/'.$ff); 
     } 
    } 
    return $list; 
} 

$files = array(); 
$files = listFolderFiles(dirname(__FILE__)); 

답변

11

단지 같은 것을 추가

$di = new RecursiveDirectoryIterator(__DIR__,RecursiveDirectoryIterator::SKIP_DOTS); 
$it = new RecursiveIteratorIterator($di); 

foreach($it as $file) { 
    if (pathinfo($file, PATHINFO_EXTENSION) == "php") { 
     echo $file, PHP_EOL; 
    } 
} 
3

을 매우 늦게. 하지만 검색 후 여기에 착륙 한 사람들에게 유용 할 것 같습니다. 을 주로 사용되는 용어로 : 제공된 코드가 일관성있는 결과를 반환하지 않았기 때문에

나는 supajason 하여 비트가 만든 코드를 수정했습니다.

일부 기능을 추가했습니다.

희망이 있습니다. 유용합니다.

<?php 
define('ROOT', str_replace('\\', '/', getcwd()).'/'); 


///########------------------------------------------------------------- 
///########------------------------------------------------------------- 
///######## FUNCTION TO LIST ALL FILES AND FOLDERS WITHIN A CERTAIN PATH 
///########------------------------------------------------------------- 
///########------------------------------------------------------------- 
function listFolderFiles(
          $dir,     /// **** TARGET DIRECTORY TO SCAN 
          $ReturnFlat = true,  /// **** DEFAULT FLAT ARRAY TO BE RETURNED 
          $iteration = 0   /// **** INTERNAL PARAM TO COUNT THE FUNCTIONS OWN ITERATIONS 
         ){ 
    ///########================================================== 
    ///######## PREPARE ALL VARIABLES 
    ///########================================================== 
    $dir    = rtrim($dir, '/');  /// **** REMOVE TRAILING SLASH (* just for being pretty *) 
    $FilesFolders  = scandir($dir);  /// **** SCAN FOR ALL FILES AND FOLDERS 
    $NestedFolders  = array();    /// **** THE NESTED FOLDERS BUILD ARRAY 
    static $TotalFiles = array();    /// **** THE TOTAL FILES ARRAY 

    ///######## MAKE SURE THAT THE STATIC FILES ARE WILL BE CLEARED AFTER THE FIRST ITERATION 
    if($iteration === 0){ 
     ///######### RESET AS EMPTY ARRAY 
     $TotalFiles = array(); 
    } 
    ///########================================================== 



    ///########================================================== 
    ///######## RUN THROUGH ALL FILES AND FOLDERS 
    ///########================================================== 
    foreach($FilesFolders as $File){ 
     if(
      /// **** IF NOT ONE DIR UP 
       ($File != '.') 
      && 
      /// **** IF NOT TWO DIRS UP 
       ($File != '..') 
      ){ 
      ///######### IF IT CONCERNS A FILE 
      if(is_dir($dir.'/'.$File) === true){ 
       $iteration++;                    /// **** RAISE THE ITERATION 
       $NestedFolders[]  = listFolderFiles($dir.'/'.$File, false, $iteration); /// **** EXECUTE THE FUNCTION ITSELF 
      } 
      ///######### IF IT CONCERNS A FILE 
      else{ 
       $TotalFiles[]  = $dir.'/'.$File; /// **** ADD THE FILE TO THE TOTAL FILES ARRAY 
       $NestedFolders[] = $File;   /// **** ADD THE FILE TO THE NESTED FOLDERS ARRAY 
      } 
     } 
    } 
    ///########================================================== 



    ///####### IF A FLAT LIST SHOULD BE RETURNED 
    if($ReturnFlat === true){ 
     ///########================================================== 
     ///######## RETURN ALL FILES AND FOLDERS IN A FLAT ARRAY 
     ///########================================================== 
     return($TotalFiles); 
     ///########================================================== 
    } 
    ///######## IF A NESTED LIST SHOULD BE RETURNED 
    else{ 
     ///########================================================== 
     ///######## RETURN THE FILES AND FOLDERS IN A NESTED ARRAY 
     ///########================================================== 
     return($NestedFolders); 
     ///########================================================== 
    } 
} 

$files = listFolderFiles(ROOT, true); /// **** FLAT ARRAY 
///$files = listFolderFiles(ROOT, false); /// **** NESTED ARRAY 

echo print_r($files, true); 
?> 
+0

* "제공된 코드가 일관된 결과를 반환하지 않았습니다"* -이게 무슨 뜻입니까? 구현의 동작이 다른 점은 무엇입니까? –

관련 문제