Listar todos los ficheros de un directorio en php

Como obtener de manera sencilla el listado del contenido de un directorio en php con la ayuda de la funcion glob()

Es probable que algún día necesitemos en algunos de nuestro proyectos obtener el listado del contenido de un directorio. Para esto tenemos una función muy útil en php, que es la función glob()

Función glob()

La función glob() de php nos permite obtener el contenido de un directorio. Nos admite dos parámetros:

  • El primer parámetro es un patrón donde indicaremos si queremos obtener todos los ficheros, de una determinada extensión o de un conjunto de ellas. Esta permitido el uso de comodines.
  • El segundo parámetro es un indicador por si queremos modificar el comportamiento de la función

Como segundo parámetro a la llamada a la función glob(), podemos utilizar los siguientes:

  • GLOB_MARK – Añade un barra a cada directorio devuelto
  • GLOB_NOSORT – Devuelve los ficheros tal como aparecen en el directorio (sin ordenar). Cuando no se emplea este indicador, los parámetros se ordenan alfabéticamente
  • GLOB_NOCHECK – Devuelve el patrón de búsqueda si no se encontraron ficheros coincidentes
  • GLOB_NOESCAPE – Las barras invertidas no escapan meta-caracteres
  • GLOB_BRACE – Expande {a,b,c} para coincidir con ‘a’, ‘b’, o ‘c’
  • GLOB_ONLYDIR – Devuelve sólo entradas de directorio que coinciden con el patrón
  • GLOB_ERR – Se detiene si se produjeron errores de lectura (como directorios ilegibles), por defecto los errores son ignorados.

Listado todo el contenido de directorio

Existe una manera sencilla de hacerlo, y es mediante la función glob() de php. Por ejemplo, para listar el contenido del directorio «imagenes»:

$listado = glob('imagenes/*');
foreach($listado as $elemento) {
   echo $elemento.'<br/>';
}

Nos mostrara el nombre de todos los ficheros y directorios.

Si solo quisiéramos obtener los ficheros, omitiendo los subdirectorios, podríamos modificar el código de la siguiente forma:

$listado = glob('imagenes/*');
foreach($listado as $elemento) {
   if (file_exists($elemento)) {
      echo $elemento.'<br/>';
   }
}

Listar los ficheros de una determinada extensión

Si queremos obtener los ficheros de un solo tipo de extensión, podemos hacerlo indicándolo en la llamada a glob()

$listado= glob('imagenes/*.txt');
foreach($listado as $elemento) {
   echo $elemento.'<br/>';
}

Filtrar por varias extensiones

También podemos especificar varias extensiones de ficheros simultaneas, indicando como segundo parámetro GLOB_BRACE:

$imagenes = glob("imagenes/{*.jpg,*.gif,*.png}", GLOB_BRACE);
print_r($imagenes);

Con estos tres ejemplos, podremos resolver los problemas mas comunes a la hora de obtener el listado de un directorio en php.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)