Obtener archivos de un directorio con PHP
En este artículo te voy a explicar cómo puedes obtener una lista de todos los archivos de un directorio con PHP. Recorrer el directorio e incluso identificar cuales son ficheros y cuales son subcarpetas.
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.
Hace unas semanas, hice uso de estas herramientas en el ejemplo donde explicaba como enviar un archivo al servidor con PHP
PHP proporciona algunos métodos diferentes que podemos usar para leer fácilmente el contenido de los directorios. Hoy analizaremos estos métodos y te voy a dejar algunos ejemplos, para entender cómo funciona cada uno.
Funciones para operar con directorios
En esta sección, te voy a mostrar como usar la familia de funciones opendir
, readdir
y closedir
para ver cómo obtener una lista de archivos de un directorio específico.
opendir() : Abre un gestor de directorio para ser usado con llamadas posteriores como readdir() o closedir(). A esta función le pasamos como parámetro la ruta al directorio que queremos acceder. Si la ruta del directorio es válida, un recurso de manejador de directorio será devuelto.
readdir() : Lee una entrada desde un gestor de directorio abierto previamente usando opendir(). Necesitas proporcionar un directorio válido en el primer argumento de la función readdir
para recorrer todas las entradas y obtener una lista con todos los archivos contenidos en esa carpeta.
closedir() : Cierra el gestor de directorio previamente abierto por opendir(). Es una buena práctica usar la función closedir
una vez que hayas terminado con tus operaciones en el directorio.
Aquí te dejo un ejemplo simple para ver como leer el contenido de un directorio, combinando estas tres funciones.
<?php
$arrArchivos = array();
$gestor = opendir('/ruta/al/directorio');
if ($gestor) {
while (($entrada = readdir($gestor)) !== FALSE) {
$arrArchivos[] = $entrada;
}
}
closedir($gestor);
?>
En primer lugar, usamos la función opendir
para obtener el manejador de directorio. Luego, con la función readdir
recorremos el manejador de directorio $gestor
y almacenamos una lista de los archivos en la matriz $arrArchivos
.
La función scandir
Utilizar la función scandir
nos permite, de forma bastante sencilla, obtener una lista de archivos y subdirectorios contenidos en un directorio específico. Solamente hay que pasar como primer parametro de la función, la ruta del directorio que queremos leer.
Opcionalmente, también se puede pasar otro parámetro (sorting_order) para definir de que forma se ordenaran los resultados devueltos. Ascendente, descendente o sin ningún orden en particular.
Veamos el siguiente ejemplo para entender cómo funciona:
<?php
$arrArchivos = scandir('/ruta/al/directorio');
?>
Como puedes ver, esto nos devolverá una lista de los archivos y directorios en una sola llamada. En los casos en que solo necesitamos 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
, pero nos permite usar un patrón para filtrar los resultados devueltos cuando se lista el contenido de un directorio.
Por ejemplo, si queremos usar la función glob
para leer todo el contenido de un directorio específico:
<?php
$arrArchivos = glob('/ruta/al/directorio/*');
?>
Como puedes ver, se escribe igual que la función scandir(), pero con la diferencia de que luego de la ruta al directorio, agregamos el patrón a buscar. En este ejemplo usamos *
, para leer todo el contenido del directorio.
En caso de querer ver un tipo de archivos especifico, basta con cambiar el patrón y definirlo como se puede ver a continuación:
<?php
$arrArchivos = glob('/ruta/al/dirextorio/*.txt');
?>
En este caso, $arrArchivos
solamente devolverá los nombres de los archivos con extensión .txt
.
Ejemplo completo para obtener archivos de un directorio con PHP
Aquí te dejo un caso practico, para poder mostrar todos los ficheros de un tipo determinado que estén contenidos en un directorio. Y además, mostrar el tamaño de cada archivo.
<?php
foreach (glob("/ruta/al/directorio/*.txt") as $nombre_fichero) {
echo "Tamaño de $nombre_fichero " . filesize($nombre_fichero) . "\n";
}
?>
En este caso, listaremos todos los archivos de texto (*.txt) y al lado de su nombre mostraremos el tamaño del mismo, usando la función filesize()
El resultado del ejemplo sería algo similar a esto:
Tamaño de funclist.txt 44686 Tamaño de funcsummary.txt 267625 Tamaño de quickref.txt 137820
Conclusión
Hoy te mostré diferentes métodos que puedes usar para obtener archivos de un directorio con PHP. Recuerda que la documentación completa de cada función se puede encontrar online en el manual de PHP.net
Si te gustó o te entretuvo el contenido de este posteo, haciendo un click en los avisos me ayudas a mantener el sitio con vida y a seguir publicando.
Y si quieres ganar algo de dinero sin esfuerzo, registrate en IPRoyal desde este banner y recibí 1 dolar de regalo al comenzar a usar la aplicación para generar ingresos pasivos.
Acá puedes conocer más sobre ingresos pasivos, que es y como funciona PawnsApp.