2013-02-24 46 views

Trả lời

11

chỉ cần thêm một cái gì đó như:

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__)); 
31

Bạn có thể sử dụng RecursiveDirectoryIteratorRecursiveIteratorIterator:

$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

Rất muộn. Nhưng tôi nghĩ điều này sẽ hữu ích cho những người đến đây sau khi tìm kiếm.

tôi sửa đổi mã một chút tạo ra bởi supajason Bởi vì mã được cung cấp không trả về một kết quả phù hợp: Chủ yếu là do các thuật ngữ được sử dụng.

Tôi cũng đã thêm một số chức năng.

Hy vọng nó hữu ích!

<?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

* "mã được cung cấp không trả lại kết quả nhất quán" * - ý của bạn là gì? Có gì khác biệt về hành vi thực hiện của bạn? –

Các vấn đề liên quan