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.
Código :
<?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:
Código :
<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:
Código :
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.

De todas formas hay una forma de insertar tabulaciones sin tener que usar el "espacio", lo que ahora no recuerdo cual era.
Bleend-blog :
De todas formas hay una forma de insertar tabulaciones sin tener que usar el "espacio", lo que ahora no recuerdo cual era.
Si, es con \t
Código :
Por Noja33 el 27 de Octubre de 2008
Por Tata el 27 de Octubre de 2008
header("content-type: text/xml");
Por lo demás es estupendo, saludos!!!
Por lemostro el 28 de Octubre de 2008
Sólo una par de cosas que creo que podría mejorarlo:
Podrías hacer que el directorio fuese un parámetro, lo que te da mucha más flexibilidad para hacer los listados, por ejemplo si necesitas varias galerías de imágenes o listas:
Código :
y envías la url con la dirección que requieres:
Código :
De esta forma, ni siquiera haría falta que el archivo estuviese en la misma carpeta.
Por Raxiro el 28 de Octubre de 2008
pd: Alguien sabe que es más rápido:
Parsear un XML o hacer una consulta a una MySql ? Siempre tuve esa duda, a veces soy muy perseguido y para no sobrecargar al servidor con datos que no varían seguido entonces genero los xml con php de forma similar al ej. de Z y que los lea flash.
Raxiro-blog :
Parsear un XML o hacer una consulta a una MySql ? Siempre tuve esa duda, a veces soy muy perseguido y para no sobrecargar al servidor con datos que no varían seguido entonces genero los xml con php de forma similar al ej. de Z y que los lea flash.
XML es un archivo de texto.
Otra cosa distinta es generar "cache" estático de las consultas o HTML estático de las salidas para mejorar el rendimiento. Lo que tu haces con los XML es similar a eso. Por otro lado, en el caso de Flash no tienes opción, sea que hagas la consulta o no vas a tener que parsear el XML. Pero eso se hace del lado del cliente.
Por Raxiro el 31 de Octubre de 2008
saludos
La verdad es que he intentado y no me sale
CarlosRuminott :
La verdad es que he intentado y no me sale
Si claro.. Lo único que has de hacer cambiar el new DataProvider(); por un new Array(); y tambien cambiar el addItem() por un push().. y listo
Pero a lo que me refería era a llenar un array en el mismo PHP, y al final lo logre
dejo el código por si le sirve a alguien
Código :
<?php $dir = "./"; $imagenes = array(); 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 { $imagenes[] = $archivo; } } } closedir($gd); } } ?>Era tan simple y no me salia
Por Julian el 26 de Enero de 2009
pero gracias
Por jovix el 10 de Diciembre de 2009
Por maggX el 24 de Marzo de 2010
Por josue el 09 de Abril de 2010
memanda los siguientes errores
No se pudo cargar la clase o interfaz 'Event'.No se pudo cargar la clase o interfaz 'XMLList'.
No se pudo cargar la clase o interfaz 'fl.data.DataProvider'.
Por joshdrack el 09 de Abril de 2010
memanda los siguientes errores
No se pudo cargar la clase o interfaz 'Event'.No se pudo cargar la clase o interfaz 'XMLList'.
No se pudo cargar la clase o interfaz 'fl.data.DataProvider
Por WILY el 22 de Junio de 2011