Lectura de los documentos de un directorio con Php

En muchas ocasiones al hacer un proyecto de web se necesita crear un listado de todos los elementos que se encuentran dentro de un directorio. Si estos son pocos no hay mucho problema, simplemente se escribe el código con html y listo. Pero en otras ocasiones pueden ser cientos de documentos e incluso puede ser que el directorio va almacenando más y más archivos conforme pasan los días. Un ejemplo de esto sería una carpeta donde los usuarios suben sus fotos o sus archivos adjuntos.

Afortunadamente para eso, php viene al rescate. Y en realidad es un código muy sencillo.

En un nuevo archivo, dentro de <body> vamos a poner nuestro bloque de php.

<body>
<?php
?>
</body>

Dentro de este, lo primero que vamos a poner es una referencia a la carpeta que vamos a ocupar. En este ejemplo tenemos una que se llama fotos.

$directorio = opendir(“fotos”);

También pudiera ser que queremos leer el directorio en el que se encuentra el documento. En tal caso, el código se escribiría así.

$directorio = opendir(".");




Ya para obtener los elementos que se encuentran dentro, vamos a usar un ciclo que se realizará mientras la función readdir() no regrese un valor false.

while (($archivo = readdir($directorio)) !== false)
{
 echo "Archivo: " . $archivo . "<br/>";
}

En este caso hacemos la evaluación con “!==” y no con “!=”, por si sucediera el caso en que un archivo o un directorio se llamara “false”. Nunca dudemos de la capacidad del usuario para estropear nuestro código.

Finalmente, fuera del ciclo cerramos el uso del directorio.

closedir($dir);

leerdirectorio01




El archivo final quedaría así:

<!doctype html>
<html>
<head>
<meta charset="ISO-8859-1">
<title>Leer Directorio</title>
</head>
<body>
<?php
//Para leer el propio directorio
//$directorio = opendir(".");
$directorio = opendir("fotos");
while (($archivo = readdir($directorio)) !== false)
{
 echo "Archivo: " . $archivo . "<br/>";
}
closedir($directorio);
?>
</body>
</html>

Como realmente es muy sencillo, vamos a poner unas variantes.

Variante 1: Listado con hiperlinks

Sería más útil que además de saber qué archivos se tienen, también se pudieran ver. Por lo tanto, vamos a poner una lista ordenada y envolver a cada nombre con una etiqueta <a>. El gran chiste de esta parte es indicar en el atributo href que se apunte al mismo nombre del archivo, pero dentro de la carpeta fotos.

<h1>Directorio de Fotos</h1>
<?php
//Para leer el propio directorio
//$directorio = opendir(".");
$directorio = opendir("fotos");
print "<ol>";
while (($archivo = readdir($directorio)) !== false)
{
 echo "<li><a href='fotos/".$archivo."'>" . $archivo . "</a></li>";
}
print "</ol>";
closedir($directorio);
?>

leerdirectorio02

En este caso es más notorio ver que además de los nombres de los archivos, pone dos elementos: “.”, que hace una referencia al directorio en cuestión, y “..”, que hace referencia al directorio padre. Antes de hacer las modificaciones que siguen, vale la pena probar estos links.

En el caso de que no deseemos  que aparezcan estas referencias, vamos a poner una condición que evite que se impriman.

Variante 2 Tabla con imágenes

En el caso de que todos los documentos sean imágenes, podríamos hacer que la lista nos de una vista previa de ellas.

<h1>Tabla de Fotos</h1>
<?php
//Para leer el propio directorio
//$directorio = opendir(".");
$directorio = opendir("fotos");
print "<table>";
while (($archivo = readdir($directorio)) !== false)
{
 if($archivo != "." && $archivo != ".." && $archivo != ".DS_Store")
 {
 echo "<tr>";
 echo "<td><a href='fotos/".$archivo."'>" . $archivo . "</a></td><td><img src='fotos/".$archivo."' height='100'/></td>";
 echo "</tr>";
 }
}
print "</table>";
closedir($directorio);
?>

leerdirectorio03

 

 

Be the first to comment

Leave a Reply

Your email address will not be published.


*