una scan_dir recorrer only funcion files carpeta archivos php glob directory-browsing

recorrer - scan_dir php



¿Hay una manera de glob() solo archivos? (5)

Sé que glob puede buscar todos los archivos o solo todos los directorios dentro de una carpeta:

echo "All files:/n"; $all = glob("/*"); var_dump($all); echo "Only directories/n"; $dirs = glob("/*", GLOB_ONLYDIR); var_dump($dirs);

Pero no encontré algo para encontrar solo archivos en una sola línea de manera eficiente.

$files = array_diff(glob("/*"), glob("/*", GLOB_ONLYDIR));

Funciona bien pero lee el directorio dos veces (incluso si hay algunas optimizaciones que hacen que la segunda búsqueda sea más rápida).


Finalmente encontré una solución:

echo "Only files/n"; $files = array_filter(glob("/*"), ''is_file''); var_dump($files);

Pero tenga cuidado, array_filter conservará las claves numéricas: use array_values si necesita reindexar la matriz.


Hay una forma más fácil, solo una línea:

$files = glob("/path/to/directory/*.{*}", GLOB_BRACE);

el {*} significa todos los finales de archivo, por lo que todos los archivos, pero ninguna carpeta


Otra solución:

$files = glob(''../{,.}*'', GLOB_BRACE); foreach ($files as $i => $file) { if (is_dir($file)) { unset($files[$i]); } }

O:

$files = glob(''../{,.}*'', GLOB_BRACE | GLOB_MARK); foreach ($files as $i => $file) { if ($file[ strlen($file) - 1 ] == ''/'') { unset($files[$i]); } }

Ambos conservan las teclas numéricas, por lo que quizás desee re-index .

PS Debes usar {,.}*'', GLOB_BRACE si quieres obtener archivos ocultos , también.



$all = glob("/*.*");

Esto listará todo con un "." después del nombre del archivo. Así que básicamente, todos los archivos.