Listado recursivo de ficheros de un directorio en PHP
A raÃz de un off-topic en ASNativos, en el que pedÃan ayuda para generar automáticamente un listado de ficheros en XML para una galerÃa de imágenes en Flash, he envÃado la solución, en PHP, que llevo usando desde hace tiempo.
En mi caso, el directorio que leo es img, y sólo los ficheros con extensión .jpg.
1: <?php
2:
3: chdir(img);
4: $basedir = “.”;
5:
6: function listdir($basedir){
7: if ($handle = @opendir($basedir)) {
8: $dirs = array();
9: $files = array();
10: while (false !== ($dir = readdir($handle))){
11: if ($dir != ‘.’ && $dir != ‘..’){
12: if (is_dir($basedir.“/”.$dir)){
13: $dirs[] =$dir;
14: } else {
15: $tmpsplit = split(“[.]”,$dir);
16: $tmpextension = $tmpsplit[count($tmpsplit)-1];
17: if(strtolower($tmpextension)==“jpg”) $files[] = $dir; // sólo se listan los jpg
18: }
19: }
20: }
21: sort($dirs);
22: for($i=0;$i<count($dirs);$i++) {
23: echo “<dir id=”$i” nombre=”".$dirs[$i].“”>\r”;
24: listdir($basedir.“/”.$dirs[$i]);
25: echo “</dir>\r”;
26: }
27: sort($files);
28: for($i=0;$i<count($files);$i++) {
29: echo “<file id=”$i” nombre=”".$files[$i].“” />\r”;
30: }
31: closedir($handle);
32: }
33: }
34:
35: echo “<”.“?xml version=”1.0″ encoding=”utf-8″ ?”.“>\r”;
36: echo “<dirs>\r”;
37: listdir($basedir);
38: echo “</dirs>\r”;
39:
40: ?>
Por cierto, que he aprovechado para incluir una función php para colorear el código y añadir números de lÃnea encontrada en Zend, aunque Serendipity no me deja añadir PHP en las entradas, con lo que he tenido que ponerlo a pelo.
Actualización: puedes descargar el código fuente en lista-directorio.php.txt (tras esta recomendación en los comentarios).














#1 - ala_747
Está buena la función. Justo estaba necesitando algo parecido pero hasta ahora no encontré una que me convenza, la probaré a ver que tal me funka con las modificaciones del caso.
Una sugerencia, cuando pongas código PHP como aquÃ, pon un link a un TXT con el código, o no incluyas los números de lÃnea asà se puede copiar y pegar ;)