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.

<?php
    $dir = "./";
   
    echo "<XML encoding='UTF-8' standalone='yes' version='1.0'>\n";
    echo "  <folder>\n";
   
    if (is_dir($dir))
    {
        if ($gd = opendir($dir))
        {
            while (($archivo = readdir($gd)) !== false)
            {
                if ($archivo != "." & $archivo != ".." & $archivo != "list.php")
                {
                    if (is_dir($archivo))
                    {
                        echo "    <folder>$archivo</folder>\n";
                    }
                    else
                    {
                        echo "    <file>$archivo</file>\n";
                    }
                }
            }
            closedir($gd);
        }
    }
   
    echo "  </folder>\n";
    echo "</XML>\n";
?>

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:

<XML encoding='UTF-8' standalone='yes' version='1.0'>
  <folder>
    <file>img_001.jpg</file>
    <file>img_002.jpg</file>
    <file>img_003.jpg</file>
    <file>img_004.jpg</file>
    <file>img_005.jpg</file>
    <folder>thumbs</folder>
    <folder>hires</folder>
  </folder>
</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:

import fl.data.DataProvider;

var _URLLoader = new URLLoader();
var _URLRequest = new URLRequest();

_URLRequest.url = "/img/list.php";
_URLLoader.load(_URLRequest);
_URLLoader.addEventListener(Event.COMPLETE, onListComplete);

function onListComplete(e:Event):void
{
    var xml:XML = new XML(e.target.data);
    var xmlList:XMLList = xml.folder.file;
    var dataProvider = new DataProvider();
    for each (var item in xmlList)
    {
        dataProvider.addItem({label:item});
    }
    listado.dataProvider = dataProvider;
}

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

Comparte:
  • Meneame
  • Twitter
  • Facebook
  • Google Bookmarks
  • del.icio.us
  • Technorati
  • email
  • Print

Post relacinonados:

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

7 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

RSS feed for comments on this post. TrackBack URI

Leave a comment

Get Adobe Flash playerPlugin by wpburn.com wordpress themes