Listar archivos de un directorio web con PHP y XML

Posted by admin | AS3,Básico,Flash,Php | Monday 27 October 2008 10:37 am

Este es un sencillo script de PHP que nos permite generar un archivo XML con el listado de todos los archivos y carpetas que esten contenidos dentro del directorio en el que hemos situado el archivo PHP.

Esto nos puede resultar útil para realizar galerías fotográficas en las que queremos acceder a todas las imágenes de un directorio y queremos poder subir o borrar archivos. El archivo XML siempre estará actualizado a los ficheros del servidor.

El archivo PHP es el siguiente. Lo llamaremos list.php y lo subiremos al servidor dentro de la carpeta que nos interese listar.

Actionscript:
  1. <?php
  2.     $dir = "./";
  3.    
  4.     echo "<XML encoding='UTF-8' standalone='yes' version='1.0'>\n";
  5.     echo "  <folder>\n";
  6.    
  7.     if (is_dir($dir))
  8.     {
  9.         if ($gd = opendir($dir))
  10.         {
  11.             while (($archivo = readdir($gd)) !== false)
  12.             {
  13.                 if ($archivo != "." & $archivo != ".." & $archivo != "list.php")
  14.                 {
  15.                     if (is_dir($archivo))
  16.                     {
  17.                         echo "    <folder>$archivo</folder>\n";
  18.                     }
  19.                     else
  20.                     {
  21.                         echo "    <file>$archivo</file>\n";
  22.                     }
  23.                 }
  24.             }
  25.             closedir($gd);
  26.         }
  27.     }
  28.    
  29.     echo "  </folder>\n";
  30.     echo "</XML>\n";
  31. ?>

El script lo único que hace es recorrer todos los elementos de la carpeta en la que está situado y a base de "echos" formatea el XML.

Si visualizamos este archivo desde el navegador y miramos el código resultante este sería un archivo XML de este estilo:

CODE:
  1. <XML encoding='UTF-8' standalone='yes' version='1.0'>
  2.   <folder>
  3.     <file>img_001.jpg</file>
  4.     <file>img_002.jpg</file>
  5.     <file>img_003.jpg</file>
  6.     <file>img_004.jpg</file>
  7.     <file>img_005.jpg</file>
  8.     <folder>thumbs</folder>
  9.     <folder>hires</folder>
  10.   </folder>
  11. </XML>

De esta manera si quisiésemos, por ejemplo, listar el contenido de imágenes disponibles de este directorio dentro de un componente List de Flash haríamos lo siguiente:

CODE:
  1. import fl.data.DataProvider;
  2.  
  3. var _URLLoader = new URLLoader();
  4. var _URLRequest = new URLRequest();
  5.  
  6. _URLRequest.url = "/img/list.php";
  7. _URLLoader.load(_URLRequest);
  8. _URLLoader.addEventListener(Event.COMPLETE, onListComplete);
  9.  
  10. function onListComplete(e:Event):void
  11. {
  12.     var xml:XML = new XML(e.target.data);
  13.     var xmlList:XMLList = xml.folder.file;
  14.     var dataProvider = new DataProvider();
  15.     for each (var item in xmlList)
  16.     {
  17.         dataProvider.addItem({label:item});
  18.     }
  19.     listado.dataProvider = dataProvider;
  20. }

Cargamos el archivo PHP como si de un XML se tratase, y de ahí lo convertimos en el dataProvider del componente.

Post relacinonados:

  1. Impedir la visualización de archivos SWF individualmente
  2. Cargar XML en un componente List en Actionscript 3
  3. ADM, aplicación AIR para editar archivos de configuración

8 Comments »

  1. Comment by Rafeo — 27 October, 2008 @ 6:46 pm

    Gracias Zguillez, muy útil, cuando se presente la oportunidad de usarlo no dudaré en copiártelo :p.

  2. Comment by sergio — 2 November, 2009 @ 9:56 am

    hola estoy probando el codigo par alistar archivo pero no funciona o algo no ago vien cargo es earchivo en el directorio que quero mostrar a rchivos pero no anda me da error
    le agradeceria me ayude un saludo

  3. Comment by David Jacob Jarquin — 24 February, 2010 @ 3:38 pm

    Algunas veces los nombres de los archivos pueden contener caracteres como '&' o por ejemplo comilla simple.

    Vale la pena reemplazar los caracteres que pueden tener problemas en un xml, es decir:

    function ReemEntidadesXML($string){
    return strtr($string,array(
    '&' => '&',
    '>' => '>',
    ' '<',
    '"' => '"',
    '\'' => ''' ));
    }

    y por si tienen acentos o Ñ también vale la pena ponerle un
    $archivo = utf8_encode(ReemEntidadesXML($archivo));

  4. Comment by Keison — 1 May, 2010 @ 11:33 pm

    Zguillez como puedo hacer para listar tambien los subdirectorios dentro de la carpeta? y generar esto mismo en el XML. He intentado modificar algo el codigo pero no logro hacerlo, a ver si me ayudas.

    Saludos

  5. Comment by David Jacob Jarquin — 2 June, 2010 @ 4:02 pm

    Podrías hacerlo con una función recursiva (nota el código está incompleto solo es la idea)

    function GeneraDirectorio($dir,$str){
    if (is_dir($dir))
    {
    if ($gd = opendir($dir))
    {
    while (($archivo = readdir($gd)) !== false)
    {
    if ($archivo != "." & $archivo != ".." & $archivo != "list.php")
    {
    if (is_dir($archivo))
    {
    $str.= $archivo\n";
    //LLAMAMOS A LA MISMA FUNCIÓN
    $str = GeneraDirectorio($archivo, $str.)
    }
    else
    {
    $str .= " $archivo\n";
    }
    }
    }
    closedir($gd);
    }
    }
    }

  6. Comment by David Jacob Jarquin — 2 June, 2010 @ 4:03 pm

    Podrías hacerlo con una función recursiva (nota el código está incompleto solo es la idea)

    function GeneraDirectorio($dir,$str){
    if (is_dir($dir))
    {
    if ($gd = opendir($dir))
    {
    while (($archivo = readdir($gd)) !== false)
    {
    if ($archivo != "." & $archivo != ".." & $archivo != "list.php")
    {
    if (is_dir($archivo))
    {
    $str.= $archivo\n";
    //LLAMAMOS A LA MISMA FUNCIÓN
    $str = GeneraDirectorio($archivo, $str.)
    }
    else
    {
    $str .= " $archivo\n";
    }
    }
    }
    closedir($gd);
    }
    }
    return $str;
    }

  7. Comment by Javi — 13 July, 2010 @ 5:42 pm

    Como se puede traducir la parte de AS3 a AS2... Gracias

  8. Comment by jsteban — 11 November, 2011 @ 11:15 am

    Salu2, existe alguna manera de listar solo algunos archivos del directorio ?? usando comodines como en DOS o algo asi.
    Por ejemplo, si quisiera listar solo los archivos qui comienzan por " fil" hacer algo así Fil*.*
    Muchas Gracias.

RSS feed for comments on this post. TrackBack URI

Leave a comment

Get Adobe Flash playerPlugin by wpburn.com wordpress themes