Dic 242013
 
Artículo PHP

Una de las tareas habituales de una aplicación es obtener un listado del contenido de un directorio para llevar a cabo algún tipo de proceso de los ficheros que contiene.

En este artículo se explica cómo listar los ficheros de un directorio en un script PHP, y cómo recorrer recursivamente un árbol de directorios.

Listar los ficheros contenidos en un directorio

En PHP, se utilizan las funciones opendir(), readdir() y closedir() para obtener los nombres de los ficheros contenidos en un directorio.

opendir() devuelve un cursor, que es pasado como argumento a la función readdir(). Cada vez que es llamada, readdir() devuelve el nombre del siguiente fichero en secuencia. Por último, closedir() cierra el cursor abierto con opendir().

Ejemplo. El siguiente script “lista_directorio.php”:

$directorio = ".";
$hDir = opendir($directorio) or die("Error. No se ha podido abrir el directorio");

while ($fich = readdir($hDir)) {
    echo "Fichero: " . $fich . "\n";
}

genera como resultado, en el directorio en donde lo ejecutamos:

$ php lista_directorio.php |more
Fichero: .
Fichero: ..
Fichero: lista_directorio.php

Como vemos, en un sistema unix, readdir() devuelve también las entradas especiales “.” y “..”.

Recorrer un árbol de directorios

Para recorrer un árbol de directorios, debemos determinar cuáles de los ficheros contenidos en un directorio son a su vez directorios. Para ello utilizamos la función is_dir(). Para cada subdirectorio encontrado, llamamos recursivamente a la función que lista su contenido.

Ejemplo:

function recorre_arbol($directorio){

  $hDir= opendir($directorio) or die('Error. No se ha podido abrir el directorio');
	while($fich = readdir($hDir)) {
		if(is_dir($directorio.'/'.$fich) && $fich != '.' && $fich != '..') {
                         echo $directorio.'/'.$fich."\n";
			recorre_arbol($directorio.'/'.$fich);
		}
		else if ($fich != '.' && $fich != '..') {
			echo $directorio.'/'.$fich."\n";
                }
	}
  closedir($hDir);
}

Filtrar los resultados obtenidos

Para procesar únicamente los ficheros cuyo nombre se ajusta a un determinado patrón, basta con utilizar la función preg_match.

Por ejemplo, para listar únicamente los ficheros con extensión “.txt”:

    if (preg_match("/.*\.txt$/", $fich)) {
        echo "Fichero: " . $fich . "\n";
    }

Indice de artículos sobre programación en lenguaje PHP

 Publicado por en 9:27 am

 Deja un comentario

(requerido)

(requerido)