Listar directorios y subdirectorios en PHP

Vamos a explicar cómo recorrer directorios a dos niveles.
En el primer nivel solo existen carpetas (no archivos) y en el segundo nivel existen imágenes, archivos…
En el primer nivel no leeremos archivos, solo carpetas y en el segundo nivel leeremos los archivos.

Lo primero que debemos hacer es llamar a una función pasándole la ruta donde queremos comenzar nuestro recorrido.

  • Primera función que recorrerá el primer nivel de carpetas.
 
//A continuación le pasamos a la función el nombre de la carpeta "padre" donde queremos comenzar a leer
 
echo listar_carpetas($carpetaInicial);
 
function listar_carpetas($carpeta) {
//le añadimos la barra a la carpeta que le hemos pasado
$ruta = $carpeta . "/";
 
//pasamos a minúsculas (opcional)
$ruta = strtolower($ruta) ;
 
//comprueba si la ruta que le hemos pasado es un directorio
if(is_dir($ruta)) {
//fijamos la ruta del directorio que se va a abrir
if($dir = opendir($ruta)) {
//si el directorio se puede abrir
while(($archivo = readdir($dir)) !== false) {
//le avisamos que no lea el "." y los dos ".."
if($archivo != '.' && $archivo != '..') {
//comprobramos que se trata de un directorio
if (is_dir($ruta.$archivo)) {
//si efectivamente es una carpeta saltará a nuestra próxima función
leer_carpeta($ruta.$archivo);
} } }
//cerramos directorio abierto anteriormente
closedir($dir);
} } }
  • Segunda función que recorrerá los subdirectorios.
 
//recogemos  la ruta para entrar en el segundo nivel
function leer_carpeta($leercarpeta) {
//le añadimos la barra final
$leercarpeta = $leercarpeta . "/";
 
if(is_dir($leercarpeta)){
if($dir = opendir($leercarpeta)){
while(($archivo = readdir($dir)) !== false){
if($archivo != '.' && $archivo != '..') {
/* imprimimos el nombre del archivo, si quisieramos podriamos poner en este punto por ejemplo un enlace 
al archivo para que se abriera una imagen o un PDF al hacer click encima del nombre. */
echo $archivo; } }
 
closedir($dir);
} } }

Se pueden hacer todos los niveles que uno quiera, si quisieramos tener un tercer nivel lo único que tendriamos que hacer es crear una nueva función que será por ejemplos carpeta_tercer_nivel() y que debemos colorcarlo dentro del bucle del nivel dos.

Iván Martínez

Ingeniero Informático apasionado por el mundo del desarrollo WEB. Me gusta caminar por este mundo lleno de tecnologías y día a día aprender cosas nuevas como el doctor Frankenstein ¡dadme cosas para experimentar!

Deja un comentario

Tu dirección de correo electrónico no será publicada.