Conceptos Avanzados del lenguaje PHP


Autor: F. Javier García Castellano
Web: http://decsai.ugr.es/~fjgc, Mail: fjgc@decsai.ugr.es
IndiceInicioPHP

(C) GeNeura Team
Web: http://geneura.ugr.es, Mail: todos@geneura.ugr.es

1.- Clases y objetos

Una clase es una colección de variables y de funciones que acceden a esas variables. Una clase se define con la siguiente sintaxis: La sintaxis para definir una clase es la siguiente:

<?php
 class Carrito {
     var $items;  // Artículos en nuestro carrito de la compra
    
     // Añadir $num artículos de tipo $artnr al carro
     function add_articulo ($artnr, $num) {
         $this->items[$artnr] += $num;
     }
    
     // Sacar $num artículos del tipo $artnr del carro
     function remove_articulo ($artnr, $num) {
         if ($this->items[$artnr] > $num) {
             $this->items[$artnr] -= $num;
             return true;
         } else {
             return false;
         }   
     }
 }
 ?>

El ejemplo define una clase llamada Carrito que consiste en un array asociativo de artículos de un carrito de la compra y dos funciones para añadir y sacar ítems del carro. Las clases son tipos, es decir, son plantillas para variables. Con el operador new crea una instancia de la clase Carrito.

  $carro = new Carrito;
  $carro->add_articulo("Plancha Filips 202", 1);

En el anterior ejemplo creamos un objeto carro de la clase carrito a la que le añadimos 1 artículo.

Entre funciones de una clase, la variable $this hace referencia al propio objeto. Tienes que usar $this->loquesea para acceder a una variable o función llamada loquesea del objeto actual.

PHP soporta herencia, las clases extendidas o derivadas tienen todas las variables y funciones de la clase base y lo que les añadas al extender la definición. La herencia múltiple no está soportada. La herencia en PHP se realiza con extends.

Los constructores de cada clase se llaman automáticamente por el operador new . El constructor de cada clase debe tomar el mismo nombre de la clase y cuando se trata de una clase derivada, hay que tener cuidado porque sólo se llama automáticamente al constructor de dicha clase pero no al constructor de la clase padre.


class Carrito_con_amo extends Carrito {
     var $amo;
   
     function fijar_amo ($nombre) {
         $this->amo = $nombre;
     }
 }

El ejemplo anterior define una clase Carrito_con_amo que tiene todas las variables y funciones de Carrito, y además añade la variable $amo y una función adicional fijar_amo(). Un carro con amo se crea de la forma habitual y, una vez hecho, puedes acceder al propietario del carro. En los carros con nombre también puedes acceder a las funciones normales del carro:

 $miCarro = new Carrito_con_amo;     // Creamos un carro con dueño
 $miCarro ->fijar_amo ("Richal");    // Nombramos el carro
 print $miCarro->amo;                // Imprimimos el nombre del propietario
 $miCarro->add_articulo ("Monitor Soni GD450", 1); // Funcionalidad heredada de Carrito

Los constructores también pueden recibir parámetros y estos parámetros pueden ser opcionales, lo que los hace más útiles.

 class Otro_Carrito extends Carrito {
     function Otro_carrito ($articulo = "Boli Byc Azul", $cantidad = 1) {
         $this->add_articulo ($articulo, $cantidad);
     }
 }
  
 // Compramos las mismas cosas aburridas de siempre
 $default_cart   = new Otro_Carrito;
  
 // Compramos las cosas interesantes
 $different_cart = new Otro_Carrito ("AzlonXP 3000+", 17);

2-. Manejo de Errores

En PHP hay cuatro tipos de errores y avisos:

Los 4 números de la izquierda son sumados para definir un nivel de aviso de error. El nivel de error por defecto es 7 (1+2+4), pero esto puede ser modificado en tiempo de ejecución usando la función error_reporting ().

Cualquier expresión en PHP se puede llamar con la "@" al principio que invocará a la función de manejo de errores, y el error podremos encontrarlo en la variable $php_errormsg.

Error en un documento PHP

<html>
<head> <title>Ejemplo error </title></head>
<body>
 <h1> Ejemplo de error en PHP </h1>

<?php
        error_reporting(0);
        $a=5/0;
        print "<p>La siguiente variable no existe: $zx \n";
?>
</body>
</html>

3-. Creación de Imágenes

PHP tiene una funcionalidad muy potente: la creación de imágenes al vuelo (aunque también puede generar, por ejemplo, documentos PDF). Esto puede ser útil para crear gráficas partir de datos y generar cualquier gráfico dinámicamente.Para esto, PHP utiliza la librería GD de la empresa Boutell.com, por lo que es necesario tenerla instalada en el sistema (se puede ver si está instalada viendo el resultado generado por phpinfo() ). A partir de la versión 1.6 no se puede trabajar con imágenes GIF (por problema de patentes) y desde la 1.8 se puede trabajar con jpeg.

El ejemplo más sencillo es abrir una imagen que esté en un fichero de disco y mostrarla tal cual.

<?php
#En la cabecera decimos no es HTML lo que devolvemos, si no una imagen jpeg
Header("Content-type: image/jpeg");

#Creamos la imagen a partir de un fichero
$im=imagencreatefromjpeg("php.jpg");

#La mostramos
ImageJPEG($im);


#Liberamos la memoria ocupada
ImageDestroy($im);
?>

Si en el anterior ejemplo cambiamos jpeg por png nos servirá para leer imágenes en formato png. Con la función imagecreatefromjpeg creamos una imagen a partir de un fichero jpeg.Con imagejpeg devolvemos al navegador una imagen jpeg.

En el siguiente ejemplo será llamado desde una página con una línea como esta: <img src="boton.php?texto=hola"> El siguiente script de arriba toma la cadena "text" la situa sobre la imagen base, en este caso es "images/button1.jpg" y muestra la imagen resultante. Esta es una forma muy conveniente para evitar tener que dibujar un nuevo botón cada vez que quiera cambiar el texto del mismo. Con este método los botones son generados dinámicamente.

Un ejemplo de esta característica se muestra en el siguiente ejemplo:

<?php
     #Decimos que es una imagen
     Header("Content-type: image/jpeg");

     #Creamos la imagen a partir de un fichero
     $im = imagecreatefromjpeg("images/button1.jpg");

     #Creamos un color blanco (se usan valores RGB)
     $blanco = ImageColorAllocate($im, 255, 255, 255);

     #Tomamos el sitio por donde vamos a empezar a escribir el texto
     $px = (imagesx($im)-7.5*strlen($texto))/2;

     #Escribimos el texto
     ImageString($im,10,$px,9,$texto,$blanco);

     #Creamos la imagen 
     ImageJPEG($im);

     #Liberamos la memoria ocupada
     ImageDestroy($im);
?>

Con este método puedes generar la imagen adecuada dinámicamente. El parámetro texto nos permitirá poner el texto que deseemos en la imagen que vamos a generar.

4.- Autentificación de un Usuario con PHP

El protocolo HTTP proporciona un mecanismo de autentificación de clientes. Lo más común es que se presente una cajita con dos campos: uno para el login y el otro para la clave. PHP tiene la función Header(). Esta función debe ser llamada antes de que se haya producido ninguna salida del fichero html que se está generando. Esta función envía una línea a la cabecera de dicho HTML. Y con esta función es posible enviar un mensaje de "Autentificación Requerida " que forzará al usuario a completar los datos solicitados.

El funcionamiento es muy sencillo. Una vez que el usuario ha completado los datos que se le piden, se fuerza una nueva llamada al script con las variables $PHP_AUTH_USER, $PHP_AUTH_PW y $PHP_AUTH_TYPE que contendrán el nombre del usuario, el pasword y el tipo de autentificación.

Autentificación de usuarios

<?php

if (!isset($_SERVER['PHP_AUTH_USER'])) {
    header("WWW-Authenticate: Basic realm=\"flanagan.ugr.es\"");
    header("HTTP/1.0 401 Unauthorized");
  }
?>

<html>
<head> <title>Ejemplo 20 </title></head>
<body>
 <h1> Ejemplo de PHP </h1>

<?php

  if (!isset($_SERVER['PHP_AUTH_USER'])) {
     echo "Texto a enviar si pulsa el botón Cancelar\n";   
     exit;
  } else {
    echo "<p>Hola ".$_SERVER['PHP_AUTH_USER'].".</p>";
    echo "<p>Has introducido <b>".$_SERVER['PHP_AUTH_PW']." </b>como tu contraseña.

"; } ?> </body> </html>

Hay que tener mucho cuidado con el orden en el que se envian los diferentes tipos de cabeceras. La cabecera de WWW-authenticate, debe ir siempre delante de la del tipo HTTP/1.0 401.

Es una especie de cookie que se mantiene mientras el usuario no apague el navegador. Además el usuario debe ser consciente de que, desde el momento que ha insertado su login y su clave, ha sido identificado y que todo lo que haga puede ser registrado.

5.- Cookies (Galletitas)

Una cookie no es más que una variable que se registras dentro del navegador del internauta.Si el navegador tiene configurado que se rechacen las cookies o que se pregunte si se permite aceptarlas, pueden ser controladas. En cambio, por defecto, los navegadores dejan que las cookies se creen sin que el usuario sea consciente de ello.

Para PHP las cookies son fáciles de utilizar. Para esto se utiliza la función setcookie() y al igual que la función anterior, Header, tiene que ser invocada antes de producir ninguna salida.

La función posee el siguiente formato:

  int setcookie(string name, string value, int expire, string path, string domain, int secure);

Esta función define la cookie que se va a enviar. Todos los argumentos son opcionales a excepción del nombre, Si sólo se especifica el parámetro name, la cookie con ese nombre se borrará del cliente remoto. También puede sustituir cualquier parámetro por una cadena de texto vacía ("") y saltar así ese parámetro. Los parámetros expire y secure son números enteros y no se pueden saltar con una cadena de texto vacía. En su lugar utilice un cero (0). El parámetro expire es un entero de tiempo.El parámetro secure indica que la cookie se debe transmitir única y exclusivamente sobre una conexión segura HTTPS. Todos los parámetros excepto name son opcionales. Si sólo se especifica el parámetro name, la cookie con ese nombre se borrarára del cliente remoto. Los parámetros path y domain sirven para distinguir nuestras cookies de las de otros sitios web.

 setcookie("TestCookie","Test Value");
 setcookie("TestCookie",$value,time()+3600);  /* expira en 1 hora */
 setcookie("TestCookie",$value,time()+3600,"/~rasmus/",".utoronto.ca",1);

Para poder ver el contenido de un cookie, podemos utilizar:

 print $TestCookie;
 print $HTTP_COOKIE_VARS["TestCookie"];

Se pueden utilizar vectores de cookies.

 setcookie( "cookie[three]", "cookiethree" );
 setcookie( "cookie[two]", "cookietwo" );
 setcookie( "cookie[one]", "cookieone" );
 if ( isset( $cookie ) ) {
    while( list( $name, $value ) = each( $cookie ) ) {
           echo "$name == $value
\n"; } }

Fallos habituales: Las cookies no se hacen visibles hasta la siguiente carga de una página para la que la cookie deba estar visible. Las llamadas múltiples a setcookie() en el mismo script se ejecutarán en orden inverso. Si estas intentando borrar una cookie antes de insertar otra, se debe situar la llamada de inserción antes de la de borrado.

6.- Utilización de ficheros locales y remotos

6.1.- Utilización de ficheros

La utilización de ficheros en PHP es muy similar a como se hace en C. Tenemos fopen para abrir un fichero, donde se indica el nombre del fichero y el modo de apertura y nos devuelve el descriptor del fichero. Con feof miramos si estamos al final de un fichero. Con fclose cerramos un fichero. Y con fputs y fgets escribimos o leemos, respectivamente, una línead de un fichero.

Ejemplo de escritura en un fichero

<? 

//Abrimos el fichero en modo de escritura 
$DescriptorFichero = fopen("fichero_prueba.txt","w"); 

//Escribimos una línea 
$string1 = "Esta es la primera línea de texto\r\n"; 
fputs($DescriptorFichero,$string1); 

//Escribimos otra
$string2 = "Y esta es la segunda\r\n"; 
fputs($DescriptorFichero,$string2); 

//Cerramos el fichero 
fclose($DescriptorFichero); 

?> 

Ejemplo de lectura de un fichero


<? 
//Abrimos el fichero en modo lectura 
$DescriptorFichero = fopen("fichero_prueba.txt","r"); 

//Repetimos hasta que no lleguemos al final del fichero 
while(!feof($DescriptorFichero)){ 
    //Leemos una línea de como max 4096 caracteres (4KB), que será menos si hay un retorno de carro
    $buffer = fgets($DescriptorFichero,4096); 

    //Escribimos la línea 
    echo $buffer."<BR>"; 
} 

?>

También disponemos de fwrite y fread para escribir o leer, respectivamente, un buffer de un fichero.

6.2.- Utilización de ficheros remotos

PHP permite la utilización de ficheros remotos para realizar algún tipo de lectura de ellos. En el caso de querer realizar algún tipo de escritura, se debe hacer a través de un servidor ftp. Un ejemplo de ambas cosas se muestra a continuación.

Leyendo un fichero remoto

<?php

   #Abrimos el fichero remoto
   $archivo = fopen("http://www.php.net/", "r");
   if (!$archivo) {
     echo "<p>No se pudo abrir el archivo remoto.\n";
     exit;
   }

   #Mostramos el fichero línea a línea
   $i=0;
   while (!feof($archivo)) 
   {
     $linea = fgets($archivo, 1024);
     print "LINEA $i: $linea <BR>";
     $i++;
   }

   #Cerramos el fichero 
   fclose($archivo);
?>

También se puede escribir a archivos en un FTP siempre que se conecte como un usuario con los correctos derechos de acceso, y el archivo no exista ya.Para conectar como un usuario distinto de 'anonymous', se necesita especificar el nombre de usuario (y posiblemente contraseña) dentro de la URL, tales como 'ftp://usuario:clave@ftp.ejemplo.com/camino/a/archivo'.

Escribiendo en un fichero remoto usando ftp

<?php
   $file = fopen("ftp://ftp.php.net/incoming/outputfile", "w");
   if (!$file) {
     echo "<p>Unable to open remote file for writing.\n";
     exit;
   }

   /* Escribimos el fichero. */
   fputs($file, "$HTTP_USER_AGENT\n");

   /*Lo cerramos*/
   fclose($file);
?>

7-. Subida de ficheros usando HTTP

La solución ideal para intercambios de ficheros es el protocolo FTP, pero los internautas a lo que están acostumbrados es a utilizar la web. Con HTTP Upload podemos lograr que el cliente envie ficheros locales de su computador pulsando un botón.

Lo primero que hay que hacer es crear una página HTML con un formulario con el cual enviaremos el fichero:

Formulario HTML para enviar ficheros

<html>
<head> <title>Ejemplo 21</title></head>
<body>
 <h1> Ejemplo de Formulario 3 </h1>
<p>

<form enctype="multipart/form-data" action="ej22.php" method="post">
     Fichero: <input type="file" name="fichero_usuario">
     <br> 
     <input type="submit" value="Enviar Fichero">
</form>

</body>
</html>

Debemos destacar de este formulario HTML la posibilidad de restringir el tamaño del fichero que se va a enviar. Como HTTP no está pensado para estos menesteres (al contrario de FTP) no es aconsejable usarlo para ficheros grandes.

Dentro el PHP que va a procesar el anterior formulario, se encarga de ir recibiendo el fichero y guardarlo en el disco duro . Es importante tener en cuenta que el usuario que está guardando el fichero es aquel con el que se ejecuta el servidor web (normalmente nobody), por lo que deberá tener permisos para escribir en el direcgtorio y ficheros que se utilicen.

En el programa PHP que recibe este fichero se van a definir una serie de variables:

Script PHP para recibir ficheros

<html>
<head> <title>Ejemplo 22</title></head>
<body>
 <h1> Ejemplo de Formulario 3 </h1>
<p>

<?php

   #Mostramos información del fichero recibido
   print "El fichero recibido está $fichero_usuario <br>\n";
   print "El nombre del fichero recibido es $fichero_usuario_name <br>\n";
   print "El tamaño del fichero recibido es $fichero_usuario_size <br>\n";
   print "El tipo MIME del fichero recibido es $fichero_usuario_type <br>\n";
   

   #mostramos el contenido
   print "El contenido del fichero recibido es: <br>\n";

   #Abrimos el fichero remoto
   $archivo = fopen("$fichero_usuario", "r");
   if (!$archivo) {
     echo "<p>No se pudo abrir el archivo remoto.\n";
     exit;
   }

   #Mostramos el fichero línea a línea
   $i=0;
   while (!feof($archivo)) 
   {
     $linea = fgets($archivo, 1024);
     print "LINEA $i: $linea <BR>";
     $i++;
   }

   #Cerramos el fichero 
   fclose($archivo);
?>
</body>
</html>

8-. Manejo de conexiones

En PHP las conexiones que se mantinen pueden tener tres estados, Normal (0), Aborted (1) y Timeout (2).

En un script normal, el estado es NORMAL, cuando el cliente desconecta, el estado pasa a ser ABORTED y si el límite impuesto por PHP-imposed ha transcurrido, (set_time_limit(), el tiempo por defecto es 30 segundos) el estado es TIMEOUT.

Una función muy util para estos casos, es connection_status() que devuelve el estado de la conexión.

8.1.- Conexiones a bases de datos

Las conexiones persistentes son enlaces SQL que no se cierran cuando la ejecución del script termina. El comportamiento de estas conexiones es el siguiente.

Cuando se invoca una conexión de este tipo, PHP comprueba si existe una conexión de este mismo tipo o por el contrario, se trata de una nueva conexión. En el caso de que exista, se procede a su uso, y en el caso de que no exista, la conexión se crea. Dos conexiones se consideran iguales cuando están realizadas sobre el mismo servidor, con el mismo usuario y la misma contraseña.

Pero en realidad, estas conexiones permanentes, no proporcionan ningún tipo de funcionabilidad adicional frente a conexiones temporales, debido a la forma en que los servidores Web funcionan.

Aún así se utilizan debido a la eficiencia, debido al tiempo de establecimiento de la conexión, y debido a que si tienes una sóla conexión sobre el servidor, irá mucho más rápido que si tienes 10 conexiones temporales, puesto que la carga que soporta es diferente.

9.- Funciones de PHP para MySQL

La lista de funciones disponibles es la siguiente:

9.1.- Ejemplos de utilización de MySQL desde PHP

Ejemplo de creación de una base de datos

<html>
<head><title>Ejemplo de creación de una BD con PHP y MySQL</title>
</head>
<body>
      <h2>Creación de una base de datos</h2>
<?php

  $host="flanagan.ugr.es";
  $user="serweb";
  $password="serweb";

  #Conectamos a MySQL
  $bd=@mysql_connect($host,$user,$password) 
       or die ("No se puede conectar a MySQL: ".mysql_error());

  #Creamos una base de datos
  if (@mysql_create_db ("mi_bd")) {
          print ("<p>Base de Datos creada con éxito \n");
  } else {
          printf ("<p>ERROR al crear la base de datos: %s\n", mysql_error ());
  }

?>
</body>
</html>

Ejemplo de creación de una tabla

<html>
<head><title>Ejemplo de creación de una tabla con PHP y MySQL</title>
</head>
<body>
      <h2>Creación de una tabla</h2>
<?php

  $host="flanagan.ugr.es";
  $user="serweb";
  $password="serweb";

  #Conectamos a MySQL  
  $bd=@mysql_connect($host,$user,$password) 
       or die ("No se puede conectar a MySQL: ".mysql_error());
  
  #Creamos una tabla de articulos
  $campos_tabla_articulos=" id INT PRIMARY KEY, nombre VARCHAR(200) NOT NULL, precio FLOAT";

  #Creamos 1 variable con la sentencia SQL que crea la tabla
  $SQL_crea_tabla_articulos="create table tabla_articulos ($campos_tabla_articulos);"; 

  #Ejecutamos la sentencia
  $result =@ mysql_db_query("mi_bd",$SQL_crea_tabla_articulos) 
            or die ("<p>ERROR, No puedo crear la tabla". mysql_error());

  print "<p>Tabla creada</p>";

?>
</body>
</html>

Ejemplo de inserción en una tabla

<html>
<head><title>Ejemplo de inserción en una tabla con PHP y MySQL</title>
</head>
<body>
      <h2>Inserción en una tabla</h2>
<?php

  $host="flanagan.ugr.es";
  $user="serweb";
  $password="serweb";

  #Conectamos a MySQL  
  $bd=@mysql_connect($host,$user,$password) 
       or die ("No se puede conectar a MySQL: ".mysql_error());

  #Insertamos 2 artículos 
  $SQL_inserta1="insert into tabla_articulos values (10,'patatas',1.4);";
  $SQL_inserta2="insert into tabla_articulos values (5,'manzanas',2.2);";
  $result = @mysql_db_query("mi_bd",$SQL_inserta1) 
             or print ("\n No puedo insertar");
  $result = @mysql_db_query("mi_bd",$SQL_inserta2) 
             or print ("\n No puedo insertar");

?>
</body>
</html>

Ejemplo de consulta en una tabla con arrays numéricos

<html>
<head><title>Ejemplo de consulta en una tabla con PHP y MySQL</title>
</head>
<body>
      <h2>Consulta en una tabla</h2>
<?php

  $host="flanagan.ugr.es";
  $user="serweb";
  $password="serweb";
  
  #Mostramos el contenido de la tabla
  $result = @mysql_db_query("mi_bd","select * from tabla_articulos;");
  while($fila = mysql_fetch_array($result, MYSQL_NUM)) {
      echo "<p>".$fila[0]." ";
      echo $fila[1]." ";
      echo $fila[2]." ";
  }

  #Liberamos la memoria usada por la consulta
  mysql_free_result($result);
?>
</body>
</html>

Otro ejemplo de consulta en una tabla con arrays asociativos

<html>
<head><title>Ejemplo de consulta en una tabla con PHP y MySQL</title>
</head>
<body>
      <h2>Consulta en una tabla</h2>
<?php

  $host="flanagan.ugr.es";
  $user="serweb";
  $password="serweb";
  
  #Mostramos el contenido de la tabla
  $result = mysql_db_query("mi_bd","select * from tabla_articulos;");
  $result = @mysql_db_query("mi_bd","select * from tabla_articulos;");
  while($fila = mysql_fetch_array($result, MYSQL_ASSOC)) {
      echo "<p>".$fila["id"]." ";
      echo $fila["nombre"]." ";
      echo $fila["precio"]." ";
  }

  #Liberamos la memoria usada por la consulta
  mysql_free_result($result);
?>
</body>
</html>

Otro ejemplo de consulta en una tabla con objetos

<html>
<head><title>Ejemplo de consulta en una tabla con PHP y MySQL</title>
</head>
<body>
      <h2>Consulta en una tabla</h2>
<?php

  $host="flanagan.ugr.es";
  $user="serweb";
  $password="serweb";
  
  #Mostramos el contenido de la tabla
  $result = mysql_db_query("mi_bd","select * from tabla_articulos;");
  while($fila = mysql_fetch_object($result)) {
      echo "<p>".$fila->id." ";
      echo $fila->nombre." ";
      echo $fila->precio." ";
  }

  #Liberamos la memoria usada por la consulta
  mysql_free_result($result);
?>
</body>
</html>

10.- Referencia de Funciones de PHP

I. Funciones específicas de Apache
II. Funciones de matrices
III. Funciones Ortográficas
IV. Funciones matemáticas de precisión arbitraria
V. Funciones de compresión con Bzip2
VI. Funciones de calendario
VII. CCVS API Functions
VIII. soporte de las funciones COM para Windows
IX. Funciones de Clases/Objectos
X. Funciones de ClibPDF
XI. Crack functions
XII. CURL, Client URL Library Functions
XIII. Funciones de pago electrónico
XIV. Crédit Mutuel CyberMUT functions
XV. Cyrus IMAP administration functions
XVI. Funciones de tipos de caracteres
XVII. Funciones de la capa de abstraccion de bases de datos (dbm-style)
XVIII. Funciones de fecha y hora
XIX. Funciones para dBase
XX. Funciones dbm
XXI. dbx functions
XXII. DB++ Functions
XXIII. Direct IO functions
XXIV. Funciones con directorios
XXV. Funciones de DOM XML
XXVI. .NET functions
XXVII. Error Handling and Logging Functions
XXVIII. FrontBase Functions
XXIX. Funciones filePro
XXX. Funciones del sistema de ficheros
XXXI. Funciones Forms Data Format (Formato de Datos de Formularios)
XXXII. FriBiDi functions
XXXIII. Funciones FTP
XXXIV. Function Handling functions
XXXV. GNU Gettext
XXXVI. GMP functions
XXXVII. Funciones HTTP
XXXVIII. Funciones para Hyperwave
XXXIX. Funciones para ICAP - Internet Calendar Application Protocol
XL. iconv functions
XLI. Funciones de imágenes
XLII. Funciones IMAP
XLIII. Funciones para Informix
XLIV. Funciones InterBase
XLV. Ingres II functions
XLVI. IRC Gateway Functions
XLVII. Java
XLVIII. Funciones LDAP
XLIX. Funciones de Correo
L. mailparse functions
LI. Funciones matemáticas
LII. Multi-Byte String Functions
LIII. MCAL functions
LIV. Funciones Criptográficas
LV. Funciones Hash
LVI. Funciones de Microsoft SQL Server
LVII. Ming functions for Flash
LVIII. Miscelánea de funciones
LIX. mnoGoSearch Functions
LX. funciones mSQL
LXI. Funciones MySQL
LXII. Mohawk Software session handler functions
LXIII. muscat functions
LXIV. Funciones de Red
LXV. Ncurses terminal screen control functions
LXVI. Lotus Notes functions
LXVII. ODBC functions
LXVIII. Funciones de Oracle 8
LXIX. OpenSSL functions
LXX. Funciones Oracle
LXXI. Ovrimos SQL functions
LXXII. Output Control Functions
LXXIII. Object property and method call overloading
LXXIV. PDF functions
LXXV. Verisign Payflow Pro functions
LXXVI. opciones e información de PHP
LXXVII. Funciones POSIX
LXXVIII. Funciones de PostgreSQL
LXXIX. Funciones de ejecución de programas
LXXX. Printer functions
LXXXI. Pspell Functions
LXXXII. GNU Readline
LXXXIII. Funciones GNU Recode
LXXXIV. Funciones de expresiones regulares compatibles con Perl
LXXXV. qtdom functions
LXXXVI. Funciones para expresiones regulares
LXXXVII. Funciones Semáforo y de memoria compartida
LXXXVIII. SESAM database functions
LXXXIX. Session handling functions
XC. Shared Memory Functions
XCI. Shockwave Flash functions
XCII. Funciones SNMP
XCIII. Socket functions
XCIV. Funciones de cadenas
XCV. Funciones de Sybase
XCVI. Funciones URL
XCVII. Funciones sobre variables
XCVIII. vpopmail functions
XCIX. W32api functions
C. Funciones WDDX
CI. Funciones de intérprete XML
CII. XMLRPC functions
CIII. XSLT functions
CIV. YAZ
CV. NIS funciona
CVI. Zip File Functions (Read Only Access)
CVII. Funciones de Compresión

11.- Ejercicios

Ejercicio: Prueba a realizar una conexión con el mysql, crea una tabla, inserta un par de valores, lee los valores de la tabla y muestralos en la salida. La tabla la puedes crear con tres elementos, un nombre, un precio y una pequeña descripcion. Nota: antes de crear una tabla (en SQL) tienes que haber creado la base de datos con la que vas a trabajar

Ejercicio: Utilizando la tabla del ejemplo anterior crea una pagina PHP que te permita seleccionar un cantidad de elementos de la base de datos y envie los elementos seleccionados a otro PHP que te guarda los seleccionado en una cookie. Si hay más de uno puedes utilizar un vector.

Ejercicio: Pide el idioma del usuario entre varios (español o inglés), y guardalo en un cookie para uso futuro. Crea un formulario con un campo para escribir un email, otro para un asunto y un tercero para escribir un tema, con esos datos envia un correo.(Nota: Usa la referencia de funciones XLIX. Funciones de Correo)