Get Files recursively in PHP

RecursiveDirectoryIterator to get all files

This implementation also sorts by extension if you switch the $files[] = ... line to the commented one

$rii = new RecursiveIteratorIterator(new RecursiveDirectoryIterator('path/to/folder'));
$files = []; 
foreach ($rii as $file) {
    if ($file->isDir()){ 
        continue;
    }
    //$files[$file->getExtension()][] = $file->getPathname();
    $files[] = $file->getPathname(); 
}

One-liner function as a variable, with readdir

I need to re-test & confirm this function works properly. Here's a one-liner that declares nothing in the global scope, thus will not conflict with any functions or classes you have. The readdir approach could be a problem with significantly nested directories where too many file pointers get opened. scandir would resolve this.

$files = 
(new class{
    function getFiles($path,$ext='*'){
        $dh = opendir($path);
        $files = [];
        while ($file = readdir($dh)){
            if ($file=='.'||$file=='..')continue;
            $fPath = str_replace('//','/',$path.'/'.$file);
            if (is_dir($fPath)){
                $subFiles = $this->getFiles($fPath,$ext);
                $files = array_merge($files,$subFiles);
            } else if ($ext=='*'
                ||($fExt=pathinfo($fPath,PATHINFO_EXTENSION))==$ext){
                    var_dump($fExt);
                $files[] = $fPath;
            }
        }
        return $files;
    }
})->getFiles($dir,$ext);

And as a single line, provided you declare $dir and $ext

$files = (new class{ function getFiles($path,$ext='*'){ $dh = opendir($path); $files = []; while ($file = readdir($dh)){ if ($file=='.'||$file=='..')continue; $fPath = str_replace('//','/',$path.'/'.$file); if (is_dir($fPath)){ $subFiles = $this->getFiles($fPath,$ext); $files = array_merge($files,$subFiles); } else if ($ext=='*' ||($fExt=pathinfo($fPath,PATHINFO_EXTENSION))==$ext){ var_dump($fExt); $files[] = $fPath; } } return $files; } })->getFiles($dir,$ext);