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.
- <?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.
Compártelo:
Visto 21.822 veces
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
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.