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!=».» AND $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!

Carlos Dk

Apasionado por la enseñanza y el SEO

26 comentarios en “Leer directorio y mostrar archivos en PHP

  • el 2 junio, 2011 a las 7:41 am
    Permalink

    oye y donde esta la función right?

    Respuesta
  • el 8 agosto, 2011 a las 4:35 am
    Permalink

    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….

    Respuesta
    • el 8 agosto, 2011 a las 8:10 am
      Permalink

      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!

      Respuesta
  • el 7 septiembre, 2011 a las 6:41 pm
    Permalink

    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!

    Respuesta
  • el 14 octubre, 2011 a las 4:58 am
    Permalink

    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

    Respuesta
    • el 14 octubre, 2011 a las 8:01 am
      Permalink

      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!

      Respuesta
  • el 15 mayo, 2012 a las 12:31 am
    Permalink

    excelente articulo, gracias

    Respuesta
  • el 21 junio, 2012 a las 5:34 pm
    Permalink

    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();

    ?>

    Respuesta
  • el 26 octubre, 2012 a las 6:18 pm
    Permalink

    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?

    Respuesta
  • el 26 octubre, 2012 a las 6:27 pm
    Permalink

    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 >" . "";

    Respuesta
  • el 27 octubre, 2012 a las 6:03 pm
    Permalink

    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??

    Respuesta
    • el 28 octubre, 2012 a las 11:58 am
      Permalink

      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!

      Respuesta
  • el 28 octubre, 2012 a las 8:08 pm
    Permalink

    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!

    Respuesta
  • Pingback: Mostrar tamaño de un archivo o fichero en PHP con filesize() - Tutoriales y Videotutoriales en www.vertutoriales.com

  • el 28 octubre, 2012 a las 9:27 pm
    Permalink

    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 🙂

    Respuesta
  • el 16 diciembre, 2012 a las 1:33 am
    Permalink

    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.

    Respuesta
  • el 26 diciembre, 2012 a las 9:39 pm
    Permalink

    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!!!

    Respuesta
    • el 27 diciembre, 2012 a las 9:50 am
      Permalink

      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!

      Respuesta
  • el 3 diciembre, 2018 a las 12:05 pm
    Permalink

    Como aporte. En la línea:
    if($archivo!=”.” OR $archivo!=”..”){…..}

    Se usa para evitar que liste el . y .. que referencia al directorio actual y al padre, y sólo liste documentos en el directorio. Pues bien, no es un OR sino un AND lo que hay que poner en la comparación, o siempre cumplirá la condición y seguirá mostrando el . y el ..

    Respuesta

Deja una respuesta

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

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.