Leer directorio y mostrar archivos en PHP

Bienvenid@s a ver tutoriales.com, en esta ocasión os traigo un código PHP para listar los archivos (ficheros) de un directorio.

Como vereis, es muy simple de utilizar y de entender, este código es utilizable por ejemplo para un gestor de archivos o imagenes. Recogiendo las imagenes de la carpeta y poniendo la opción de eliminar o cualquier cosa que se os ocurra.

En el ejemplo, solo vamos a listar todas las imagenes jpg que existan dentro del directorio que seleccionemos.

Sin más preambulos, os dejo el código y lo comentamos:

<?
//Asignamos la ruta a la variable path
$path=”./direccion/”;
//asignamos a $directorio el objeto dir creado con la ruta
$directorio=dir($path);

//y ahora lo vamos leyendo hasta el final
while ($archivo = $directorio->read())
{
//
if($archivo!=”.” OR $archivo!=”..”)
//ponemos el nombre de archivo a minuscula y recojemos solo los tres caracteres por la izquierda
//para saber la extensión
if (strtolower(substr($archivo, -3) == “jpg”))
{
//si es jpg,lo mostramos por pantalla
echo “$archivo <br>”;
}
}
}
//descargo el objeto
$directorio->close();
?>

Pues poco más que explicar, espero que este pequeño código os ayude como a mí para el gestor de imagenes.

Un saludo!

Te puede interesar:

24 comentarios

  • priscila commented on 28 febrero, 2011 Reply

    Excelente ayuda! Gracias

  • Javier commented on 2 junio, 2011 Reply

    oye y donde esta la función right?

  • Miguel commented on 8 agosto, 2011 Reply

    Saludos,

    Una pregunta como muestro eso en un html???
    Estoy empezando y quisiera ayuda.

    El objetivo que tengo es:

    Tengo una carpeta en donde existen varios PDF, y un html en donde quiero que se muestre el listado de archivos y se puedan descargar….

    • VideoTutoriales commented on 8 agosto, 2011 Reply

      Pues no conlleva mucho cambio en el código expuesto, lo primero sería cambiar el “jpg” por “pdf” para que muestre solamente los pdf, y para la descarga solo sería poner un enlace hacia estos, es decir, deberás de cambiar la linea:
      echo “$archivo “;
      por esta otra:
      echo ”.$archivo.”;

      Con ese código debe de ser suficiente.

      Ya me cuentas, un saludo!

  • VideoTutoriales commented on 7 septiembre, 2011 Reply

    He modificado una parte del código ya que como preguntaban en un comentario la función right no la tiene php, así que la manera sería utilizar substr($archivo, -3)

    Así se simula la función 😉

    Un saludo!

  • roni commented on 14 octubre, 2011 Reply

    a mi me da error en la linea if strtolower (substr($archivo, -3) != “jpg”))
    y al final un corchete cerrado tambien lo lee como error

    • VideoTutoriales commented on 14 octubre, 2011 Reply

      Mira que quede como esto:

      if (strtolower(substr($archivo, -3) == “jpg”))

      Lo del corchete no sé cual es, si quieres pega el código y lo vemos.

      Un saludo!

  • Villa Gesell commented on 15 mayo, 2012 Reply

    excelente articulo, gracias

  • miguel commented on 21 junio, 2012 Reply

    oye tengo nun inconveniente acerca de el tema de descargar pdf … no me descargar uiero que me muetsre el listado de los pdf que tengo en la carpeta del directorio pero no me descargar cambiar la funcion con esta :
    Pues no conlleva mucho cambio en el código expuesto, lo primero sería cambiar el “jpg” por “pdf” para que muestre solamente los pdf, y para la descarga solo sería poner un enlace hacia estos, es decir, deberás de cambiar la linea:
    echo “$archivo “;
    por esta otra:
    echo ‘‘.$archivo.’‘; esta es la linea que no me funciona
    tienes una solucion a esto mira te dejo mi codigo
    read())
    {
    //
    if($archivo!=”.” OR $archivo!=”..”)
    //ponemos el nombre de archivo a minuscula y recojemos solo los tres caracteres por la izquierda
    //para saber la extensión
    if (strtolower(substr($archivo, -3) == “pdf”))
    {
    //si es jpg,lo mostramos por pantalla
    echo “.$archivo. “;

    }
    }

    //descargo el objeto
    $directorio->close();

    ?>

  • Miguel commented on 26 octubre, 2012 Reply

    Buenas al listar los archivos me salen caracteres extraños en vez de tildes y eñes, tengo los caracteres en utf 8, que puedo hacer?

    • VideoTutoriales commented on 26 octubre, 2012 Reply

      Cambia si puedes por una codificación genérica.

  • peter commented on 26 octubre, 2012 Reply

    Bueno para los que deseen mostrar y al mismo tiempo descargar el archivo el código sería:

    en lugar de:
    echo “$archivo ”;

    coloquen:
    echo "< a href='directorio/$archivo' rel="nofollow" >$archivo< /a >" . "";

  • jorge commented on 27 octubre, 2012 Reply

    una pregunta, todo me sale bien, pero si yo quisiera agregarle la funcion de ademas de mostrar el archivo y descargarlo, tambien que se muestre el tamaño del archivo y la ultima vez que fue modificado??? estoy tratando con:

    read())
    {
    //
    if($archivo!=”.” OR $archivo!=”..”)
    //ponemos el nombre de archivo a minuscula y recojemos solo los tres caracteres por la izquierda
    //para saber la extensión
    if (strtolower(substr($archivo, -3) == “jpg”))
    {
    //funcion para obtener tamaño
    function tamano_archivo($peso , $decimales = 2 ) {
    $clase = array(” Bytes”, ” KB”, ” MB”, ” GB”, ” TB”);
    return round($peso/pow(1024,($i = floor(log($peso, 1024)))),$decimales ).$clase[$i];
    }

    $peso_archivo = filesize($archivo); // obtenemos su peso en bytes

    //si es jpg,lo mostramos por pantalla
    echo “$archivo ” . tamano_archivo($peso_archivo) .””;
    }
    }
    //descargo el objeto
    $directorio->close();
    ?>

    me muestra el nombre del archivo y me da opción a descargarlo, pero no me muestra el tamaño me sale error:

    Warning: filesize() [function.filesize]: stat failed for nombre_del_archivo.jpg in /home/public_html/web/noticias/index.php on line 128

    Warning: Division by zero in /home/public_html/web/noticias/index.php on line 125
    nombre_del_archivo.jpg 0

    Quien me puede ayudar??

    • VideoTutoriales commented on 28 octubre, 2012 Reply

      A la función tendrás que pasarle la ruta completa, seguramente está intentando abrir un fichero que no encuentra y de paso pues está dividiendo por 0, ya que al no tener “peso” este es 0.

      Pásale la ruta completa y nos cuentas.

      Un saludo!

  • jorge commented on 28 octubre, 2012 Reply

    Ya lo intente y me bota error, dime como lo harías tu? mostrar un listado de los archivos que se encuentran en esa carpeta y ademas cuanto pesa cada archivo??? se los agradecería bastante!

  • VideoTutoriales commented on 28 octubre, 2012 Reply

    Buenas jorge, sin revisar el código te paso un artículo que acabo de escribir para solventar el problema:
    http://www.vertutoriales.com/index.php/mostrar-tamano-de-un-archivo-o-fichero-en-php-con-filesize/

    La función que tienes en realidad lo que hace es “manipular” el número para devolver un valor formateado, eso se puede hacer de muchas maneras, pero lo importante que necesitas está en el artículo de mostrar tamaño de un archivo que te anexaba más arriba.

    Espero que te sirva! si tienes más dudas compártelas 🙂

  • Invitado commented on 16 diciembre, 2012 Reply

    Me gustaria saber como puedo hacer si quiero que me indexe no solo los directorios de una carpeta, sino tambien los del contenido de las carpetas que existan dentro de este, las de dentro de estas y asi sucesivamente, lo que seria enlistar todo el contenido, un saludo.

  • Gaby commented on 26 diciembre, 2012 Reply

    Hola estoy tratado de mostrar unos archivos pdf que tengo en un directorio de mi servidor, pero cuando cargo la pag me pone la pantalla en gris y dice “SE HA PRODUCIDO UN ERROR AL CARGAR EL DOCUMENTO PDF”. Y el codigo que tengo es el siguiente:

    $dir = “pdf/”.$idpac.”/”.$visita;
    $dh = opendir($dir);
    while (false !== ($nombre_archivo = readdir($dh))) {
    $archivos[] = $nombre_archivo;
    }

    $total_archivos = count($archivos);
    $total = $total_archivos-2;
    //TERMINA DE CONTAR
    //echo(“UN TOTAL DE PDF´S ” + $total);
    $directorio=dir($dir);
    while ($archivo = $directorio->read())
    {
    //
    if($archivo!=”.” OR $archivo!=”..”){
    if (strtolower(substr($archivo, -3) == “pdf”))
    {//si es jpg,lo mostramos por pantalla
    echo “$archivo “;
    }
    }
    }

    //descargo el objeto
    $directorio->close();
    ?>

    espero me puedan ayudar, gracias y saludo!!!

    • VideoTutoriales commented on 27 diciembre, 2012 Reply

      Prueba a pasarle la ruta $dir completa a mano, por ejemplo $dir =”./pdf/10/” o el directorio que sepas que ya existe a ver que te hace. En principio debería de mostrar el directorio, pero si te está dando algún problema puede ser por la ruta.

      El error de que no puede mostrar el PDF no tiene mucho sentido, ya que lo único que estás pasando es un filtro de extensiones. Así que no debería de cargar el PDF.

      Saludos!

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *