una subdirectorios only mostrar listar files directorios descargar carpeta archivos php find system readdir

subdirectorios - readdir php



php carpeta recursiva readdir vs encontrar el rendimiento (2)

''buscar'' no es portátil, es un comando unix / linux. readdir () es portátil y funcionará en Windows o en cualquier otro sistema operativo. Además, ''encontrar'' sin ningún parámetro es recursivo, por lo que si se encuentra en un directorio con muchos subdirectorios y archivos, podrá verlos todos, en lugar de solo los contenidos de esa $ ruta.

Me encontré con algunos artículos sobre rendimiento y readdir aquí está el script php:

function getDirectory( $path = ''.'', $level = 0 ) { $ignore = array( ''cgi-bin'', ''.'', ''..'' ); $dh = @opendir( $path ); while( false !== ( $file = readdir( $dh ) ) ){ if( !in_array( $file, $ignore ) ){ $spaces = str_repeat( '' '', ( $level * 4 ) ); if( is_dir( "$path/$file" ) ){ echo "$spaces $file/n"; getDirectory( "$path/$file", ($level+1) ); } else { echo "$spaces $file/n"; } } } closedir( $dh ); } getDirectory( "." );

esto hace eco de los archivos / carpetas correctamente.

ahora encontré esto:

$t = system(''find''); print_r($t);

que también encuentra todas las carpetas y archivos, entonces puedo crear una matriz como el primer código.

creo que el system(''find''); es más rápido que el readdir pero quiero saber si es una buena práctica? muchas gracias


Aquí está mi punto de referencia utilizando un bucle for simple con 10 iteraciones en mi servidor:

$path = ''/home/clad/benchmark/''; // this folder has 10 main directories and each folder as 220 files in each from 1kn to 1mb // glob no_sort = 0.004 seconds but NO recursion $files = glob($path . ''/*'', GLOB_NOSORT); // 1.8 seconds - not recommended exec(''find '' . $path, $t); unset($t); // 0.003 seconds if ($handle = opendir(''.'')) { while (false !== ($file = readdir($handle))) { if ($file != "." && $file != "..") { // action } } closedir($handle); } // 1.1 seconds to execute $path = realpath($path); $objects = new RecursiveIteratorIterator( new RecursiveDirectoryIterator($path), RecursiveIteratorIterator::SELF_FIRST); foreach($objects as $name => $object) { // action } }

Claramente, readdir es más rápido de usar, especialmente si tiene mucho tráfico en su sitio.