Neuralpin Logo

Listar archivos con DirectoryIterator PHP

La forma correcta de listar los archivos de un directorio con PHP usando recursividad

PHP nos provee de la clase nativa DirectoryIterator para poder recorrer los archivos dentro de un directorio deseado.

Para usarla debemos crear una instancia de esta clase pasando como argumento la localización del directorio y procedemos a usar foreach para ir recorriendo archivo por archivo.

Con cada repetición del ciclo validaremos si se trata de un archivo o un directorio, si se trata de un archivo añadiremos sus datos a un array, en caso de que sea un directorio usaremos la recursividad para crear una nueva instancia de DirectoryIterator y repetir, hasta haber listado todos los archivos y directorios.

Código final

<?php

/*
Función para listar contenido de un directorio
*/
function list_files( string $path ): array{

    $data = [];
    $mydir = new DirectoryIterator( realpath($path) );

    foreach( $mydir as $f ){
        
        //Evitamos los archivos '.', '..' que son accesos directos
        if( $f->getBasename() != '.' && $f->getBasename() != '..' ){

            //En caso de que se trate de un directorío usamos recursividad
            if( $f->isDir() ){
                $data[$f->getBasename()] = list_files( $path.'/'.$f->getBasename() );

            //En caso de solo ser un archivo lo añadimos a la lista
            }else{
                $data[$f->getBasename()] = $f->getBasename();
            }

        }
    }

    return $data;
}

//Listamos los archivos del directorio actual
$list = list_files('');

//Mostramos lista de archivos en formato JSON
header('Content-type: application/json');
echo json_encode($list);