introducción a php5

134
Introducción a PHP Aitor Gómez Goiri [email protected] www.twolf.eu 16 a 18 de Julio de 2008 e-ghost ESIDE – Universidad de Deusto

Upload: open-university-kmi

Post on 20-Jun-2015

3.567 views

Category:

Technology


3 download

DESCRIPTION

Presentación usada en un cursillo de introducción a PHP.

TRANSCRIPT

Page 1: Introducción a PHP5

Introducción a PHP

Aitor Gómez [email protected]

16 a 18 de Julio de 2008e-ghost

ESIDE – Universidad de Deusto

Page 2: Introducción a PHP5

CopyleftEsta presentación ha sido realizada por Aitor Gómez Goiri (twolf), en base a la presentación realizada por Jorge García Ochoa de Aspuru (bardok) para los cursillos de Julio de 2005 y 2006.

El logotipo de la portada es propiedad de Vincent Pontier (El Roubio).

El resto del contenido está licenciado bajo los términos de la licencia “Reconocimiento – No comercial – Compartir igual” de Creative Commons.

Para ver una copia de esta licencia visite:http://creativecommons.org/licenses/by-nc-sa/2.5/es

Page 3: Introducción a PHP5

3

Índice

Introducción Fundamentos de PHP Información de usuario Acceso a base de datos Otros

Page 4: Introducción a PHP5

4

Índice

Introducción Fundamentos de PHP Información de usuario Acceso a base de datos Otros

Page 5: Introducción a PHP5

5

Introducción

¿Qué es? Características Pros y contras Historia PHP5 ¿Cómo funciona? Configuración del servidor Apache

Page 6: Introducción a PHP5

6

¿Qué es?

PHP Hypertext Preprocessor Lenguaje interpretado o de scripting Sintaxis similar a C, Java o Perl Proposito general

Aplicaciones web Aplicaciones para línea de comandos (PHPCLI) Aplicaciones con interfaz gráfica

Open Source

Page 7: Introducción a PHP5

7

Características

Alto rendimiento Integración con bases de datos Bibliotecas incorporadas Facilidad de aprendizaje y uso Portabilidad Gran documentación on-line (php.net) etc.

Page 8: Introducción a PHP5

8

Pros y contras

“PHP is the BASIC of the 21st Century“ “PHP Sucks, But It Doesn't Matter”

Wikipedia, Meneame, Digg, WordPress, largo etc. Usado en más de 20 millones de dominios

Page 9: Introducción a PHP5

9

Historia

1994: Rasmus Lerdorf quiere mostrar su currículum vítae y guardar ciertos datos cómo estadísticas sobre el tráfico que recibía su web y crea Personal Home Page Se empezó a extender...

acceso a bases de datos generación de páginas web dinámicas

1997: se liberó la versión PHP/FI 2.0 1998: PHP3

Page 10: Introducción a PHP5

10

Historia (2)

2000: PHP 4: se reescribe el núcleo (llamado Zend Engine) Más modular, rendimiento, funcionalidad... Su uso se extendió enormemente

2004: PHP5 Zend Engine 2.0 En 2008, se convirtió en la única versión estable bajo

desarrollo. Renovarse o morir (aplicaciones y servidores)

El curso se centra en esta versión

Page 11: Introducción a PHP5

11

PHP 5

Modelo de orientación a objetos El anterior era un poco rudimentario

Excepciones Nuevas extensiones

SimpleXML, para el proceso sencillo de XML PDO, interfaz de orientación a objetos para interactuar

con la base de datos. Extensiones DOM y XSL

Para más detalles, aquí.

Page 12: Introducción a PHP5

12

¿Cómo funciona?

Nosotros vemos páginas web en un navegador: Mozilla, Konqueror, Opera, Nautilus...

Un navegador interpreta HTML (y hojas de estilo, Javascript, etc, pero eso está fuera

del alcance de este curso ;-)

Un navegador NO sabe interpretar PHP Entonces, ¿quién lo hace por él?

Page 13: Introducción a PHP5

13

¿Cómo funciona? (2)

El navegador puede: Mostrar una página alojada en el ordenador en el que

él está instalado Éste es el ordenador “cliente” La página se muestra tal y como está guardada, no hay

proceso posible: tiene que ser HTML Pedir una página a un servidor

El servidor puede procesar la página antes de enviarla al navegador

Page 14: Introducción a PHP5

14

¿Cómo funciona? (3)

Ejemplo: petición de una página PHP a un servidor web

Servidor web interpreta código PHP para generar la página HTML.

Es probable que en el código se hagan llamadas a bases de datospara obtener datos con lo que completar dicho HTML.

Page 15: Introducción a PHP5

15

Configuración del servidor

Vamos a utilizar el servidor Apache http://www.apache.org Servidor HTTP Open Source

En principio, soporta el protocolo HTTP Se pide un fichero, el servidor lo devuelve

Extensible a través de módulos, como el módulo PHP Si está cargado y configurado, en caso de que el fichero

pedido sea una página PHP, se procesa y lo que se envía es el resultado

Page 16: Introducción a PHP5

16

Configuración servidor (2)

El proceso descrito aquí es para configurar el servidor en una distribución Ubuntu GNU/Linux No debería variar sustancialmente para otras

distribuciones Instalar los paquetes apache, php5, apache-common

y apache utils apt-get install apache2 libapache2-mod-php5 Versiones (julio 2008):

Apache: 2.2.8-1 PHP: 5.2.4-2

Page 17: Introducción a PHP5

17

Configuración servidor (3)

Para comprobar que el servidor Apache está activo: http://localhost Aparecerá la siguiente página

Accedemos a través del servidor, no directamente

Page 18: Introducción a PHP5

18

Configuración servidor (4)

Activaremos el módulo “userdir”

nos permite que para cada usuario, si tiene un directorio llamado “public_html” en su carpeta home, exista un directorio virtual del tipo:

http://www.midominio.net/~usuario Nosotros vamos a trabajar con ese directorio.

Si no deberéis trastear con el grupo www-data, el directorio /var/www o los ficheros /etc/apache2/conf.d/algo.conf

sudo a2enmod userdirsudo /etc/init.d/apache2 force-reload

Page 19: Introducción a PHP5

19

Configuración servidor (5)

Finalmente, comprobamos que funciones las páginas PHP Suponiendo que el usuario que se llama “ubuntu” Creamos el fichero: “/home/ubuntu/public_html/info.php”

<?php phpinfo();?>

Accedemos a éla través del servidor:http://localhost/~ubuntu/info.php

Page 20: Introducción a PHP5

20

Índice

Introducción Fundamentos de PHP Información de usuario Acceso a base de datos Otros

Page 21: Introducción a PHP5

21

Fundamentos de PHP

Primeros pasos Sintaxis Tipos y variables Operadores Estructuras de control Matrices Funciones Errores Métodos avanzados de escape Orientación a objetos

Page 22: Introducción a PHP5

22

Fundamentos de PHP

Primeros pasos Sintaxis Tipos y variables Operadores Estructuras de control Matrices Funciones Errores Métodos avanzados de escape Orientación a objetos

Page 23: Introducción a PHP5

23

Primeros pasos

Como se dijo en la introducción: PHP se incrusta dentro del código HTML PHP se procesa en el servidor

Sirve para crear páginas HTML que después se enviarán al cliente, y para realizar otras operaciones

Podemos generar una página según el contenido de un formulario...

... o según el contenido de una base de datos... ... o según la hora del servidor... ...

Page 24: Introducción a PHP5

24

Primeros pasos (2)

¿Cómo incrustar PHP dentro del HTML? Con la etiqueta <?php [instrucciones] ?>

El servidor procesa el código que hay entre “<?php” y “?>” (o símplemente “<? .... ?>”)<?php echo ("Hola mundo!"); ?>

Con la etiqueta <?=[expresión]?> El servidor evalúa la expresión, y escribe su resultado en

la página web<?="Hola mundo!" ?>

No puede haber más código que la expresión que queremos evaluar y sacar por pantalla

Page 25: Introducción a PHP5

25

Primeros pasos (3)

¿Cómo procesa el código? Tenemos la página:

El servidor comienza a procesar la página Si encuentra HTML, lo envía directamente al cliente Si encuentra una etiqueta de PHP, procesa el código, y

si el código escribe algo, esa "escritura" se incluye en el HTML que se envía al cliente

<html> <body> <?php echo 'Hola mundo!'; ?> </body> </html>

Page 26: Introducción a PHP5

26

Primeros pasos (4)

El servidor devolvería el siguiente fragmento:

<html> <body> Hola mundo! </body> </html>

Page 27: Introducción a PHP5

27

Fundamentos de PHP

Primeros pasos Sintaxis Tipos y variables Operadores Estructuras de control Matrices Funciones Errores Métodos avanzados de escape Orientación a objetos

Page 28: Introducción a PHP5

28

Sintaxis

Es muy similar a la de C, Java o Perl. Las instrucciones se escriben separadas por ';' Las estructuras de control son muy similares

if, while, switch, for, etc. Las llamadas a función se realizan con paréntesis

phpinfo(); strlen('abcdef'); // 6

Los comentarios en el código se realizan con: // Una sola línea # Una sola línea /* Varias

líneas */

Page 29: Introducción a PHP5

29

Fundamentos de PHP

Primeros pasos Sintaxis Tipos y variables Operadores Estructuras de control Matrices Funciones Errores Métodos avanzados de escape Orientación a objetos

Page 30: Introducción a PHP5

30

Tipos

Existen distintos tipos: Boolean, integer, float, string, array, object,...

Nos “desentendemos” de ellos no es declarado por el programador PHP lo decide en tiempo de ejecución dependiendo del

contexto en el que es usado la variable <?php $un_bool = TRUE; // un valor booleano $un_str = "foo"; // una cadena $un_int = 12; // un entero

echo gettype($un_bool); // imprime: boolean

// Si este valor es un entero, incrementarlo en cuatro if (is_int($un_int)) $un_int += 4;?>

Page 31: Introducción a PHP5

31

Variables

Tienen dos particularidades: Pueden cambiar de tipo fácilmente

Ej.: si en una variable hemos guardado un entero, podemos utilizarlo como un String, y viceversa(siempre que el String represente un entero)

El nombre de la variable lleva '$' delante $usuario = 'jose';

Es posible concatenar variables (strings) con el operador '.'

<?php $mensaje1 = 'Hola'; $mensaje2 = 'mundo!'; echo $mensaje1.' '.$mensaje2; ?>

Page 32: Introducción a PHP5

32

Variables (2)

Dentro de un string delimitado con comillas dobles se evalúan las variables

Con la función “unset()” podemos quitar el valor de una variable

La función “isset()” nos indica si una variable está inicializada

$nombre = 'juan'; echo ("El valor de la variable nombre es $nombre.");

$var = "pepe"; unset($var); // Ahora no tiene valor (NULL)

if (isset($var)){ echo 'Tiene valor';}

Page 33: Introducción a PHP5

33

Fundamentos de PHP

Primeros pasos Sintaxis Tipos y variables Operadores Estructuras de control Matrices Funciones Errores Métodos avanzados de escape Orientación a objetos

Page 34: Introducción a PHP5

34

Operadores

Aritméticos

Asignación

Operador Ejemplo ResultadoNegación - -3 -3Adición + 3+3 6Substracción - 45-5 40Multiplicación * 5*3 15División / 60/3 20Módulo % 7%2 1Incremento ++ 4

Simbolo

$x=3; $x++;

Operador EquivalenciaAsignaciónAsignación y sumaAsignación y restaAsignación y multiplicaciónAsignación y divisiónAsignación y restoAsignación y concatenación

Simbolo$x = $y $x = $y

$x += $y $x = $x + $y$x -= $y $x = $x – $y$x *= $y $x = $x * $y$x /= $y $x = $x / $y

$x %= $y $x = $x % $y$s .= $x $s = $s . $x

Page 35: Introducción a PHP5

35

Operadores (2)

Comparación

Lógicos

Otros

Operador Símbolo Ejemplo ResultadoIgual == 3 == 3 ciertoIdéntico === 3 === ”3” falsoDiferente != 7 !=7 falso

<> 9 <> 8 ciertoNo idénticos !== “4” !== 4 ciertoMenor < 1 < 3 ciertoMayor > 3 > 4 falsoMenor o igual <= 2 <= 1 falso

Operador Ejemplo Resultado&& TRUE && FALSE falso|| TRUE || FALSE cierto! ! TRUE falso

SimboloY (and)O (or)NO (not)

Page 36: Introducción a PHP5

36

Fundamentos de PHP

Primeros pasos Sintaxis Tipos y variables Operadores Estructuras de control Matrices Funciones Errores Métodos avanzados de escape Orientación a objetos

Page 37: Introducción a PHP5

37

Estructuras de control

Condicionales Bucles include y require

Page 38: Introducción a PHP5

38

Condicionales

Condicional simple

if (<condición>){...}

Condicional y alternativa

if (<condición>){...}else{...}

Page 39: Introducción a PHP5

39

Condicionales (2)

Condicional múltiple

switch (<expresión>){

case <valor 1>: ...break;

case <valor 2>: ...break;

...case <valor n>: ...

break;default: ...

break;}

Page 40: Introducción a PHP5

40

Condicionales (3)

Ejemplo//$x = 4; //descomentadlo después de probarlo una vez

if( ! isset($x) ) {echo '<p>Por favor, establezca un valor para la variable.</p>';

}else {

echo '<p>La variable está correctamente definida y es</p>';switch ($x) {

case 1: echo (' el uno.</p>');break;

case 2: echo (' el dos.</p>');break;

case 3: echo (' el tres.</p>');break;

default: echo ('distinta a 1, 2 o 3.</p>');break;

}}

Page 41: Introducción a PHP5

41

Bucles

while Mientras se cumpla una condición, se ejecuta al código

que hay en el (puede no ejecutarse nunca) Ejemplo:

$a = 1;while ( $a < 10) {

echo "<p>El número actual es $a</p>";$a++;

}

Page 42: Introducción a PHP5

42

Bucles (2)

do ... while Se ejecuta el código mientras se cumpla una condición

(al menos se ejecuta una vez) Ejemplo

$a = 0;do{ $a++; echo ('<p>El número es '.$a.'</p>');}while ( $a < 10);

Page 43: Introducción a PHP5

43

Bucles (3)

for Ejecuta un código mientas se cumpla una condición

(puede no ejecutarse ninguna vez) Opcionalmente, se puede proporcionar:

Una expresión de inicialización, se ejecuta la primera vez Una expresión de condición Una expresión de paso, se ejecuta al final de cada

pasada del bucle Ejemplo:

for ($a = 1; $a <= 10; $a++) {echo ('<p>El número es '.$a.'</p>');

}

Page 44: Introducción a PHP5

44

Bucles (4)

Foreach Se ejecuta un determinado código por cada uno de los

elementos de una colección Por ejemplo, si tenemos un array con 3 elementos:

$arr = array('perro','gato','okapi','ornitorrinco');foreach ($arr as $elem){ // En cada vuelta, elem guarda uno de los strings echo ("<p>El elemento es: $elem.</p>");}foreach ($arr as $index => $elem){ // En cada vuelta, elem guarda uno de los strings, e index el índice echo ("<p>El elemento $index es: $elem.</p>");}

Page 45: Introducción a PHP5

45

Bucles (5)

Ejemplo

Nota: para todo lo anterior existe una sintaxis alternativa.

Page 46: Introducción a PHP5

46

include y require

Para incluir y evaluar un archivo determinado... include, require, include_once y require_once. Diferencia: include() produce un Warning mientras que

require() produce un Error Fatal. utilizar require() cuando queramos que un fichero no

encontrado cuelgue el procesamiento de la páginavars.php<?php

$color = 'verde';$fruta = 'manzana';

?>

test.php<?php

echo "Una $fruta $color"; // Una

include 'vars.php';

echo "Una $fruta $color"; // Una manzana verde

?>

Page 47: Introducción a PHP5

47

Fundamentos de PHP

Primeros pasos Sintaxis Tipos y variables Operadores Estructuras de control Matrices Funciones Errores Métodos avanzados de escape Orientación a objetos

Page 48: Introducción a PHP5

48

Matrices

Acceso a una posición A través de “[...]”

echo ($matriz[1]); El índice de una matriz puede ser cualquier cosa

echo ($matriz["gato"]); Creación de una matriz

A través de “array()” $profesiones = array('Taxista', 'Bombero', 'Alcalde'); En la posición 0 del array está el string 'Taxista", en la 1

'Bombero' y así sucesivamente

Page 49: Introducción a PHP5

49

Matrices (2)

Podemos especificar el índice de cada uno de los elementos:

$matriz = array('nombre' => 'Aitor', 'apellido' => 'Gomez', 'edad' => 23);

Si hacemos:echo $matriz['nombre']; // Obtenemos 'Aitor'

Creación con corchetes Podemos crear elementos de una matriz sobre la

marcha:

$matriz[7] = "Texto de la posición 7"; // si no especificamos un índice, se inserta en la siguiente posición $matriz[] = "Esto iría en la posición 8";

Page 50: Introducción a PHP5

50

Matrices (3)

Modificación de elementos Podemos modificar un elemento de una matriz

reasignando un valor $matriz = array(3 => "Oso", 5 => "Perro"); $matriz[3] = "Gato";

Eliminación de elementos Podemos eliminar elementos, o la matriz entera con

"unset()"

$matriz = array(3 => 'Oso', 5 => 'Lagarto'); unset($matriz[3]); // No hay nada en la posición 3 unset($matriz); // No hay nada en la matriz

Page 51: Introducción a PHP5

51

Matrices (4)

Recorrido de un array con “foreach” La estructura foreach, además de ser utilizada como

hemos visto en la sección de estructuras de control, resulta especialmente útil para obtener los índices del array:

$modelo['identificador'] = 3;$modelo['fabricante'] = 'ABB';$modelo['nombre'] = 'detector presencia';

foreach ($modelo as $clave => $valor){ echo "El $clave es $valor<br />";}

Page 52: Introducción a PHP5

52

Fundamentos de PHP

Primeros pasos Sintaxis Tipos y variables Operadores Estructuras de control Matrices Funciones Errores Métodos avanzados de escape Orientación a objetos

Page 53: Introducción a PHP5

53

Funciones

Podemos definir nuestras propias funciones

Ejemplo

function <nombre_función> ($parm1, $parm2, ...){ ... return <resultado>;}

function negrita($texto) {return '<b>'.$texto.'</b>';

}

echo 'Quiero '.negrita('remarcar').' lo que es '.negrita('importante');

Page 54: Introducción a PHP5

54

Fundamentos de PHP

Primeros pasos Sintaxis Tipos y variables Operadores Estructuras de control Matrices Funciones Errores Métodos avanzados de escape Orientación a objetos

Page 55: Introducción a PHP5

55

Errores

Para tratar los errores que se produzcan en nuestra aplicación web podemos optar por: Hacer uso de excepciones Finalizar el script (con funciones die, exit, etc.)

Page 56: Introducción a PHP5

56

Excepciones

Similar a otros lenguajes se lanzan con throw, dentro del bloque try se capturan

excepciones potenciales y se tratan con catch

function division($dividendo, $divisor) {if($divisor==0) throw new Exception('No dividas entre cero!',0);return $dividendo/$divisor;

}

try {echo division(15,0);

} catch(Exception $e) {echo $e->getMessage();

}

Page 57: Introducción a PHP5

57

Función die

Equivalente a exit Cuando se devuelve, se detiene el script y se muestra

el mensaje.

<?php$x = 15;$y = 0;echo 'llego aquí<br />';

if($y==0) die('División imposible.'); // Probad a comentarloecho ($x/$y);

echo '<br />llego al final';?>

Page 58: Introducción a PHP5

58

Fundamentos de PHP

Primeros pasos Sintaxis Tipos y variables Operadores Estructuras de control Matrices Funciones Errores Métodos avanzados de escape Orientación a objetos

Page 59: Introducción a PHP5

59

Métodos avanzados de escape

PHP permite construcciones como:

<?phpfunction negrita($texto) {

?><span style=" font-weight: bold;"><?php echo $texto; ?></span><?php

}

$numero=15;$limite=16;

if($numero<$limite) $ret='menor';else $ret='mayor o igual';

?><p>El número especificado es <?php negrita($ret); ?> que <?php negrita($limite); ?>.</p>

Page 60: Introducción a PHP5

60

Fundamentos de PHP

Primeros pasos Sintaxis Tipos y variables Operadores Estructuras de control Matrices Funciones Errores Métodos avanzados de escape Orientación a objetos

Page 61: Introducción a PHP5

61

Objetos

Definición de una claseclass NombreClase [extends ClasePadre] [implements Iinterfaz]{

const CONSTANTE = 1;static private $instanciasCreadas = 0;protected $atributo;

public function __construct($a) {$this->atributo = $a;self::metodoEstatico();

}function __destruct() {}

static private function metodoEstatico() {self::$instanciasCreadas++;

}public function __toString() {

return 'Clase con atributo '.$this->atributo;}

}

Page 62: Introducción a PHP5

62

Objetos (2)

Creación de objetos Si tenemos una clase "ClaseA" podremos crear objetos

mediante el operador "new"$objeto = new ClaseA();

El puntero "$this" Es una referencia al propio objeto. Se usa dentro de los

métodos

class ClaseA{ protected $num; function getNum() // Si no se especifica nada, es público { return $this->num; // "num" no lleva "$" }}

Page 63: Introducción a PHP5

63

Objetos (3)

Operador de resolución :: Es un símbolo que permite acceso a los miembros o

métodos estáticos y constantes.

Desde afuera: usan el nombre de la clase. Desde dentro: usan self o parent.

class MiClase extends ClasePadre{ public static $my_static = 'static var';

public static function doubleColon() { parent::doubleColon(); echo self::$my_static . "\n"; }}

MiClase::doubleColon();

Page 64: Introducción a PHP5

64

Objetos (4)

Constructores Un constructor es un método de nombre __construct()

al que se llama al crearse el objeto.

class Persona{

private $nombre;function __construct($nom)

{ $this->nombre = $nom; }

function __toString() { return $this->nombre; }}$p = new Persona("Twolf");echo $p;

Page 65: Introducción a PHP5

65

Objetos (5)

Destructor __destruct() Se le llamará tan pronto como se borren todas las

referencias a un objeto en particular

Métodos mágicos Existen unos nombres de métodos que tienen asociada

una funcionalidad concreta __toString()

Permite a una clase decidir como actuar cuando se la convierte en cadena

__clone() Se llama al crear una copia de un objeto

Page 66: Introducción a PHP5

66

Objetos (6)

PHP soporta herencia de clases<?php

class ClaseA { protected $attrA = 'A'; function getAttrA() { return $this->attrA; } } class ClaseB extends ClaseA { private $attrB = 'B'; function getAttrB() { return $this->attrB; } } $obj = new ClaseB; echo $obj->getAttrA(); echo $obj->getAttrB();

?>

Page 67: Introducción a PHP5

67

Índice

Introducción Fundamentos de PHP Información de usuario Acceso a base de datos Otros

Page 68: Introducción a PHP5

68

Información de usuario

Superglobales GET y POST Sesiones

Page 69: Introducción a PHP5

69

Superglobales

Son variables incorporadas (matrices asociativas) disponibles en todos los ámbitos $GLOBALS

para definir variables globales $_SERVER

contiene información tal como cabeceras, rutas y ubicaciones de scripts

<?phpecho $_SERVER['SERVER_ADDR'].'<br />';echo $_SERVER['SERVER_NAME'].'<br />';echo $_SERVER['QUERY_STRING'].'<br />';echo $_SERVER['DOCUMENT_ROOT'].'<br />';echo $_SERVER['REMOTE_ADDR'].'<br />';

?>

Page 70: Introducción a PHP5

70

Superglobales (2)

$_SESSION contiene variables de sesión

$_POST variables pasadas a través del método HTTP

POST $_GET

variables pasadas a través del método HTTP GET

$_REQUEST contiene datos de $_GET, $_POST, y

$_COOKIE. etc.

Page 71: Introducción a PHP5

71

GET y POST

Información desde formularios La información de un formulario puede enviarse con el

método "get" o el método "post"

Existen dos matrices en PHP llamadas $_GET y $_POST Se accede por el nombre del parámetro Se obtiene el valor del parámetro

Page 72: Introducción a PHP5

72

GET y POST (2)

Ejemplo: crear el siguiente fichero PHP (ejerparams.php):

Acceder a la página con la URL:

<html> <body> <?php foreach ($_GET as $nombre => $param) { ?> <p><?=$nombre.': '.$param?></p> <? } ?> </body> </html>

http://localhost/~ubuntu/ejerparams.php?login=bardok&[email protected]

Page 73: Introducción a PHP5

73

GET y POST (3)

Creamos la página "formparams.html" y enviamos los datos a "ejerparams.php":

Modificación: en lugar de utilizar el método "get" utilizar el "post"

<html> <body> <form method="get" action="ejerparams.php"> Login: <input type="text" name="login" /><br /> Password: <input type="password" name="pass" /><br /> Email: <input type="text" name="email" /><br /> <input type="submit" value="Enviar" /> </form> </body> </html>

Page 74: Introducción a PHP5

74

GET y POST (4)

Para acceder a un dato en concreto dentro de los arrays "$_POST" y "$_GET" La clave para acceder a un elemento es el nombre del

parámetro

Múltiples valores en un parámetro: Un parámetro puede tener distintos valores a la vez:

El nombre del parámetro será "nombreparametro[]":

El parámetro "nombreparametro" es un array con los elementos seleccionados.

echo 'El nombre de usuario utilizado es '.$_GET['login'];

<input type="checkbox" name="sel[]" value="v1"/>Valor 1<input type="checkbox" name="sel[]" value="v2"/>Valor 2

Page 75: Introducción a PHP5

75

GET y POST (5)

Si se seleccionan los dos checkboxes anteriores:

Ejemplo con $_REQUEST (ejrequest.php)

sel[0] => "v1"sel[1] => "v2"

<html><head><title>Ejemplo de uso de $_REQUEST</title></head><body><?php

if( isset($_REQUEST['provincia']) ) {?>

<p>Eres de <?php echo $_REQUEST['provincia']; ?>.</p><?php } else { ?>

<form method="get" action="ejrequest.php"><select name="provincia">

<option value="Álava">Álava</option>...<option value="Murcia">Murcia</option>

</select><input type="submit" value="Enviar" /></form>

<?php } ?></body></html>

Page 76: Introducción a PHP5

76

Sesiones

Variables de sesión Podemos guardar información del usuario que se

mantendrá mientras no se cierre el navegador Se transmite de unas páginas a otras El ejemplo más clásico: carrito de la compra Otra utilidad: validación de usuarios

Todo lo que guardemos en el array "$_SESSION" quedará almacenado de este modo Para poder usarlo: lo primero en la página, llamada a

"session_start();"

Page 77: Introducción a PHP5

77

Sesiones (2)

Ejemplo: página pública/privada public_private.php

<?php session_start(); if (isset($_GET["accion"])) { $accion = $_GET["accion"]; if ($accion == "Login") { $_SESSION["login"] = $_GET["login"]; } else if ($accion == "Desconectar") { unset($_SESSION["login"]); } } $registrado = isset($_SESSION["login"]); if ($registrado) $login = $_SESSION["login"];?>

Page 78: Introducción a PHP5

78

Sesiones (3)

<html><body> <?php if ($registrado) { ?> <p>Bienvenido, <b><?=$login?></b></p> <p><a href="private_login.php">Link a una página privada</a></p> <form method="get" action="public_private.php"> <input type="submit" name="accion" value="Desconectar" /> </form> <?php } else { ?> <p>Por favor, introduce tu nombre de usuario</p> <form method="get" action="public_private.php"> Nombre de usuario: <input type="text" name="login" /><br /> <input type="submit" name="accion" value="Login" /> </form> <?php } ?></body></html>

Page 79: Introducción a PHP5

79

Sesiones (4)

private_login.php

<?php session_start();?><html> <body> <?php if (isset($_SESSION["login"])) { echo ("El nombre de usuario es ".$_SESSION["login"]); } else { echo("No hay nombre de usuario"); } ?> </body></html>

Page 80: Introducción a PHP5

80

Índice

Introducción Fundamentos de PHP Información de usuario Acceso a base de datos Otros

Page 81: Introducción a PHP5

81

Acceso a base de datos

Introducción Configuración del servidor de base de datos Creación de un usuario en la base de datos Creación de una tabla PHP Data Objects Importar un archivo a base de datos Prepared statements Ejercicio favoritos Ejemplo práctico: guardar ficheros

Page 82: Introducción a PHP5

82

Introducción

Es posible acceder a bases de datos a través de PHP Uso de módulos de bases de datos Gran cantidad de bases de datos soportadas En nuestro caso usaremos MySQL como servidor de

bases de datos junto con PHPMyAdmin para administrar las mismas

Existen distintas formas de acceso a base de datos, nosotros usaremos PDO. es nativa en PHP5 (a diferencia de AdoDB) nos abstrae del tipo de base de datos concreto que

usemos (a diferencia de las funciones de mysql) hace uso de orientación a objetos

Page 83: Introducción a PHP5

83

Configuración del servidor de BB.DD.

Paquetes a instalar En el caso de utilizar Ubuntu, los paquetes a instalar

son: mysql-client, mysql-server, php5-mysql, phpmyadmin

En caso de que la base de datos tenga un ordenador servidor propio, habría que instalar mysql-server en él, y mysql-client en el servidor web

php5-mysql instala el módulo que permite a PHP interactuar con MySQL

phpmyadmin permite administración web La instalación para el cursillo tiene cómo contraseña para

el usuario administrador (root): "r00tr00t". No obstante crearemos un nuevo usuario para nuestros

menesteres

Page 84: Introducción a PHP5

84

Configuración del servidor de BB.DD. (2)

Accedemos a PHPMyAdmin http://localhost/phpmyadmin

Page 85: Introducción a PHP5

85

Creación de un usuario

Creamos un usuario sobre el que trabajar Privilegios Agregar a un nuevo usuario Todos los privilegios de datos y estructura

Page 86: Introducción a PHP5

86

Creación de una tabla

Nos identificamos como “php” Seleccionamos la tabla “php” que se ha creado y

sobre la que tenemos todos los privilegios Creamos una tabla “ejemplo” con dos campos

Page 87: Introducción a PHP5

87

Estructura de una tabla

Completamos y grabamos

Page 88: Introducción a PHP5

88

PHP Data Objects

Una vez instalado el módulo de MySQL, tenemos un API de funciones para interactuar con distintas bases de datos. Por supuesto existe un driver para MySQL.

Pasos a seguir: Conexión con el servidor de Base de Datos Trabajar con las tablas

En caso de selección, trabajar con los registros Cerrar la conexión con la base de datos

(con el método que explicamos, PDO, no hará falta que nos encarguemos explícitamente de cerrar nada, ya que es una tarea que se realizará implícitamente al destruir el objeto correspondiente)

Page 89: Introducción a PHP5

89

PHP Data Objects (2)

Conexión con el servidor de base de datos

La conexión a la base de datos devuelve un identificativo de la conexión a la base de datos

Si ha habido error, lanzará una excepción Debemos encerrar la construcción del objeto PDO en

un try/catch

$pdo = new PDO('mysql:dbname=nombreDB;host=nombreHost','usuario','password');

try { $pdo = new PDO('mysql:dbname=php;host=localhost','php','php');} catch (PDOException $e) { echo 'Connection failed: ' . $e->getMessage();}

Page 90: Introducción a PHP5

90

PHP Data Objects (3)

Trabajar con las tablas $pdo->query("sentencia_sql");

La sentencia SQL puede ser una inserción, borrado, actualización o selección $pdo->query('INSERT INTO animales VALUES (“1”,

“gato”)');

En el caso de realizarse una selección, se devolverá un objeto PDOStatement con el resultado de la misma $res = $pdo->query('SELECT * FROM animales');

Page 91: Introducción a PHP5

91

PHP Data Objects (4)

Una vez realizada la selección, podemos recorrer el resultado utilizando el método fetch o simplemente haciendo un foreach

Ejemplo completo en seleccionSimple.php Antes de probarlo, importaremos la sencilla tabla de

animales. Mediante la pestaña de “import” de PHPMyAdmin.

$sql = 'SELECT * FROM animales';foreach ($pdo->query($sql) as $row) {

echo '('.$row['identificador'].','.$row['denominacion'].')'.”\n”;}

Page 92: Introducción a PHP5

92

Importar archivo

Seleccionamos el fichero “animales.sql” y continuamos. Antes de ejecutar seleccionSimple.php, no os olvidéis

de verificar que los datos de la conexión son los correctos.

Page 93: Introducción a PHP5

93

Prepared Statements

El anterior método (PDO->query()), está bien cuando se va a ejecutar una sentencia SQL una única vez.

Para consultas que se van a realizar múltiples veces, se puede obtener un mejor rendimiento “preparando” el objeto PDOStatement a usar, y realizando después las llamadas necesarias a PDOStatement->execute().

La consulta solo será “preparada” una vez, pero podrá ser ejecutada tantas veces como se desee con los mismos o diferentes parámetros.

Page 94: Introducción a PHP5

94

Prepared Statements (2)

Ejemplo insercionPreparada.php:

Probar las otras formas de inserción preparada que existen en dicho fichero descomentandolas.

$stmt = $pdo->prepare('INSERT INTO animales (identificador, denominacion) VALUES (:id, :name)');$stmt->bindParam(':name', $name);$stmt->bindParam(':id', $id);

// inserta una fila$name = 'vaca';$value = 8;$stmt->execute();

// inserta otra fila con valores distintos$name = 'pajaro';$value = 9;$stmt->execute();

Page 95: Introducción a PHP5

95

Ejercicio favoritos

Dar de alta una tabla en la base de datos (con la estructura que se quiera) Insertar elementos en la tabla

Crear una página que tenga Un formulario que permita altas, bajas y modificaciones

en la tabla Un listado con los elementos de la tabla

Los elementos son enlaces que, pulsados, nos llevan a la misma página, pero con el elemento seleccionado (sus datos aparecen en el formulario)

Page 96: Introducción a PHP5

96

Ejercicio favoritos (1)

Propuesta de tabla

Campo Tipo Longitud Extra Primaria ÍndiceINT 5 Sí

nombre VARCHAR 20 SíVARCHAR 30LONGTEXT

codigo auto_increment

urldescripcion

Page 97: Introducción a PHP5

97

Ejercicio favoritos (2)

Propuesta interfaz

Page 98: Introducción a PHP5

98

Ejercicio favoritos (3)

Estructura Si quisiéramos dividir la aplicación en varias capas (en

archivos y carpetas), podríamos empezar consultando aquí.

En el ejercicio dividiremos la propia página en varios "bloques".

Propuesta de estructura Conexión a la base de datos Gestión de los comandos

Todos los elementos de tipo "submit" tienen como nombre "accion" y como "value" la accion que realizan

Page 99: Introducción a PHP5

99

Ejercicio favoritos (4)

Propuesta de estructura (2) Recuperación de los datos del grupo seleccionado (si

lo hay) Al seleccionar un grupo, se pasará como parámetro el

código del mismo Página web en sí

Formulario: si hay algún grupo seleccionado, sus valores se muestran en los componentes, se muestran los botones "modificar" y "eliminar" y se guarda el código seleccionado en un campo "hidden"

Listado: recorrido de la tabla. Cada elemento es un link a la propia página con el formato:

"gestiongrupos.php?selectedcodigo=<codigo>"(ej.: gestiongrupos.php?selectedcodigo=3)

Page 100: Introducción a PHP5

100

Ejemplo práctico

Vamos a realizar el siguiente ejemplo: Desde un formulario se envía un fichero con una

imagen El fichero se almacena en una base de datos Desde un fichero php, accedemos a la base de datos, y

recuperamos ficheros, para mostrarlos Lo interesante es que la imagen no está en un fichero,

está en la base de datos, y el fichero php se “convierte” en la propia imagen

Page 101: Introducción a PHP5

101

Ejemplo práctico (2)

El formulario Tiene que tener codificación:

multipart/form-data El fichero se envía con un control “file” El control hidden “MAX_FILE_SIZE” indica el tamaño

máximo del fichero a enviar Tiene que estar ANTES del control file

Page 102: Introducción a PHP5

102

Ejemplo práctico (3)

Traducido a HTML...

<form enctype="multipart/form-data" action="procesar_fichero.php" method="post"> <fieldset> <legend>Selección de ficheros</legend> <input type="hidden" name="MAX_FILE_SIZE" value="1000000" /> <label for="fichero">Selecciona el fichero (imagen jpeg): <input type="file" name="fichero" id="fichero" /> </label> <br /> <input type="submit" value="Enviar" /> </fieldset></form>

Page 103: Introducción a PHP5

103

Ejemplo práctico (4)

Insertar el fichero Hemos definido, en la tabla “FICHEROS” los siguientes

campos: FIC_Codigo: autonumérico, clave primaria FIC_Data: los datos de la imagen FIC_Type: tipo de fichero

El fichero se encuentra en el array “$_FILES['fichero']” $_FILES['fichero']['name'] : nombre del fichero $_FILES['fichero']['size'] : tamaño del fichero $_FILES['fichero']['type'] : tipo del fichero $_FILES['fichero']['tmp_name'] : fichero temporal

Page 104: Introducción a PHP5

104

Ejemplo práctico (5)

Insertar el fichero Vamos a usar la función “comillas_inteligentes”:

Escapa el string, y le pone comillas simples si no es un valor numérico

Para poder meter los datos sin problemas en la sentencia SQL

function comillas_inteligentes($valor) { // Retirar las barras if (get_magic_quotes_gpc()) { $valor = stripslashes($valor); } // Colocar comillas si no es entero if (!is_numeric($valor)) { $valor = "'" . mysql_real_escape_string($valor) . "'"; } return $valor; }

Page 105: Introducción a PHP5

105

Ejemplo práctico (6)

Insertar fichero (2) Cogemos los datos de la imagen (estará en el fichero

temporal), y los metemos en la base de datos$nombre_f = $_FILES['fichero']['name'];$type_f = $_FILES['fichero']['type'];$tmp_name_f = $_FILES['fichero']['tmp_name'];...// Leer el fichero en un array de bytes$data = file_get_contents($tmp_name_f);// Pasamos la codificación a BASE 64$data = base64_encode($data);// Meter el fichero en la base de datos$comando = sprintf("insert into FICHEROS(FIC_Data,FIC_Type) VALUES(%s,%s)" ,comillas_inteligentes($data) ,comillas_inteligentes($type_f) );mysql_query($comando);

Page 106: Introducción a PHP5

106

Ejemplo práctico (7)

Recuperar la imagen Usaremos una página que recibe como parámetro el

código de la imagen Si hemos recuperado correctamente la imagen,

tendremos que indicar que el fichero php no va a devolver texto, sino una imagen de un formato concreto

Para ello tenemos que cambiar la cabecera HTTP “Content-type”

El tipo de fichero lo tenemos en la base de datos (lo hemos guardado cuando nos lo han mandado)

Page 107: Introducción a PHP5

107

Ejemplo práctico (8)

Recuperar la imagen Si llamamos a la página, por ejemplo con:

.../visualizar_img.php?codigo=4 Devolverá la imagen con el código 4, si es que existe

Tras recuperar los datos, los escribimos, sin más$sql_data = "SELECT FIC_Data, FIC_Type FROM FICHEROSWHERE FIC_Codigo=$codigo";$res_data = mysql_query($sql_data,$db);if ($arr_data = mysql_fetch_array($res_data)){ $datos = $arr_data['FIC_Data']; $datos = base64_decode($datos); $tipo = $arr_data['FIC_Type']; header("Content-type: $tipo"); echo ($datos);}

Page 108: Introducción a PHP5

108

Índice

Introducción Fundamentos de PHP Información de usuario Acceso a base de datos Otros

Page 109: Introducción a PHP5

109

Otros

SimpleXML XTemplate PHP en línea de comandos PEAR PHP en el IDE Eclipse

PDT PHPeclipse

¿Por dónde continuar?

Page 110: Introducción a PHP5

110

SimpleXML

La extensión SimpleXML es una forma fácil y sencilla de hacer uso de documentos XML.

Convierte XML a un objeto SimpleXML. De dos maneras:

Haciendo uso del constructor $xml = new SimpleXMLElement('prueba.xml',null,TRUE); $a = new SimpleXMLElement('<a><b/></a>');

Usando funciones $xml = simplexml_load_file('prueba.xml'); $xml = simplexml_load_string('<animales><animal

raza="perro">guau</animal></animales>');

Page 111: Introducción a PHP5

111

SimpleXML (2)

Para los siguientes ejemplos supondremos que existe el archivo animales.xml con el siguiente contenido.

<animales><animal raza="perro">

<patas>4</patas><clase>mammalia</clase><longevidad>15</longevidad>

</animal><animal raza="gato">

<patas>4</patas><clase>mammalia</clase><longevidad>16</longevidad>

</animal><animal raza="periquito">

<patas>2</patas><clase>aves</clase><longevidad>6</longevidad>

</animal></animales>

Page 112: Introducción a PHP5

112

SimpleXML (2)

Para acceder a los datos, entre otros, podemos usar: $elem->nomElem

Accedemos al elemento de nombre 'nomElem' Si hay varios elementos con dicho nombre, devolverá una matriz

$elem->children() Devuelve una lista con sus subelementos sobre la que

podemos iterar $elem->attributes()

Devuelve una lista con sus atributos Podemos acceder a un atributo concreto:

$elem->attributes()->nombreAtributo

Page 113: Introducción a PHP5

113

SimpleXML (3)

Ejemplo simple de lectura

Explorando el XML...

$xml = new SimpleXMLElement('animales.xml',null,TRUE);

foreach ($xml->animal as $animal) {echo 'El '.$animal->attributes()->raza;echo ' (<span style="font-style:italic">'.$animal->clase. '</span>)';echo ' vive una media de '.$animal->longevidad.' años y tiene ';echo $animal->patas.' patas.<br />';

}

foreach ($xml->animal as $animal) {echo '<ul><li>Animal: '.$animal->attributes()->raza.'</li>';echo '<ul>';foreach ($animal->children() as $elemento=>$valor) {

echo '<li>'.$elemento.': '.$valor.'</li>';}echo '</ul></ul>';

}

Page 114: Introducción a PHP5

114

SimpleXML (4)

Modificar el XML $nuevoElemento = $xml->addChild('nombre'); $nuevoElemento = $xml->addChild('nombre','valor'); $elemento->addAttribute('nombre','valor');

Mostrarlo $xml->asXML(); El objeto SimpleXML no facilita la escritura en un

archivo Para ver correctamente en el navegador podemos

hacer uso de la función htmlentities que traduce los caracteres especiales a caracteres HTML.

Page 115: Introducción a PHP5

115

SimpleXML (5)

Ejemplos de modificación Que SimpleXML no escriba en ficheros no quiere decir

que en PHP no haya múltiples formas de hacerlo.

Para más ejemplos, aquí.

$xml = new SimpleXMLElement('animales.xml',null,TRUE);

$panda = $xml->addChild('animal');$panda->addAttribute('raza','oso panda');$patas = $panda->addChild('patas','4');$clase = $panda->addChild('clase','mammalia');$edad = $panda->addChild('longevidad','12');

echo $xml->asXML(); // Mejor ved el código fuente//echo htmlentities($xml->asXML()); // Para verlo bien desde el navegador

Page 116: Introducción a PHP5

116

SimpleXML (6)

Que SimpleXML no escriba en ficheros no quiere decir que en PHP no haya otras formas de hacerlo. La que se propone a continuación hace uso de las

funciones de manejo de ficheros.$nombre_archivo = 'animales.xml';$contenido = $xml->asXML();if (is_writable($nombre_archivo)) { if (!$gestor = fopen($nombre_archivo, 'w')) { echo "No se puede abrir el archivo ($nombre_archivo)"; exit; } if (fwrite($gestor, $contenido) === FALSE) { echo "No se puede escribir al archivo ($nombre_archivo)"; exit; } echo "Éxito, se escribió ($contenido) al archivo ($nombre_archivo)"; fclose($gestor);} else echo "No se puede escribir sobre el archivo $nombre_archivo";

Page 117: Introducción a PHP5

117

XTemplate

XTemplate es una clase cuyo objetivo es permitir separar la vista (capa de presentación) de la lógica del script PHP. Almacena el HTML de forma independiente al código

Podemos editar el HTML con nuestro editor preferido Los programadores se dedican a lo suyo (código) y los

diseñadores concentran sus fuerzas en la presentación. Podemos parametrizar el HTML, hacer bucles, etc.

(para hacer dinámica la página, si no a ver para que queremos PHP... :-D)

Se usa en muchos proyectos comerciales libres SugarCRM, Drupal entre otros.

Page 118: Introducción a PHP5

118

XTemplate (2)

Por lo tanto, para hacer uso de XTemplate, tendremos: Una plantilla en base a la cual se generará el HTML

final. Esta plantilla está escrita 100% en HTML.

El objeto XTemplate, que nos provee de unos métodos a los que llamaremos desde nuestra aplicación en PHP para ir “rellenando” la plantilla con datos.

Page 119: Introducción a PHP5

119

XTemplate (3)

La plantilla HTML debe contener ciertos elementos: Secciones.

Son los trozos en los que se divide la plantilla. Delimitadas por:

<!-- BEGIN: nombreSeccion --> <!-- END: nombreSeccion -->

Pueden ser analizadas más de una vez, creando bucles. Código a reemplazar

Entre corchetes Cómo se verá, se pueden usar matrices con claves para

hacer varias asignaciones a la vez Para ello en la plantilla habrá algo semejante a: {DATA.ID} y

{DATA.NAME}

Page 120: Introducción a PHP5

120

XTemplate (4)

Ejemplo: listadoUsuarios.html<!-- BEGIN: main --><html><head><title>Listado usuarios</title></head><body>

<h1>{TITULO}</h1><!-- BEGIN: table --><table><thead>

<tr><th>Nombre</th><th colspan=”2”>Apellidos</th></tr></thead><tbody><!-- BEGIN: row -->

<tr> (...)<td width="30%">{PERSONA.APELLIDO1}</td><td width="30%">{PERSONA.APELLIDO2}</td></tr>

<!-- END: row --><!-- BEGIN: norow -->

<tr> <td colspan="3" align="center">Nada.</td></tr><!-- END: norow -->

</tbody></table><!-- END: table -->

</body></html><!-- END: main -->

Page 121: Introducción a PHP5

121

XTemplate (5)

Para usar XTemplate debemos: Bajarnos el código :-) Incluir el archivo xtemplate.class.php, allá donde

queramos usar sus funcionalidades require_once('PATH/xtemplate.class.php');

Crear nuestra clase XTemplate, en base al archivo en el que se incluye el HTML

$xtpl = new XTemplate('listaDetalles.html'); El archivo que nos bajemos contiene documentación y

ejemplos muy ilustrativos que también se pueden encontrar en su sitio web.

Page 122: Introducción a PHP5

122

XTemplate (6)

Métodos de la clase XTemplate más importantes: Set null string

Asignar un valor a los nulos Nulo: cuando no existe la variable que se trata de asignar,

cuando no se asigna una variable, cuando el valor de lo asignado es “”, etc.

$xtpl->set_null_string('-'); Assign

Esencial. Sirve para asignar un valor a los elementos del HTML encerrados entre corchetes.

$xtpl->assign('TITULO', $titulo); $xtpl->assign('PERSONA', $arrayConDatos);

// asigna $array['ID'] a PERSONA.ID, $array['NAME']...

Page 123: Introducción a PHP5

123

XTemplate (7)

Parse Analiza sintácticamente el trozo de código delimitado por

<!-- BEGIN: nombre --> y <!-- END: nombre --> En otras palabras, va generando el trozo correspondiente

del HTML final en base a la plantilla $xtpl->parse('main.table.row.cell');

Text Devuelve un string con el HTML construido por el parse.

Out Imprime el HTML que se ha construido con “parse”. $xtpl->out('main'); Equivalente a echo $xtpl->text('main');

Page 124: Introducción a PHP5

124

XTemplate (8)

Ejemplo de uso de una plantilla (listado.php):// definición del array$usu[0]['USERNAME']='twolf';(...)require_once('xtpl/xtemplate.class.php');$xtpl = new XTemplate('listadoUsuarios.html');$xtpl->set_null_string('-');$xtpl->assign('TITULO','Listado de usuarios');if(isset($usu) && is_array($usu)) {

$primero = true;foreach($usu as $usuario) {

$xtpl->assign('CHECKED',($primero)?'checked="checked"':'');$xtpl->assign('PERSONA',$usuario);$primero = false;$xtpl->parse('main.table.row');

}} else $xtpl->parse('main.table.norow');$xtpl->parse('main.table'); $xtpl->parse('main');$xtpl->out('main');

Page 125: Introducción a PHP5

125

PHP en línea de comandos

PHP no sólo funciona junto a un servidor web. Una forma curiosa de usarlo consiste en ejecutar un script desde la consola.

Mirar ejemplo: scriptTiempo No funciona del todo bien Es arcaico y nada óptimo

Busca datos dentro de una página HTML mediante expresiones regulares y sabiendo de antemano en que línea mirar

Sirve para hacerse una idea

Page 126: Introducción a PHP5

126

PHP en línea de comandos (2)

Instalar el interprete para línea de comandos sudo aptitude install php5-cli

Comprobar si el script tiene los permisos necesarios para ejecutarse

Abrimos la consola y nos ubicamos en la carpeta del script (de lo contrario bastaría con especificar su ruta el ejecutarlo).

Ejecutarlo sudo ./scriptTiempo

sudo ./scriptTiempo -a

etc.

Page 127: Introducción a PHP5

127

PEAR

PHP Extensión and Application Repository promueve la reutilización de código que realizan tareas comunes

Objetivos: promover una biblioteca de código bien estructurada mantener un sistema de distribución y mantenimiento

de paquetes de código promover un estilo de codificación estándar

Si la funcionalidad de base que ofrece PHP es ya de por si extensa, PEAR la aumenta sustancialmente.

Page 128: Introducción a PHP5

128

PEAR (2)

Para usar alguno de los paquetes de PEAR, basta con: Instalar “php-pear”

sudo aptitude install php-pear PEAR es sistema de distribución y mantenimiento de

paquetes de código que mencionábamos antes Instalar el paquete que queramos usar haciendo uso de

PEAR sudo pear install <nombre_paquete>

Incluirlo en el script en el que lo vayamos a usar: require_once 'nombre_paquete.php';

Page 129: Introducción a PHP5

129

PEAR (3)

Ejemplo: Instalaremos los paquetes “Mail” y “Net_SMTP”

sudo pear install Mail Net_SMTP Lo usamos:

<?phprequire_once 'Mail.php';$params['host'] = 'mail.deusto.es'; // p.e.$params['auth'] = TRUE; $params['debug'] = TRUE;$params['username'] = '[email protected]';$params['password'] = 'passwd';$obj = &Mail::factory('smtp',$params);$recipients = '[email protected]';$headers['From'] = '[email protected]';$headers['To'] = '[email protected]';$headers['Subject'] = 'Asunto interesante';$body = 'Mensaje más interesante aún (si cabe).';$obj->send($recipients, $headers, $body);?>

Page 130: Introducción a PHP5

130

PEAR (4)

Lo cual nos devolverá:(porque hemos activado el modo debug)

DEBUG: Recv: 220 smtp-in2.deusto.es ESMTPDEBUG: Send: EHLO localhost(...)DEBUG: Send: MAIL FROM:<[email protected]>(...)DEBUG: Send: DATADEBUG: Recv: 354 End data with <CR><LF>.<CR><LF>DEBUG: Send: From: [email protected]: [email protected]: Asunto interesante

Mensaje más interesante aún (si cabe)..

DEBUG: Recv: 250 2.0.0 Ok: queued as 2F2F346A7E7DEBUG: Send: QUITDEBUG: Recv: 221 2.0.0 Bye

Page 131: Introducción a PHP5

131

¿Por dónde continuar?

A continuación os enumero algunos documentos y sitios webs utiles para los que queráis continuar profundizando en PHP (espero que todos ;-) ). PHP5 Power Programming

Libro muy completo, actualizado y encima gratuito (open publication license). Está en inglés, pero creo que puede ser un buen libro de referencia.

PHP.net Dónde mejor viene cada cosa explicada.

W3Schools Web muy útil: sencilla pero clarificadora. Es la suelo usar

para dudas puntuales de CSS o HTML.

Page 132: Introducción a PHP5

132

¿Por dónde continuar? (2)

PHP Tutorials - Herong's Tutorial Notes Libro escrito por el autor mientras aprendía PHP (con

bastantes ejemplos). Es gratuito en su versión ONLINE, pero por 5$ lo tenéis en PDF.

Curso de la Universidad de Sevilla Bueno para reforzar cosas vistas. Trata con mayor

detalle algunos de los temas básicos vistos y propone ejercicios interesantes para practicar.

Desarrolloweb.com Un manual (que puede que en algunas secciones no se

encuentre actualizado) y muchos ejemplos, muy detallados. Es una referencia un poco nostálgica, porque es donde comencé yo en esto de PHP :-)

Page 133: Introducción a PHP5

133

¿Por dónde continuar? (3)

Chuleta de PHP Para recordar algunas funciones útiles del lenguaje. En

este curso no las hemos visto. Y cualquiera que podáis encontrar...

...si veis alguno que creáis interesante, comentadme y actualizo este documento.

Page 134: Introducción a PHP5

134

Agur ;-)

Para cualquier corrección, sugerencia, o comentario en general, no dudéis en poneros en contacto conmigo en:

aitor @ twolf . eu

Espero que os haya resultado útil el cursillo y en cualquier caso, gracias por aguantar tan pacientemente mi inexperiencia.