Depto. Automática y computación
Universidad Pública de Navarra
Daniel Morató
daniel.morato@unavarra.es

Laboratorio de Interfaces de Redes

3º Ingeniero Técnico en Informática de Gestión

Práctica 6 - Scripts básicos y configuración de PHP

1. Objetivos

En esta práctica crearemos scripts de PHP simples para procesar formularios u otras tareas. También veremos cómo configurar las diferentes opciones del módulo de PHP.

La documentación en línea de PHP 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. Un script sencillo

Empecemos por algo sencillo (pero no trivial) como el siguiente script en PHP:

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

?>
<html><head><title>Pagina</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
</body>
</html>

¿Sabría decir lo que hace? Analicen las distintas partes del script. 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).

Modifiquen el script anterior para que la imagen que aparezca tenga un enlace asociado (al hacer click sobre ella). El URL debe depende de la imagen que sea. Para ello creen un fichero de texto donde la primera columna es el nombre del fichero de imagen y el resto de la línea es el URL asociado. Por ejemplo:

logoupna.gif http://www.unavarra.es
logorediris.jpg http://www.rediris.es
escudopna.png http://www.pamplona.net

A continuación creen un fichero .php con el script anterior que han creado de forma que cualquier página html que al principio pase a modo PHP e incluya (include()) ese fichero contenga un banner aleatorio.

Nota: Las funciones de manejo de ficheros se encuentran en la sección IV.XXX
http://www.tlm.unavarra.es/~daniel/docencia/lir/lir03_04/manuales/php/ref.filesystem.html
y las de generación de números aleatorios junto con las funciones matemáticas en la sección IV.LI
http://www.tlm.unavarra.es/~daniel/docencia/lir/lir03_04/manuales/php/ref.math.html

Checkpoint
Muestren el resultado al profesor de prácticas y expliquen cómo funciona.

3. Procesado de formularios en PHP

Creen la siguiente página HTML:

<html>
 <head>
  <title>PHP Test</title>
 </head>
 Formulario:
 <p>
 
<form action="scriptqueloprocesa.php" method="POST">
 Nombre: <input type="text" name="name">
 Edad: <input type="text" name="age">
 <input type="submit">
</form> 

</body>
</html>

Y el siguiente script de PHP para procesar el formulario anterior:

<html>
 <head>
  <title>PHP Test</title>
 </head>
 
Hola <?php echo $_POST["name"]; ?>.
Ya tienes <?php echo $_POST["age"]; ?> a&ntilde;os. 
<p>
<?php
    if ($_POST["age"]>21)
	print "<p>Te est&aacute;s haciendo viejo";
    else
	print "<p>&iexcl;Disfruta, a&uacute;n eres joven!";
?>
</body>
</html>

Adáptenlo para que les funcione. A continuación creen un script en PHP que procese el formulario que crearon en la práctica sobre HTML. El script debe recoger los datos del nuevo miembro de un grupo de prácticas y añadirlos a un fichero de texto. Si el usuario no ha introducido todos los campos que son imprescindibles se le devolverá una página con un mensaje de error.

Checkpoint
Muestren el script al profesor de prácticas y expliquen cómo funciona.

4. Configuración de PHP

El módulo de PHP tiene un fichero de configuración que normalmente se llama php.ini. Dentro de este fichero se pueden cambiar ciertos parámetros del funcionamiento de PHP. Cuando PHP es un módulo de Apache este fichero solo se lee cuando se lanza el servidor por lo que todos los cambios requieren relanzarlo para que surtan efecto.

Algunos parámetros de configuración de PHP se pueden alterar desde el fichero de configuración del Apache, o desde un fichero .htaccess e incluso algunos desde los propios scripts. Puede leer al respecto en la documentación de PHP:
http://www.tlm.unavarra.es/~daniel/docencia/lir/lir03_04/manuales/php/configuration.changes.html

Revise el tipo de parámetros que puede configurar. ¿Cómo cambiaría el servidor de SMTP por defecto que emplea la función mail()?

Podemos ver las opciones con las que está compilado el módulo de PHP mediante la función phpinfo(). Cree un script PHP para mostrar el resultado de esta función y revise la información que el mismo ofrece.
http://www.tlm.unavarra.es/~daniel/docencia/lir/lir03_04/manuales/php/function.phpinfo.html

Una función de PHP con la que podemos cambiar parámetros del mismo es ini_set() :
http://www.tlm.unavarra.es/~daniel/docencia/lir/lir03_04/manuales/php/function.ini-set.html

5. Trabajo opcional

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 y apuntará en un fichero de texto el nombre del fichero, la fecha en la que se subió y la dirección IP del cliente que lo subió. El sistema debe soportar que se suban varios ficheros con el mismo nombre sin que eso elimine los anteriores. Además debe soportar subir ficheros de hasta 3MBytes.

Si lo completan muéstrenselo al profesor de prácticas y puede que obtengan un checkpoint extra.

6. 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, como el acceso sencillo a una base de datos (MySQL en nuestro caso) o la gestión de sesiones.


Depto. Automática y computación
Universidad Pública de Navarra
Daniel Morató
daniel.morato@unavarra.es