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

41311 Laboratorio de Interfaces de Redes

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

Práctica 4 - PHP básico

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. Scripts sencillos

Todo aquel que tenga cierta experiencia aprendiendo nuevos lenguajes de programación reconocerá el script que sigue:

<html>
<head><title>Primer script</title></head>
<body>

<?php
echo "Hola mundo!"
?>

</body>
</html>

Prúebenlo.

A continuación escriban un script PHP que cree una página con una cuenta de números enteros del 1 al 10 (hecha con algún tipo de bucle).

Nuestro tercer y último script para tomar contacto deberá tener una función que calcule el cuadrado del número que se le pasa. Úsenla para calcular los cuadrados de los números del 1 al 10 del script anterior.

3. Un script menos sencillo

Ahora hagamos algo más interesante 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?

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

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 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 1
Muestren el resultado al profesor de prácticas y expliquen cómo funciona.

4. 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>

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

5. Trabajos opcionales

A. 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

B. Uploads

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.

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