PHP Recorridos recursivos en directorios

Vamos a ver en esta entrada algunas funciones alternativas para el recorrido de directorios en PHP. Podremos usar también las funciones is_dir($ruta), para conocer si un determinado archivo es un fichero o un directorio. Lo haremos así:

Funciones para el recorrido de ficheros en PHP

  • is_dir($ruta), nos dirá si la ruta enviada es un directorio, en caso contrario lo tomaremos como un fichero

Apertura de ficheros con opendir($ruta)

Hasta ahora hemos usado la función chdir($ruta), para cambiar el directorio de trabajo en el que estamos. Pero cuando queremos cambiar en númerosas ocasiones de directorio de trabajo y además queremos ir hacía arriba o hacía abajo dentro del árbol de directorios resulta mucho más cómodo usar la función opendir($ruta), que tiene un uso similar a la ya vista, fopen($fichero). Una vez abierto un fichero deberemos cerrarlo con closedir($apuntador).

  • int opendir($ruta), nos abre una un directorio y nos retorna su apuntador. Nos retornará FALSE en caso de error.

Con apuntador que opendir nos retorna, podemos hacer uso de la función readdir($apuntador), que recibe un apuntador a directorio y nos retorna un elemento del mismo, para retornar el siguiente en la próxima solicitud, así hasta llegar al final que retornará FALSE.
Usando estas dos funciones podemos hacer un recorrido recursivo de todo nuestro árbol de directorios, tal como se muestra en el ejemplo.

Ahora vamos a ver unos ejemplos de uso para las anteriores funciones.

<?php
if ($directorio=opendir("/var/www")) //En windows c:/wamp/www
	{ 
	while (($file=readdir($directorio))) 
		{ 
                if (is_dir($file))
                        echo "<p>$file es un directorio</p>";
                else
                        echo "<p>$file es un fichero</p>";
		}
	}
closedir($directorio);
?>

Como ejercicio amplia el ejemplo para que muestre, tamaño y fecha de último acceso para cada elemento.

Recorridos recursivos

<?php
function listado_completo($ruta)
{ 
// abrir un directorio y listarlo recursivo 
if (is_dir($ruta))
	{ 
	echo "<ul>";
	if ($dh = opendir($ruta)) 
	{ 
		while (($file=readdir($dh))) 
		{ 
		echo "<li>Nombre de archivo: $file : Tiene un tamaño ".filesize($ruta.$file)." con fecha de último acceso ".fileatime($ruta.$file).", fecha de última modificación ".filemtime($ruta.$file)." y fecha de creación: ".filectime($ruta.$file); 
		if (is_dir($ruta.$file) && $file!="." && $file!="..")
			{ 
			echo "Directorio: $ruta$file"; 
			listado_completo($ruta.$file."/"); 
			} 
		else
			echo "</li>";
		} 
	closedir($dh);
	echo "</ul>"; 
	} 
	}
	else 
		echo "<br>No es ruta valida"; 
} 

listado_completo("/var/www/");
?>

Originally posted 2011-03-16 19:45:00.

3 Responses to “ PHP Recorridos recursivos en directorios ”

  1. Andres dice:

    buenas tardes.
    tengo una consulta como podría hacer ese recorrido pero sin utilizar funciones.

    me gustaría saber como se hace sin:
    function listado_completo

  2. Cristian dice:

    hola, al listar el arbol de directorios, como evito que liste el ‘.’ y el ‘..’ al principio?

    saludos

  3. Harvey dice:

    Muy bueno tu aporte muchas gracias

Deja un comentario