Archivo

Archivo para enero 28, 2010

Función recursiva en PHP para listar Directorios y Archivos

enero 28, 2010 4 comentarios

Ahora les traigo una funcion que me ha servido de mucho, esta función solo recibe como parametro la ruta o carpeta que queremos listar su contenido. Por ahora solo la imprime en una lista un poco fea, :-( pero bueno ya depende de la creatividad de cada uno para darle mejor aspecto, por ejemplo se puede hacer un árbol que al dar clic en un directorio se desplegue su contenido, o hacer un explorador de archivos al estilo de joomla o como el que trae el mismo windows cuando le damos abrir ha algún fichero, bueno muchas mas cosas que se les pueda imaginar.

Aquí ta la función:

function listar_directorios_ruta($ruta)
 {
 // abrir un directorio y listarlo recursivo
 if (is_dir($ruta))
 {
 if ($dh = opendir($ruta))
 {
 echo "<br /><strong>$ruta</strong>"; // Aqui se imprime el nombre de la carpeta o directorio

 while (($file = readdir($dh)) !== false)
 {
 //if (is_dir($ruta . $file) && $file!="." && $file!="..") // Si se desea mostrar solo directorios
 if ($file!="." && $file!="..") // Si se desea mostrar directorios y archivos
 {
 //solo si el archivo es un directorio, distinto que "." y ".."
 echo "<br />$ruta$file"; // Aqui se imprime el nombre del Archivo con su ruta relativa
 listar_directorios_ruta($ruta . $file . DIRECTORY_SEPARATOR); // Ahora volvemos a llamar la función
 }
 }
 closedir($dh);
 }
 }
 }

Ahora va una pequeña explicación, Es un poco complicado entender lo de la recursividad, pero vamos a tratar de eplicar, porque como es posible que una función se mande a llamar a si misma. que raro no, bueno resulta que cuando una función se llama a si misma se crea una pila de ejecución la cual va guardando las llamadas que hace la funcion, cuando una termina, inmediatamente se empeza a ejecutar la siguiente, es decir es un proceso que consume un poco de recursos, debido a que necesita gran cantidad de memoria en tiempo de ejecucion para poder guardar la pila de ejecución.

Que hace realmente la función?. Lo primero es verificar si el parametro recibido es un directorio si es asi abrimos el directorio, con opendir, ahora leemos cada uno de los archivos dentro del directorio, si el archivo leido es un directorio, mandamos a llamar nuevamente a la función, y se repite el proceso. Al terminar es recomendable, bueno por no decir necesario, cerra el directorio.

Espero y quede claro la explicación alguna duda pregunten que pa eso tamos aqui… : )

Categorías:Programacion Etiquetas:
Seguir

Get every new post delivered to your Inbox.