Manejo de directorios con PHP

En PHP existen muchas funciones para el manejo de directorios (carpetas) y sus contenidos.

En esta ocasión nos centraremos en listar directorios y a su vez sus contenidos de manera recursiva, ya que nos sabemos que puede contener (la conocida estructura de árbol).

Aqui les listo las funciones de PHP que vamos a utilizar:


El funcionamiento sería el siguiente:

La función recibe una ruta. Por ejemplo, si queremos que liste los directorios de la carpeta donde está el archivo la llamaríamos con:

listar_directorios_ruta("./"); 

Lo primero que se hace es comprobar si la ruta recibida es un directorio.

if (is_dir($ruta)) { //... }

Si lo es realizaremos las acciones, pero si no lo es, mostraremos un mensaje diciendo que no es una ruta válida.

En el siguiente if extraemos el gestor de directorio y lo guardamos en una variable $dh

if ($dh = opendir($ruta)) 

Con un bucle while recorreremos cada elemento de ese directorio.

while (($file = readdir($dh)) !== false) 

Dentro del bucle hacemos un if para saber si el elemento es un directorio

if (is_dir($ruta . $file) && $file!="." && $file!="..") 

En caso que sea un directorio, simplemente escribimos en la página. Además, tenemos que ver si ese directorio contiene a su vez otros directorios. Para eso llamamos a la función de nuevo pasándole ese nuevo directorio. Así la función se llama a si misma para mostrar todo el árbol de carpetas.

Por último se cierra el gestor de directorio abierto previamente.

closedir($dh);

Con lo que nuestra función quedaría de la siguiente manera:

function listar_directorios($ruta){ 
   // abrir un directorio y listarlo recursivo 
   if (is_dir($ruta)) { 
      if ($dh = opendir($ruta)) { 
         while (($file = readdir($dh)) !== false) { 
            //esta línea la utilizaríamos si queremos listar todo lo que hay en el directorio 
            //mostraría tanto archivos como directorios 
            echo "Nombre de archivo: $file : Es un: " . filetype($ruta . $file); 
            if (is_dir($ruta . $file) && $file!="." && $file!=".."){ 
               //solo si el archivo es un directorio, distinto que "." y ".." 
               echo "Directorio: $ruta$file"; 
               listar_directorios_ruta($ruta . $file . "/"); 
            } 
         } 
      closedir($dh); 
      } 
   }else 
      echo "No es ruta valida"; 
} 

Saludos y que lo disfruten!

Bookmark and Share

1 comentarios:

Unknown dijo...

epale le cambiaste el nombre a la funcion listar_directorios_ruta y es function listar_directorios gracias por la ayuda!

Publicar un comentario