簡體   English   中英

遞歸查找文件夾中的所有 .php 文件

[英]Find all .php files in folder recursively

使用 PHP,如何在文件夾或其子文件夾(任何深度)中找到所有 .php 文件?

您可以使用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;
    }
}

只需添加如下內容:

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

很晚了。 但我認為這對那些在搜索后登陸這里的人有用。

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

這類似於此處的另一個答案,但刪除了SKIP_DOTS ,並與strict_types一起strict_types

<?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";
   }
}

https://php.net/splfileinfo.getextension

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM