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!
Comments
Excelente ayuda! Gracias
De nada 🙂
oye y donde esta la función right?
¿la función right para qué?
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….
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!
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!
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
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!
excelente articulo, gracias
Nada 🙂
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();
?>
Ponla sin las comillas:
echo $archivo;
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?
Cambia si puedes por una codificación genérica.
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 >" . "";
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??
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!
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!
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 🙂
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.
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!!!
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!
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 ..
mmmm gracias! 🙂