8

PHPを使用して、フォルダーまたはそのサブフォルダー(任意の深さ)内のすべての.phpファイルを見つけるにはどうすればよいですか?

4

4 に答える 4

36

あなたが使用することができRecursiveDirectoryIteratorますRecursiveIteratorIterator

$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;
    }
}
于 2013-02-24T18:34:42.823 に答える
8

次のようなものを追加するだけです。

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__));
于 2013-02-24T18:29:58.750 に答える
3

提供されたコードが一貫した結果を返さなかったため、supajasonによって作成されたコードを少し変更しました。主に使用されている命名法が原因です。

また、いくつかの機能を追加しました。

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


///########-------------------------------------------------------------
///########-------------------------------------------------------------
///######## FUNCTION TO LIST ALL FILES AND FOLDERS WITHIN A CERTAIN PATH
///########-------------------------------------------------------------
///########-------------------------------------------------------------
function list_folderfiles(
                            $dir,                   // *** TARGET DIRECTORY TO SCAN
                            $return_flat = 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 *)
    $files_folders          = scandir($dir);        // *** SCAN FOR ALL FILES AND FOLDERS
    $nested_folders         = [];                   // *** THE NESTED FOLDERS BUILD ARRAY
    static $total_files     = [];                   // *** THE TOTAL FILES ARRAY

    ///######## MAKE SURE THAT THE STATIC $fileS ARE WILL BE CLEARED AFTER THE FIRST ITERATION, RESET AS EMPTY ARRAY
    if($iteration === 0) $total_$files = [];



    ///######## RUN THROUGH ALL $fileS AND FOLDERS
    foreach($files_folders as $file){
        ///######### IF THE CURRENT ``file`` IS A DIRECTORY UP
        if($file === '.' || $file === '..') continue;
        
        ///######### IF IT CONCERNS A $file
        if(is_dir($dir.'/'.$file)){
            $iteration++;                                                                 // *** RAISE THE ITERATION
            $nested_folders[]   = list_folderfiles($dir.'/'.$file, false, $iteration);    // *** EXECUTE THE FUNCTION ITSELF
        }
        ///######### IF IT CONCERNS A $file
        else{
            $total_files[]      = $dir.'/'.$file;   // *** ADD THE $file TO THE TOTAL $fileS ARRAY
            $nested_folders[]   = $file;            // *** ADD THE $file TO THE NESTED FOLDERS ARRAY
        }
    }



    ///########==================================================
    ///######## IF A FLAT LIST SHOULD BE RETURNED
    ///########==================================================
    if($return_flat) return $total_files;
    ///######## IF A NESTED LIST SHOULD BE RETURNED
    else return $nested_folders;
    ///########==================================================
}

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

echo print_r($files, true);
于 2015-09-24T07:56:40.173 に答える
0

これはここでの別の回答に似てSKIP_DOTSいますが、不要なため削除され、次のように機能し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

于 2020-08-28T20:53:44.837 に答える