Taller > PHP > Manejo de archivos
Listado de Archivos en PHP
En PHP, es posible listar archivos y directorios de forma programática, lo que es útil para tareas como mostrar el contenido de un directorio o realizar operaciones masivas sobre archivos. En este artículo, aprenderás cómo utilizar las funciones readdir() y scandir() para listar archivos de un directorio, con ejemplos detallados y fáciles de entender.
La función readdir(): Listado de archivos uno por uno
La función readdir() permite leer el contenido de un directorio de forma secuencial. Para usar readdir(), primero debes abrir el directorio con la función opendir() y, al finalizar, cerrarlo con closedir().
Sintaxis:
readdir(?resource $dir_handle = null): string|false
$dir_handle (opcional): Es el manejador del directorio previamente abierto con opendir(). Si no se especifica, PHP asume el último directorio abierto por opendir().
Ejemplo 1: Listar archivos en el directorio actual
Este ejemplo abre el directorio actual y muestra los archivos uno por uno:
$dir = getcwd(); // Obtener el directorio actual
if (is_dir($dir)) {
if ($dh = opendir($dir)) {
while (($file = readdir($dh)) !== false) {
echo "Nombre del archivo: " . $file . PHP_EOL;
}
closedir($dh);
}
}
Explicación:
getcwd() obtiene el directorio actual.
opendir() abre el directorio y devuelve un manejador.
readdir() lee cada archivo secuencialmente hasta que no quedan más archivos.
closedir() cierra el directorio.
Ejemplo 2: Listar archivos en un directorio específico
Aquí listamos los archivos de un directorio especificado:
$dir = "/ruta/a/directorio/";
if (is_dir($dir)) {
if ($dh = opendir($dir)) {
while (($file = readdir($dh)) !== false) {
echo "Archivo encontrado: " . $file . PHP_EOL;
}
closedir($dh);
} else {
echo "No se pudo abrir el directorio.";
}
} else {
echo "La ruta no es un directorio.";
}
La función scandir(): Listado de archivos como un array
La función scandir() es más directa que readdir() porque devuelve todos los archivos de un directorio como un array. También permite ordenar los resultados alfabéticamente en orden ascendente o descendente.
Sintaxis:
scandir(string $directory, int $sorting_order = SCANDIR_SORT_ASCENDING, ?resource $context = null): array|false
$directory (obligatorio): El directorio a escanear.
$sorting_order (opcional): Define el orden de los resultados. Los valores posibles son:
SCANDIR_SORT_ASCENDING (predeterminado): Orden alfabético ascendente.
SCANDIR_SORT_DESCENDING: Orden alfabético descendente.
SCANDIR_SORT_NONE: Sin orden.
$context (opcional): Un recurso de flujo, normalmente no necesario para operaciones simples.
Ejemplo 1: Listar archivos con scandir()
$dir = "/ruta/a/directorio/";
$archivos = scandir($dir);
foreach ($archivos as $archivo) {
echo "Archivo: " . $archivo . PHP_EOL;
}
Salida esperada:
.
..
archivo1.txt
archivo2.txt
El primer y segundo elementos (. y ..) representan el directorio actual y el directorio padre, respectivamente.
Ejemplo 2: Ordenar archivos en orden descendente
$dir = "/ruta/a/directorio/";
$archivos = scandir($dir, SCANDIR_SORT_DESCENDING);
foreach ($archivos as $archivo) {
echo "Archivo: " . $archivo . PHP_EOL;
}
Este ejemplo ordena los archivos en orden alfabético descendente.
Ejemplo 3: Filtrar archivos con una extensión específica
Si deseas listar solo los archivos que terminan con una extensión en particular (por ejemplo, .txt), puedes usar un filtro:
$dir = "/ruta/a/directorio/";
$archivos = scandir($dir);
foreach ($archivos as $archivo) {
if (pathinfo($archivo, PATHINFO_EXTENSION) == "txt") {
echo "Archivo de texto: " . $archivo . PHP_EOL;
}
}
Comparación entre readdir() y scandir()
readdir(): Ideal si necesitas leer archivos de uno en uno o si prefieres un enfoque secuencial.
scandir(): Más conveniente cuando deseas obtener todos los archivos a la vez como un array y aplicar condiciones o filtros.
Conclusión
PHP ofrece diferentes formas de listar archivos dentro de un directorio. Las funciones readdir() y scandir() son las más utilizadas para este propósito. Mientras que readdir() es útil para procesar archivos de manera secuencial, scandir() ofrece una forma rápida y eficiente de obtener todos los archivos como un array. Con los ejemplos presentados, ahora puedes listar y gestionar archivos en tus proyectos PHP de manera eficiente.