2013-02-24 22 views
8

PHP का उपयोग करके, मैं किसी फ़ोल्डर या उसके सबफ़ोल्डर (किसी भी गहराई में) में सभी .php फ़ाइलों को कैसे ढूंढ सकता हूं? बहुत देर सेफ़ोल्डर में सभी .php फ़ाइलों को रिकर्सली

$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; 
    } 
} 

उत्तर

11

बस की तरह कुछ जोड़ें:

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

आप RecursiveDirectoryIterator और RecursiveIteratorIterator उपयोग कर सकते हैं। लेकिन मुझे लगता है कि यह उन लोगों के लिए उपयोगी होगा जो खोज के बाद यहां उतरे थे।

मैं 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); 
?> 
3

:

+0

* "प्रदान किया गया कोड लगातार परिणाम नहीं लौटाता" * - इसका मतलब क्या है? आपके कार्यान्वयन के व्यवहार के बारे में क्या अलग है? –