Práctica 4 - PHP avanzado

1. Objetivos

En esta práctica veremos cómo hacer cosas más complicadas con PHP pero sin necesidad de usar sesiones o MySQL.

La documentación en línea de PHP (www.php.net) contiene suficiente información para aprender la sintaxis básica del lenguaje y les será de gran ayuda como lugar de consulta sobre las funciones disponibles y su modo de empleo.

2. Introducción

Cómo con HTML no es necesario ningún tipo de editor especial para crear páginas PHP, ya que estos también son simples ficheros ASCII. La única diferencia es que hay que ponerles la extensión adeacuada para que el servidor web entienda que son ficheros PHP que hay que procesar y servir su salida. En la configuración estándar (la nuestra), esto simplemente significa usar la extensión .php.

A diferencia de los ficheros HTML los ficheros PHP no se ven bien si no se accede a través de un servidor web, por lo que acuerdese de iniciar su Apache (use el script que creo al final de la práctica 1) y poner los ficheros dentro de su document_root.

3. Script menos sencillo

Mire el siguiente script:

<?php
$path = "/Homes/elmio/";
$nombredir = "imagenes";

function cuentaficheros($nombredir) {
$numerodefichs=0;
if (is_dir($nombredir)) {
if ($dir = opendir($nombredir)) {
while (($nombrefich=readdir($dir))!=false)
if ((!is_dir($nombredir . "/$nombrefich"))&&($nombrefich{0}!="."))
$numerodefichs++;
closedir($dir);
return $numerodefichs;
}
else return -1;
}
else return -1;
}

?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>script</title>
</head>
<body>
<?php
$pathcompleto = $path . $nombredir;
if (is_dir($pathcompleto)) {
$numfichs=cuentaficheros($pathcompleto);
if ($numfichs>0) {
$alea=rand(1,$numfichs);
$dir=opendir($pathcompleto);
while ($alea>0) {
$nombrefich=readdir($dir);
if (($nombrefich{0}==".")||(is_dir($pathcompleto . "/$nombrefich"))) continue;
$alea--;
}

print "<img src=\"/~daniel/$nombredir/" . $nombrefich . "\" />";
}
}
?>
<p>Contenido de la p&aacute;gina</p>
</body>
</html>

¿Sabría decir lo que hace?

  • Analicen las distintas partes del script
  • Acostúmbrense a consultar la documentación sobre funciones soportadas en PHP
  • Si detectan algún posible error corríjanlo
  • Adáptenlo para que funcione con su servidor Web (tendrán que colocar una carpeta con imágenes, un buen recurso puede ser images.google.com)
  • Modifiquen el script anterior para que la imagen que aparezca tenga un enlace asociado (al hacer click sobre ella) y tenga el atributo ALT no vacío. El URL y el texto del ALT debe depender de la imagen que sea. Para ello creen un fichero de texto donde la primera columna es el nombre del fichero de imagen, la segunda columna es el ALT y el resto de la línea es el URL asociado. Por ejemplo:
logoupna.gif	UPNA	http://www.unavarra.es
logorediris.jpg REDiris http://www.rediris.es
escudopna.png Escudo http://www.pamplona.net

Esto sólo es un ejemplo, adáptenlo a las imágenes que tengan.

Pista: Hay funciones de manejo de ficheros que permiten cargarlos en una variable con mucha comodidad. Pueden emplearlas para estos scripts simples ahora que están aprendiendo

Nota: Las funciones de manejo de ficheros se encuentran en la sección VI.XXXVIII http://www.php.net/manual/es/ref.filesystem.php y las de generación de números aleatorios junto con las funciones matemáticas en la sección VI.LXXII http://www.php.net/manual/es/ref.math.php

Checkpoint 1
Muestren al profesor de prácticas el script y expliquen su funcionamiento.

4. Usando includes para hacer un sistema de banners

A continuación van ha desarrollar un sistema "casero" de banners. Creen un fichero .php con el script anterior y convierta el script en una función que devuelva el código HTML necesario para sacar el banner (imagen con enlace). Cualquier página html que al principio pase a modo PHP (tenga extensión ".php") e incluya (include()) ese fichero puede llamar esa función y obtener un banner.

Prueben a crear ficheros de pruebas en diferentes carpetas y niveles al script a incluir para ver su comportamiento.

Checkpoint 2
Muestren al profesor de prácticas unas cuantas páginas usando este sistema "casero" de banners.

5. Uploads de ficheros en PHP

Creen un formulario y un script de PHP que permita a los usuarios especificar un fichero de su ordenador y subirlo al servidor. El scripts lo guardará en un directorio común para todos los uploads. El sistema debe soportar que se suban varios ficheros con el mismo nombre sin que eso elimine los anteriores (renombre el fichero o añada al principio del fichero algo que no se pueda repetir). Además debe soportar subir ficheros de hasta 3MBytes.

Checkpoint 3
Muestren al profesor de prácticas este script correctamente funcionando y expliquen cómo funciona.

6. Trabajo opcional

Modifique el script de uploads de ficheros para que además apunte en un fichero de texto el nombre del fichero, en nombre con el que se ha guardado, la fecha en la que se subió y la dirección IP del cliente que lo subió. También cree otro script que lea este fichero de texto y saque en una lista los ficheros que se han subido. La lista tiene que estar ordenada por fecha y cada fichero tiene que tener un enlace a un script de descarga. A este script se le pasa el nombre con el que se ha guardado el fichero en uploads, lee el fichero y se lo envía al navegador, así el navegador no conoce donde está el fichero.

Nota: es necesario modificar las cabeceras de la respuesta del script de descaga para poder hacer esto. Consulte la ayuda on-line sobre la función header.

7. Conclusiones

En esta páctica hemos creado nuestros primeros scripts en PHP. Scripts independientes o que procesaban el contenido de formularios. En las siguientes prácticas veremos algunas facilidades más que nos ofrece PHP.

Última modificación: miércoles, 3 de octubre de 2007, 11:10