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.
Puede usar GLOB_BRACE
para hacer coincidir documentos con una lista de extensiones de archivo conocidas:
$files = glob("/path/to/directory/*.{jpg,gif,png,html,htm,php,ini}", GLOB_BRACE);
consulte: http://www.electrictoolbox.com/php-glob-find-files/
$all = glob("/*.*");
Esto listará todo con un "." después del nombre del archivo. Así que básicamente, todos los archivos.