递归查找文件夹中的所有.php文件

递归查找文件夹中的所有.php文件,php,Php,使用PHP,如何查找文件夹或其子文件夹(任何深度)中的所有.PHP文件?只需添加如下内容: function listFolderFiles($dir){ $ffs = scandir($dir); $i = 0; $list = array(); foreach ( $ffs as $ff ){ if ( $ff != '.' && $ff != '..' ){ if ( strlen($ff)>=5

使用PHP,如何查找文件夹或其子文件夹(任何深度)中的所有.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__));
函数listFolderFiles($dir){
$ffs=斯堪的纳维亚($dir);
$i=0;
$list=array();
foreach($ffs作为$ff){
如果($ff!='.&&$ff!='.')){
如果(斯特伦($ff)>=5){
如果(substr($ff,-4)=='.php'){
$list[]=$ff;
//echo目录名($ff)。$ff.“
”; 回声$dir.'/'.$ff.
; } } if(is_dir($dir./'.$ff)) listFolderFiles($dir.'/'.$ff); } } 返回$list; } $files=array(); $files=listFolderFiles(dirname(_文件__));
您可以使用和:

很晚了。 但我认为这对那些在搜索后降落在这里的人是有用的

我稍微修改了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);
?>

这与这里的另一个答案类似,但删除了
跳过点
,因为它不是 需要,并与
严格的\u类型一起使用

<?php

$o_dir = new RecursiveDirectoryIterator('.');
$o_iter = new RecursiveIteratorIterator($o_dir);

foreach ($o_iter as $o_info) {
   if ($o_info->getExtension() == 'php') {
      echo $o_info->getPathname(), "\n";
   }
}
“提供的代码没有返回一致的结果”-这是什么意思?实现的行为有什么不同?
<?php

$o_dir = new RecursiveDirectoryIterator('.');
$o_iter = new RecursiveIteratorIterator($o_dir);

foreach ($o_iter as $o_info) {
   if ($o_info->getExtension() == 'php') {
      echo $o_info->getPathname(), "\n";
   }
}