Leer los archivos de un directorio del servidor con PHP. (Salida XML).

6 octubre, 2008

Con este código generamos un documento XML con el listado de archivos de determinado directorio del servidor web. Lo único que hay que personalizar es la línea $dir=”ruta/de/la/carpeta/a/explorar”; con la ruta de la carpeta elegida en vuestra máquina.

<?php
header("Content-type: text/xml");
$dir="ruta/de/la/carpeta/a/explorar";
$dr=@opendir($dir);
if(!$dr){
echo "<error/>";
exit;
} else {
echo "<exploracion>";
// recorremos todos los elementos de la carpeta
while (($archivo = readdir($dr)) !== false) {
// comprobamos que sean archivos y no otras carpetas
if(filetype($dir . $archivo)!="dir"){
$tam=round(filesize($dir . $archivo)/1024,0);
echo "<archivo nombre='$archivo' tam='$tam'/>";
}
}
echo "</exploracion>";
closedir($dr);
}
?>


30 comentarios para “Leer los archivos de un directorio del servidor con PHP. (Salida XML).”

  1. Carlos Ramírez on octubre 27, 2008 8:16

    Muchas gracias por compartir el código me ha sido muy útil. En verdad te lo agradezco. Saludos

  2. Maura on noviembre 22, 2008 5:43

    como convertir una imagen a xml

  3. Alejandro on febrero 20, 2009 19:50

    Tengo una duda. Dice la descripción sobre la ruta de la carpeta es la ruta en mi máquina. Como debe escribirse la ruta si yo he subido las imágenes a un FTP?

  4. Pauser on marzo 1, 2009 13:33

    Alejandro, puedes obtener la ruta de un directorio ejecutando este código desde el mismo directorio:
    < ?php
    echo getcwd();
    ?>

  5. bydaface on marzo 6, 2009 12:32

    Buenas, me ha sido muy util tu código (soy diseñador), pero tengo una duda:
    Al generar el xml, el listado me aparece desordenado, es decir, en vez de 001.jpg,002.jp,003.jps,etc,…
    me aparece un listado con los archivos organizados de forma aleatoria, es decir, 004.jpg,001.jpg,007.jpg, etc,…

    Que podria hacer?

    Muchas gracias.

  6. Marco Avellaneda on abril 7, 2009 3:10

    La ruta debe estar dada con “/” y no alreves “\” y ademas al final debe llevar la ultima “/”
    Saludos

  7. noel on abril 13, 2009 20:44

    Muchisimas gracias me ah servido de mucha ayuda =)

  8. atmjesus on mayo 12, 2009 21:47

    para bydaface:

    el readdir devuelve los archivos en el orden en que el S.O. los tiene guardados, para ordenarlos alfabeticamente intenta algo así:

    $dir=”ruta/de/la/carpeta/a/explorar”;
    $dr=@opendir($dir);
    $i = 0;
    $images = array();

    while ($file = readdir($dr)) {
    $images[$i] = $file;
    $i = $i+1;
    }
    sort($images);

    y ya con un for recorres el vector de images y generas las etiquetas xml con el nombre, el tamaño y lo que quieras.

    Saludos!

  9. DrBomb on mayo 19, 2009 1:49

    Alejandro para que no te compliques con la ruta seria mas facil poner en la variable $dir:

    $dir=”getcwd() . ruta/a/explorar(servidor)”

    para que no te enredes colocando toda la ruta hasta la raiz www

  10. kalet on junio 16, 2009 4:07

    hola , alguien podria ayudarme, intento hacer un reproductor web, aun soy pricipiante, pero me perdi por qeu uso la version flash cs4 de adobe, o alguien podria facilitarme un codigo mas simple, por que necesito entregar un trabajo en la prepa, y quiero colocar un reproductor web para mp3

    saludos mi correo es dar-kalet@hotmail.com

    gracias

  11. Monica on julio 2, 2009 23:41

    Quisiera hacerles una consulta, pueden por favor poner este codigo de la la Galeria, en PHP ya que esta en ASP, y yo casi no entiendo ASP, ya que empeze con PHP, soy alguien que esta empezando a programar, agradeceria a la persona que me envie todo este codigo, pero en PHP. De antemano mil gracias y que Dios los bendiga.
    Saludos Monica

  12. z4 on julio 25, 2009 13:30

    Hola, estoy intentando aprender a crear el xml con los datos de un directorio… he hexho todo lo k pone aki y al ver como actua el archivo .php en firebug veo k me lee bien los datos con los nombres.. pero como deberia hacer para exportar eso y que me cree el archivo xml???
    GRACIAS a todos por la ayuda!

  13. gabriel on agosto 11, 2009 17:55

    hola soy nuevo en php!
    me dice k tengo este error como lo ssoluciono?
    Warning: Cannot modify header information – headers already sent by (output started at C:\AppServ\www\gabriel\prueba\index.php:13) in C:\AppServ\www\gabriel\prueba\index.php on line 21

  14. Pauser on agosto 11, 2009 21:23

    La línea
    header(“Content-type: text/xml”);
    debe ir al principio del documento PHP ¿está en la línea 21?

  15. David Romero on agosto 15, 2009 8:57

    Hola que tal…,
    espero que esten bien

    tengo un problema
    trato de hacer funcionar el php,
    que facilitaron arriba y no me funcionar
    me tira un error, para la linea 9,
    la cual lleva la siguiente programacion.

    (“Content-type:text/xml”);

    no entiendo porque no me funciona.
    ayuda porfavor!!

    saludos cordiales

  16. Acumulador on septiembre 23, 2009 17:22

    Muchas gracias por tu ayuda pero tengo un problema, me muestra el archivo muy raro no se que debo hacer para que se vea bien. Mira se ve asi:
    exploracion>

    Warning
    : filetype() [
    function.filetype
    ]: Lstat failed for minisave.jpg in
    C:\wamp\www\galeriaFLASH\verMiniaturas.php
    on line
    13

    Warning
    : filesize() [
    function.filesize
    ]: stat failed for minisave.jpg in
    C:\wamp\www\galeriaFLASH\verMiniaturas.php
    on line
    14

    Ademas quisiera preguntarte como hago para exportar el XML
    De antemano muchas gracias.

  17. Acumulador on septiembre 23, 2009 18:46

    Perdon, ya corregi el erro; estaba pasando los parametros malos al filesize. Gracias de verdad

  18. Carlos on octubre 8, 2009 20:53

    Muchas gracias muy útil.

  19. Marce on octubre 29, 2009 23:31

    Hola, Si alguien porfa me puede ayudar. Necesito crear una carpeta en la ruta www y dentro de esta carpeta crear subcarpetas, ya que al momento de dar de alta una carpeta, el nombre debe guardarse en la bd.
    Por su ayuda. Gracias

  20. Tutorial Galeria de fotos XML Flash as2 « Diseño y Action…! on noviembre 13, 2009 3:45

    [...] Como leer los archivos que hay en una carpeta del servidor con PHP. [...]

  21. Luis Angel on noviembre 15, 2009 21:53

    Hola Buenas tardes, anticipo que se muy poco de XMLs y Php, pero me baje yun flash donde se hace un llamado a una rutina asp que arroja un xml con la lista de fotos de un directorio especifico, weno, yo tengo un host pero linux asi que usa php, la pregunta es como integrar esta rutina que explican aki a la galeria que baje, esta es la galeria http://www.tutoriales-flash.com/tutorial.php?id_tuto=29

    Y otra duda, esta rutina que explican donde la pongo?, como transfiere los datos?, a un xml?, directo a flash con una variable de retorno?, como?

    Gracias….

  22. Rodrigo on noviembre 18, 2009 15:13

    Hola, bueno gracias por estos aportes que son de gran ayuda. pues lo digo porque me saco de apuros. gracias…

  23. Emmanuel on diciembre 12, 2009 5:59

    Hola,

    espero que esten muy bien

    tengo un problema trato de hacer que funcione el codigo de php, que facilitaron arriba y no me funciona ya que me marca un error, en la linea 10,

    el error es el sig:

    Warning: Cannot modify header information – headers already sent by (output started at C:\AppServ\www\galeria\index.php:9) in C:\AppServ\www\galeria\index.php on line 10

    en esta linea se encuentra el sig. codigo

    header(“Content-type: text/asp”);

    no entiendo porque no funciona.

    me pueden ayudar porfavor

  24. ANDRÉS on diciembre 20, 2009 23:33

    ME APARECEN MÚLTIPLES SIGNOS DE INTERROGACIÓN. AL PARECER, DEBO INSTALAR UNA APLICACIÓN ADICIONAL PARA LA EJECUCIÓN DE ARCHIVOS PHP, PERO NO SE CUAL.

    GRACIAS POR SU AYUDA.

  25. Francisco on abril 24, 2010 23:47

    Hola a todos,
    después de leer el totorial no se como poner el directorio donde está mi carpeta a explorar. He puesto de todo hasta con las www, pero no muestra las miniaturas. Gracias.

    $dir=”ruta/de/la/carpeta/a/explorar”

  26. Jonathan Eric on junio 11, 2010 4:19

    Hice muchas pruebas y aun no logro entender como debo poner la ruta…
    El raíz de mi servidor se llama “wroot” dentro de este se encuentra otra carpeta, “explorar” y ahí el FLA y otra carpeta mas llamada imágenes (la que quiero utilizar para la galería).

    Te dejo acá mas o menos como estas conformadas las carpetas.

    //wroot
    ….____/Explorar
    ……….________galeria.FLA
    ……….________galeria.html
    ……….________AC_RunActiveContent.js
    ……….________/Imagenes
    ………………….imagen1.jpg
    ………………….imagen2.jpg
    ………………….imagen3.jpg
    ………………….imagen4.jpg
    ………………….imagen5.jpg
    ………………….imagen6.jpg
    ……….________/php
    ………………..____explorar.php

    Prubas:

    /wroot/explorar/imágenes/

    /imagenes/

    http://midominio/explorer/imagenes/

    /explorer/imagenes/

    Ya no se que otra cosa debo hacer para que me levante las imágenes… Me podes dar una mano???

    Muchas gracias

    $dir=”ruta/de/la/carpeta/a/explorar”

  27. mauricio on julio 4, 2010 2:05

    funcionar funciona a la perfeccion, tambien corregido el error de header que lo habia pueto en cualqueir lado, ya enlista todo correctamente porque me olvide de colocar la / al final de la ruta (cosa que me soluciona varias cosas al estar ordenado, sino es un despiole) quedaría algo asi…

    <?php
    header("Content-type: text/xml");
    $dir="../leer-carpeta/";
    $dr=@opendir($dir);
    if(!$dr){
    echo "”;
    exit;
    } else {
    echo “”;
    // recorremos todos los elementos de la carpeta
    while (($archivo = readdir($dr)) !== false) {
    // comprobamos que sean archivos y no otras carpetas
    if(filetype($dir . $archivo)!=”dir”){
    $tam=round(filesize($dir . $archivo)/1024,0);
    echo “”;
    }
    }
    echo “”;
    closedir($dr);
    }
    ?>

    ahora bien… ¿como hago para que esto genere un xml poniendo esos mismos datos?

    encontré algo por ahi que es para un reproductor mp3 sin xml, osea… la xml la genera dinamicamente y quería saber si esto puede servir para hacer algo parecido, si lograra que genere una xml externa al php podría utilisarce para uso general y no solo para una sola cosa

    saludos, espero una pronta respuesta y gracias por el aporte, de verdad es muy util

  28. handblack on enero 13, 2011 22:43

    Hay un pequenio problemita en ese script

    dice:
    if(filetype($dir . $archivo)!=”dir”

    debe decir
    if(filetype($dir .’/’. $archivo)!=”dir”

  29. leonel on noviembre 2, 2011 18:41

    hola amigos quiero hacer una presentacion de imgenes el diseño lo tengo reaizado en flash ahora quisiera qe lAS Imagenes se me cargen desde postgreSQL me podrian ayudar ?….

  30. Ruy on enero 24, 2012 20:43

    Por que no puedo comparar el nombre del archivo con una variable.
    Gracias por la ayuda.
    if ($dirok = opendir($dir))
    {
    $_SESSION['NF']=$_GET['idpro'].$_SESSION['v_usuario'];
    while (false !== ($nomfile = readdir($dirok)))
    {
    if ($nomfile==135306)
    {
    if ($nomfile !=”.” && $nomfile != “..”)
    {
    echo ““.$nomfile.”“.”;
    echo “$_SESSION[NF]“.”;
    }
    }
    }
    closedir($dirok);
    }

Trackback URI | RSS de comentarios

Deja tu comentario

Nombre (requerido)

Email (no se muestra, requerido)

Web

Comentario (requiere moderación)