Si la cosa fuese correlativa, este sería el ejercicio básico 33 de PHP. Pero como me hizo más gracia este ejercicio, me puse con el en un rato libre que he tenido hoy. Próximamente publicaré el 33, pero vamos, tampoco hay prisa, ya que ese ejercicio no es más que la continuación del ejercicio 32 que ya he publicado y la verdad es que me resultan muy aburridas las segundas partes. Por el momento vamos a por el ejercicio número 34 en el que montaremos de manera sencilla una galería de imágenes.
El ejercicio a desarrollar hoy será algo como que vamos a hacer una página Web que contenga las fotografías de un viaje para mostrárselo a quien nos venga en gana. Nuestro programa debe escanear un directorio que contiene fotografías. Va a generar dinámicamente una página Web que las muestre como si tratase una galería de fotos.
Notas: Hay que tener en cuenta los errores que se puedan producir por no existir el directorio, no haber imágenes, etc… Las extensiones de archivo permitidas son: ‘gif’, ‘jpg’, ‘jpeg’, ‘tif’, ‘tiff’, ‘bmp’, ‘png’
Funciones que se pueden utilizar: file_exists, opendir, readdir, pathinfo, in_array, aun que yo no utilizo todas ellas, funciona perfectamente. Para compensarlo añado una función para generar una estructura de directorios.
Un ejemplo de lo que se consigue con el código que a continuación dejaré se puede ver haciendo click aquí. Una vez explicado el asunto del ejercicio, vamos al turrón del mismo.
El código para la creación de nuestra galería de imágenes con PHP:
<?php /** * Función que muestra la estructura de directorios tomando como referencia * el directorio que se le pasa como parámetro */ function obtener_estructura_directorios($ruta){ // Se comprueba que realmente sea la ruta de un directorio if (is_dir($ruta)){ // Abre el directorio que pasamos como parámetro $gestor = opendir($ruta); //Abrimos una lista echo "<ul>"; // Recorre todos los elementos del directorio while ($archivo = readdir($gestor)) { $ruta_completa = $ruta . "/" . $archivo; // Se muestran todos los archivos y carpetas excepto "." y ".." if ($archivo != "." && $archivo != "..") { // Si es un directorio se recorre recursivamente if (is_dir($ruta_completa)) { echo "<li>" . $archivo . "</li>"; obtener_estructura_directorios($ruta_completa); } else { // En caso de que no sea un directorio es un archivo echo "<li>" . $archivo . "</li>"; } } } // Cierra el gestor de directorios closedir($gestor); echo "</ul>"; } else { echo "No es una ruta de directorio valida<br/>"; } } /** * Función que muestra las imagenes que hay en la ruta pasada como parametro */ function mostrar_imagenes($ruta){ echo "<h1>...en el directorio ".pathinfo($ruta,PATHINFO_BASENAME)."...</h1><br>"; $contador=0; // Se comprueba que realmente sea la ruta de un directorio if (is_dir($ruta)){ // Abre un gestor de directorios para la ruta indicada $gestor = opendir($ruta); // Recorre todos los archivos del directorio while (($archivo = readdir($gestor)) !== false) { // Solo buscamos archivos sin entrar en subdirectorios if (is_file($ruta."/".$archivo)) { if (preg_match( "/.gif$/", $archivo) || preg_match("/.jpg$/", $archivo) || preg_match("/.png$/", $archivo) || preg_match("/.jpeg$/",$archivo) || preg_match ("/.tif$/",$archivo) || preg_match ("/.tiff$/",$archivo) || preg_match("/.bmp$/",$archivo)){ //Imprimimos la imagen con un ancho de 200px echo "<img src='".$ruta."/".$archivo."' width='200px' alt='".$archivo."' title='".$archivo."'> "; //contador de imágenes $contador++; } } } echo "<br> <h1>... encontramos ".$contador." imágenes</b></h1>"; // Cierra el gestor de directorios closedir($gestor); } else { echo "No es una ruta de directorio valida<br/>"; } } ?> <html> <head> <title>Ejercicio 34</title> <meta charset="UTF-8"> </head> <body> <div> <h2><b>Estructura de directorios</b></h2> <!--llamamos a la funcion obtener_estructura_directorios del directorio actual--> <?php obtener_estructura_directorios("./"); ?> </div> <div> <h2><b>Imagenes </b></h2> <!--llamamos a la función mostrar imagenes en el directorio img--> <?php mostrar_imagenes("img"); ?> </div> <h6>Las imágenes TIF y TIFF no se visualizan en el navegador. Se puede usar un plugin como <a href="http://www.alternatiff.com" title="AlternativeTiff">alternativetif</a><br> para poder verlas en el navegador</h6> </body> </html>
Y con esto doy por finalizado el este post. En el se ha podido ver hemos creado una galería de imágenes bastante funcional. Todo de manera fácil y sencilla con PHP y un poquito de HTML. Próximamente iré publicando más posts sobre este mundillo del PHP.