1. Funciones de Directorios en PHP
Hay tres funciones que son claves para recorrer un directorio con PHP.
La primera, opendir, toma el nombre del directorio a leer (sin la barra del final) y devuelve un identificador del directorio, que se podrá usar con las otras funciones. Llamada:
$dir = opendir($path)
La segunda, readdir, va devolviendo en sucesivas llamadas los nombres de las entradas contenidas en el directorio. Normalmente, esto se utiliza en un bucle de la forma
while ($elemento = readdir($dir)){
...procesar
}
Hay que tener cuidado con los dos directorios especiales "punto" (actual) y "punto punto" (superior), más conocidos como "." y "..". Normalmente, al procesar los elementos del directorio se controla con un if si el elemento a tratar no es ninguno de estos dos. Algo así:
$dir = opendir($path)
while ($elemento = readdir($dir)){
if( $elemento != "." && $elemento != ".."){
... procesar
}
}
Por último, para diferenciar si el elemento a tratar es un fichero o es un subdirectorio, tenemos la función is_dir. En caso de que sea un subdirectorio al que queramos aplicar el mismo tratamiento que al actual, podemos hacer una llamada recursiva a la misma función (que aquí llamaremos analizar_directorio).
2. Todo Junto
Pongámoslo ahora todo junto, en una función que se limita a contar los ficheros contenidos en el directorio inicial y los subdirectorios que hay dentro, recorridos de manera recursiva (¡ojo, cuidado con la recursividad). Más adelante haremos cosas más interesantes que contar ficheros. Para probarlo todo, guardaremos el siguiente listado como index.php:
1 <html> 2 <head> 3 <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> 4 </head> 5 6 <body> 7 <?php 8 $path = "../../rips"; 9 $total_ficheros = analizar_directorio($path); 10 echo "Hay $total_ficheros ficheros en el directorio $path<br>"; 11 12 //------------------------------------------------------------- 13 function analizar_directorio($path) { 14 $total_ficheros = 0; 15 $dir = opendir($path); 16 while ($elemento = readdir($dir)){ 17 if( $elemento != "." && $elemento != ".."){ 18 // Si es una carpeta 19 if( is_dir($path."/".$elemento) ){ 20 // Muestro la carpeta 21 echo("Procesando subdirectorio: ". $elemento . "<br>"); 22 $total_ficheros += analizar_directorio($path."/".$elemento); 23 // Si es un fichero 24 } else { 25 $total_ficheros++; 26 } 27 } 28 } 29 return $total_ficheros; 30 } 31 32 ?>
El resultado en el navegador:
Referencias sobre las tres funciones
http://www.php.net/manual/es/function.opendir.php
https://php.net/manual/es/function.readdir.php
https://php.net/manual/es/function.is-dir.php
No hay comentarios:
Publicar un comentario