Spanish (Español) translation by Ana Paulina Figueroa (you can also view the original English article)
En este artículo analizaremos cómo puedes obtener una lista de todos los archivos de un directorio en PHP.
En tu desarrollo cotidiano con PHP, a menudo necesitas trabajar con un sistema de archivos, por ejemplo, para obtener una lista de archivos contenidos en un directorio específico. PHP proporciona algunos métodos diferentes que puedes usar para leer fácilmente el contenido de los directorios. Hoy analizaremos todos estos métodos junto con ejemplos, para entender cómo funciona cada uno.
Las funciones opendir
, readdir
y closedir
En esta sección, discutiremos una familia de funciones opendir
, readdir
y closedir
para ver cómo puedes usarla con el fin de obtener una lista de archivos de un directorio específico.
La función opendir
te permite abrir un manejador de directorio, el cual puedes usar junto con otras funciones para realizar diferentes operaciones en él. Necesitas enviar la ruta al directorio en el primer argumento de la función opendir
. Si la ruta del directorio es válida, un recurso de manejador de directorio será devuelto.
La función readdir
te permite leer un directorio. Necesitas proporcionar un directorio válido en el primer argumento de la función readdir
, y puedes recorrer todas las entradas y obtener una lista de todos los archivos contenidos en un directorio.
La función closedir
te permite cerrar el manejador de directorio abierto por la función opendir
. Es una buena práctica usar la función closedir
una vez que hayas terminado con tus operaciones en el manejador de directorio (que la función opendir
abrió inicialmente).
Ahora veámoslo en acción, como se muestra en el siguiente ejemplo.
1 |
<?php
|
2 |
$arrFiles = array(); |
3 |
$handle = opendir('/path/to/directory'); |
4 |
|
5 |
if ($handle) { |
6 |
while (($entry = readdir($handle)) !== FALSE) { |
7 |
$arrFiles[] = $entry; |
8 |
}
|
9 |
}
|
10 |
|
11 |
closedir($handle); |
12 |
?>
|
En primer lugar, hemos usado la función opendir
para obtener el manejador de directorio. A continuación, hemos usado la función readdir
para recorrer el manejador de directorio $handle
y almacenar una lista de archivos en la matriz $arrFiles
.
La función scandir
En esta sección veremos cómo puedes usar la función scandir
para obtener el contenido de un directorio.
La función scandir
es una manera bastante sencilla de obtener una lista de archivos y directorios contenidos en un directorio específico. Solamente necesitas enviar la ruta de un directorio que quieras leer como primer argumento de la función scandir
.
Analicemos el siguiente ejemplo para entender cómo funciona.
1 |
<?php
|
2 |
$arrFiles = scandir('/path/to/directory'); |
3 |
?>
|
Como puedes ver, esto proporciona una lista de archivos y directorios ¡en una sola llamada! Si solamente necesitas obtener la lista de archivos de un directorio, esta es una mejor opción que el uso de opendir
, readdir
y closedir
.
La función glob
La función glob
trabaja de manera similar a la función scandir
, con la diferencia de que te permite especificar un patrón para filtrar y hacer coincidir los archivos del directorio.
Veamos cómo usar la función glob
para leer todo el contenido de un directorio específico.
1 |
<?php
|
2 |
$arrFiles = glob('/path/to/dir/*'); |
3 |
?>
|
Como puedes ver, hemos enviado el patrón *
, ya que queremos leer todo el contenido. Por otro lado, si quieres enumerar solamente tipos específicos de archivos, puedes hacer eso también, como se muestra en el siguiente fragmento de código.
1 |
<?php
|
2 |
$arrFiles = glob('/path/to/dir/*.txt'); |
3 |
?>
|
En este caso, $arrFiles
solamente contendría los nombres de los archivos .txt
.
La función dir
Las opciones que hemos discutido hasta ahora te permite leer el contenido de los directorios de una manera procedimental. En esta sección veremos cómo puedes usar la función dir
, que es un mecanismo orientado a objetos para la lectura de un directorio.
Cuando usas la función dir
y envías la ruta de un directorio como primer argumento, esta función devuelve una instancia de la clase Directory
, la cual puedes usar posteriormente para leer el contenido del directorio.
Analicemos el siguiente ejemplo para ver cómo funciona exactamente.
1 |
<?php
|
2 |
$arrFiles = array(); |
3 |
$objDir = dir("/path/to/dir"); |
4 |
|
5 |
while (false !== ($entry = $objDir->read())) { |
6 |
$arrFiles[] = $entry; |
7 |
}
|
8 |
|
9 |
$objDir->close(); |
10 |
?>
|
Primero usamos la función dir
para inicializar una instancia de la clase Directory
en la variable $objDir
. A continuación usamos el método read
de la clase Directory
para recorrer todas las entradas.
La clase FilesystemIterator
En esta sección veremos cómo puedes usar la clase FilesystemIterator
para leer el contenido de un directorio. El beneficio de usar la clase FilesystemIterator
es que puedes extender los métodos de esta clase, y también proporciona muchos otros métodos útiles que también te permiten obtener información diversa sobre los archivos.
Revisemos el siguiente ejemplo para entender cómo funciona.
1 |
<?php
|
2 |
$arrFiles = array(); |
3 |
$iterator = new FilesystemIterator("/path/to/directory"); |
4 |
|
5 |
foreach($iterator as $entry) { |
6 |
$arrFiles[] = $entry->getFilename(); |
7 |
}
|
8 |
?>
|
Como puedes ver, es verdaderamente sencillo usar la clase FilesystemIterator
y recorrer las entradas. En el ejemplo anterior, hemos usado el método getFileName
de la clase FilesystemIterator
para obtener el nombre de archivo. Sin embargo, la clase FilesystemIterator
también proporciona varios métodos de utilidad, como getExtension
, getSize
, getPathname
, entre otros.
Y así es como puedes usar la clase FilesystemIterator
para obtener una lista de los archivos de un directorio.
Conclusión
Hoy analizamos diferentes métodos que puedes usar para obtener una lista de todos los archivos contenidos en un directorio en PHP. Aquí hay una tabla para comparar cada método y así ayudarte a elegir el adecuado para ti.
Función o clase | Notas |
---|---|
Funciones opendir , readdir y closedir
|
No es el método más sencillo ni el más abundante en funciones |
Función scandir
|
La manera más sencilla de leer una lista de archivos |
Función glob
|
Muy sencilla y permite la comparación de patrones |
Función dir
|
La versión orientada a objetos de readdir
|
Clase FilesystemIterator
|
Puede proporcionar información adicional sobre los archivos, como su tamaño o permisos |