Obtener los nombres de todos los archivos en un directorio con PHP
Por alguna razón, sigo obteniendo un '1' para los nombres de archivos con este código:
if (is_dir($log_directory))
{
if ($handle = opendir($log_directory))
{
while($file = readdir($handle) !== FALSE)
{
$results_array[] = $file;
}
closedir($handle);
}
}
Cuando hago eco de cada elemento en $results_array, obtengo un montón de '1', no el nombre del archivo. ¿Cómo obtengo el nombre de los archivos?
Aceptado
No te molestes con open/readdir y usa glob
en su lugar:
foreach(glob($log_directory.'/*.*') as $file) {
...
}
Estilo SPL :
foreach (new DirectoryIterator(__DIR__) as $file) {
if ($file->isFile()) {
print $file->getFilename() . "\n";
}
}
Consulte las clases DirectoryIterator y SplFileInfo para obtener la lista de métodos disponibles que puede utilizar.
Como la respuesta aceptada tiene dos deficiencias importantes, publico la respuesta mejorada para aquellos recién llegados que buscan una respuesta correcta:
foreach (array_filter(glob('/Path/To/*'), 'is_file') as $file)
{
// Do something with $file
}
- Es necesario filtrar los
glob
resultados de la funciónis_file
, porque también podría devolver algunos directorios. - No todos los archivos tienen una
.
en sus nombres, por lo que*/*
el patrón apesta en general.
Necesitas rodear $file = readdir($handle)
entre paréntesis.
Aquí tienes:
$log_directory = 'your_dir_name_here';
$results_array = array();
if (is_dir($log_directory))
{
if ($handle = opendir($log_directory))
{
//Notice the parentheses I added:
while(($file = readdir($handle)) !== FALSE)
{
$results_array[] = $file;
}
closedir($handle);
}
}
//Output findings
foreach($results_array as $value)
{
echo $value . '<br />';
}