Obtener los nombres de todos los archivos en un directorio con PHP

Resuelto Dexter asked hace 54 años • 16 respuestas

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?

Dexter avatar Jan 01 '70 08:01 Dexter
Aceptado

No te molestes con open/readdir y usa globen su lugar:

foreach(glob($log_directory.'/*.*') as $file) {
    ...
}
Tatu Ulmanen avatar May 27 '2010 16:05 Tatu Ulmanen

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.

Ilija avatar Sep 23 '2014 06:09 Ilija

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
}
  1. Es necesario filtrar los globresultados de la función is_file, porque también podría devolver algunos directorios.
  2. No todos los archivos tienen una .en sus nombres, por lo que */*el patrón apesta en general.
Aliweb avatar Jan 16 '2016 18:01 Aliweb

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 />';
}
Mike Moore avatar May 27 '2010 16:05 Mike Moore