Listar archivos de un directorio web con PHP y XML
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.
$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:
<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:
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.
Post relacinonados:
7 Comments »
RSS feed for comments on this post. TrackBack URI









Gracias Zguillez, muy útil, cuando se presente la oportunidad de usarlo no dudaré en copiártelo :p.
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
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));
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
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);
}
}
}
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;
}
Como se puede traducir la parte de AS3 a AS2... Gracias