Академический Документы
Профессиональный Документы
Культура Документы
AitorGmezGoiri
aitor@twolf.eu www.twolf.eu
Copyleft
Esta presentacin ha sido realizada por Aitor Gmez Goiri (twolf), en base a la presentacin realizada por Jorge Garca 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 trminos 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
ndice
ndice
Introduccin
Qu es? Caractersticas Pros y contras Historia PHP5 Cmo funciona? Configuracin del servidor Apache
Qu es?
PHP Hypertext Preprocessor Lenguaje interpretado o de scripting Sintaxis similar a C, Java o Perl Proposito general
Aplicaciones web Aplicaciones para lnea de comandos (PHPCLI) Aplicaciones con interfaz grfica
Open Source
Caractersticas
Alto rendimiento Integracin con bases de datos Bibliotecas incorporadas Facilidad de aprendizaje y uso Portabilidad Gran documentacin on-line (php.net) etc.
Pros y contras
PHP is the BASIC of the 21st Century PHP Sucks, But It Doesn't Matter
Historia
1994: Rasmus Lerdorf quiere mostrar su currculum vtae y guardar ciertos datos cmo estadsticas sobre el trfico que reciba su web y crea Personal Home Page
Se empez a extender...
Historia (2)
Ms modular, rendimiento, funcionalidad... Su uso se extendi enormemente Zend Engine 2.0 En 2008, se convirti en la nica versin estable bajo desarrollo.
2004: PHP5
PHP 5
SimpleXML, para el proceso sencillo de XML PDO, interfaz de orientacin a objetos para interactuar con la base de datos. Extensiones DOM y XSL
11
Cmo funciona?
Mozilla, Konqueror, Opera, Nautilus... (y hojas de estilo, Javascript, etc, pero eso est fuera del alcance de este curso ;-)
12
El navegador puede:
ste es el ordenador cliente La pgina se muestra tal y como est guardada, no hay proceso posible: tiene que ser HTML
13
Servidor web interpreta cdigo PHP para generar la pgina HTML. Es probable que en el cdigo se hagan llamadas a bases de datos para obtener datos con lo que completar dicho HTML.
14
Si est cargado y configurado, en caso de que el fichero pedido sea una pgina PHP, se procesa y lo que se enva es el resultado
15
El proceso descrito aqu es para configurar el servidor en una distribucin Ubuntu GNU/Linux
16
17
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
Si no deberis trastear con el grupo www-data, el directorio /var/www o los ficheros /etc/apache2/conf.d/ algo.conf
18
19
ndice
20
Fundamentos de PHP
Primeros pasos Sintaxis Tipos y variables Operadores Estructuras de control Matrices Funciones Errores Mtodos avanzados de escape Orientacin a objetos
21
Fundamentos de PHP
Primeros pasos Sintaxis Tipos y variables Operadores Estructuras de control Matrices Funciones Errores Mtodos avanzados de escape Orientacin a objetos
22
Primeros pasos
Sirve para crear pginas HTML que despus se enviarn al cliente, y para realizar otras operaciones
Podemos generar una pgina segn el contenido de un formulario... ... o segn el contenido de una base de datos... ... o segn la hora del servidor... ...
23
El servidor procesa el cdigo que hay entre <?php y ? > (o smplemente <? .... ?>) <?php echo ("Hola mundo!"); ?> El servidor evala la expresin, y escribe su resultado en la pgina web <?="Hola mundo!" ?>
No puede haber ms cdigo que la expresin que queremos evaluar y sacar por pantalla
24
Tenemos la pgina:
<html> <body> <?php echo 'Hola mundo!'; ?> </body> </html>
Si encuentra HTML, lo enva directamente al cliente Si encuentra una etiqueta de PHP, procesa el cdigo, y si el cdigo escribe algo, esa "escritura" se incluye en el HTML que se enva al cliente
25
26
Fundamentos de PHP
Primeros pasos Sintaxis Tipos y variables Operadores Estructuras de control Matrices Funciones Errores Mtodos avanzados de escape Orientacin a objetos
27
Sintaxis
Las instrucciones se escriben separadas por ';' Las estructuras de control son muy similares
if, while, switch, for, etc. phpinfo(); strlen('abcdef'); // 6 // Una sola lnea # Una sola lnea /* Varias lneas */
28
Fundamentos de PHP
Primeros pasos Sintaxis Tipos y variables Operadores Estructuras de control Matrices Funciones Errores Mtodos avanzados de escape Orientacin a objetos
29
Tipos
Boolean, integer, float, string, array, object,... no es declarado por el programador PHP lo decide en tiempo de ejecucin 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; ?>
30
Variables
Ej.: si en una variable hemos guardado un entero, podemos utilizarlo como un String, y viceversa (siempre que el String represente un entero) $usuario = 'jose';
Variables (2)
Fundamentos de PHP
Primeros pasos Sintaxis Tipos y variables Operadores Estructuras de control Matrices Funciones Errores Mtodos avanzados de escape Orientacin a objetos
33
Operadores
Aritmticos
Operador Simbolo Ejemplo Resultado Negacin -3 -3 Adicin + 3+3 6 Substraccin 45-5 40 Multiplicacin * 5*3 15 Divisin / 60/3 20 Mdulo % 7%2 1 Incremento ++ $x=3; $x++; 4 Operador Asignacin Asignacin Asignacin Asignacin Asignacin Asignacin Asignacin Simbolo $x = $y $x += $y $x -= $y $x *= $y $x /= $y $x %= $y $s .= $x Equivalencia $x = $y $x = $x + $y $x = $x $y $x = $x * $y $x = $x / $y $x = $x % $y $s = $s . $x
34
Asignacin
Operadores (2)
Comparacin
Smbolo Ejemplo Resultado == 3 == 3 cierto === 3 === 3 falso != 7 !=7 falso <> 9 <> 8 cierto No idnticos !== 4 !== 4 cierto Menor < 1<3 cierto Mayor > 3>4 falso Menor o igual <= 2 <= 1 falso
Lgicos Otros
Simbolo Ejemplo Resultado && TRUE && FALSE falso || TRUE || FALSE cierto ! ! TRUE falso
35
Fundamentos de PHP
Primeros pasos Sintaxis Tipos y variables Operadores Estructuras de control Matrices Funciones Errores Mtodos avanzados de escape Orientacin a objetos
36
Estructuras de control
37
Condicionales
38
Condicionales (2)
Condicional mltiple switch (<expresin>) { case <valor 1>: ... break; case <valor 2>: ... break; ... case <valor n>: ... break; default: ... break; }
39
Condicionales (3)
Ejemplo
//$x = 4; //descomentadlo despus 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; } }
40
Bucles
while
Mientras se cumpla una condicin, se ejecuta al cdigo que hay en el (puede no ejecutarse nunca) Ejemplo:
$a = 1; while ( $a < 10) { echo "<p>El nmero actual es $a</p>"; $a++; }
41
Bucles (2)
do ... while
Se ejecuta el cdigo mientras se cumpla una condicin (al menos se ejecuta una vez) Ejemplo
$a = 0; do { $a++; echo ('<p>El nmero es '.$a.'</p>'); } while ( $a < 10);
42
Bucles (3)
for
Ejecuta un cdigo mientas se cumpla una condicin (puede no ejecutarse ninguna vez) Opcionalmente, se puede proporcionar:
Una expresin de inicializacin, se ejecuta la primera vez Una expresin de condicin Una expresin de paso, se ejecuta al final de cada pasada del bucle
Ejemplo:
for ($a = 1; $a <= 10; $a++) { echo ('<p>El nmero es '.$a.'</p>'); }
43
Bucles (4)
Foreach
Se ejecuta un determinado cdigo por cada uno de los elementos de una coleccin 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>"); }
44
Bucles (5)
Ejemplo
include y require
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 pgina
vars.php <?php $color = 'verde'; $fruta = 'manzana'; ?> test.php <?php echo "Una $fruta $color"; // Una include 'vars.php'; echo "Una $fruta $color"; // Una manzana verde ?>
46
Fundamentos de PHP
Primeros pasos Sintaxis Tipos y variables Operadores Estructuras de control Matrices Funciones Errores Mtodos avanzados de escape Orientacin a objetos
47
Matrices
A travs de [...]
A travs de array()
$profesiones = array('Taxista', 'Bombero', 'Alcalde'); En la posicin 0 del array est el string 'Taxista", en la 1 'Bombero' y as sucesivamente
48
Matrices (2)
$matriz = array('nombre' => 'Aitor', 'apellido' => 'Gomez', 'edad' => 23); Si hacemos: echo $matriz['nombre']; // Obtenemos 'Aitor'
49
Matrices (3)
Modificacin de elementos
Eliminacin de elementos
50
Matrices (4)
La estructura foreach, adems de ser utilizada como hemos visto en la seccin 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 />"; }
51
Fundamentos de PHP
Primeros pasos Sintaxis Tipos y variables Operadores Estructuras de control Matrices Funciones Errores Mtodos avanzados de escape Orientacin a objetos
52
Funciones
Ejemplo
function negrita($texto) { return '<b>'.$texto.'</b>'; } echo 'Quiero '.negrita('remarcar').' lo que es '.negrita('importante');
53
Fundamentos de PHP
Primeros pasos Sintaxis Tipos y variables Operadores Estructuras de control Matrices Funciones Errores Mtodos avanzados de escape Orientacin a objetos
54
Errores
Para tratar los errores que se produzcan en nuestra aplicacin web podemos optar por:
Hacer uso de excepciones Finalizar el script (con funciones die, exit, etc.)
55
Excepciones
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(); }
56
Funcin die
Equivalente a exit
57
Fundamentos de PHP
Primeros pasos Sintaxis Tipos y variables Operadores Estructuras de control Matrices Funciones Errores Mtodos avanzados de escape Orientacin a objetos
58
59
Fundamentos de PHP
Primeros pasos Sintaxis Tipos y variables Operadores Estructuras de control Matrices Funciones Errores Mtodos avanzados de escape Orientacin a objetos
60
Objetos
Objetos (2)
Creacin de objetos
Si tenemos una clase "ClaseA" podremos crear objetos mediante el operador "new" $objeto = new ClaseA(); Es una referencia al propio objeto. Se usa dentro de los mtodos
class ClaseA { protected $num; function getNum() { return $this->num; } }
El puntero "$this"
62
Objetos (3)
Operador de resolucin ::
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();
63
Objetos (4)
Constructores
Objetos (5)
Destructor __destruct()
Se le llamar tan pronto como se borren todas las referencias a un objeto en particular Existen unos nombres de mtodos que tienen asociada una funcionalidad concreta __toString()
Mtodos mgicos
Permite a una clase decidir como actuar cuando se la convierte en cadena Se llama al crear una copia de un objeto
65
__clone()
Objetos (6)
ndice
67
Informacin de usuario
68
Superglobales
$GLOBALS
para definir variables globales contiene informacin tal como cabeceras, rutas y ubicaciones de scripts
<?php echo $_SERVER['SERVER_ADDR'].'<br />'; echo $_SERVER['SERVER_NAME'].'<br />'; echo $_SERVER['QUERY_STRING'].'<br />'; echo $_SERVER['DOCUMENT_ROOT'].'<br />'; echo $_SERVER['REMOTE_ADDR'].'<br />'; ?>
69
$_SERVER
Superglobales (2)
etc.
GET y POST
71
73
Sesiones
Variables de sesin
Podemos guardar informacin del usuario que se mantendr mientras no se cierre el navegador
Se transmite de unas pginas a otras El ejemplo ms clsico: carrito de la compra Otra utilidad: validacin de usuarios
76
Sesiones (2)
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"]; ?>
77
Sesiones (3)
<html><body> <?php if ($registrado) { ?> <p>Bienvenido, <b><?=$login?></b></p> <p><a href="private_login.php">Link a una pgina 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>
78
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>
79
ndice
80
Introduccin Configuracin del servidor de base de datos Creacin de un usuario en la base de datos Creacin de una tabla PHP Data Objects Importar un archivo a base de datos Prepared statements Ejercicio favoritos Ejemplo prctico: guardar ficheros
81
Introduccin
Uso de mdulos 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
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 orientacin a objetos
82
Paquetes a instalar
En caso de que la base de datos tenga un ordenador servidor propio, habra que instalar mysql-server en l, y mysql-client en el servidor web php5-mysql instala el mdulo que permite a PHP interactuar con MySQL phpmyadmin permite administracin web
La instalacin para el cursillo tiene cmo contrasea para el usuario administrador (root): "r00tr00t". No obstante crearemos un nuevo usuario para nuestros menesteres
83
Accedemos a PHPMyAdmin
http://localhost/phpmyadmin
84
Creacin de un usuario
85
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
86
Completamos y grabamos
87
Una vez instalado el mdulo de MySQL, tenemos un API de funciones para interactuar con distintas bases de datos. Por supuesto existe un driver para MySQL. Pasos a seguir:
Cerrar la conexin con la base de datos (con el mtodo que explicamos, PDO, no har falta que nos encarguemos explcitamente de cerrar nada, ya que es una tarea que se realizar implcitamente al destruir el objeto correspondiente)
88
La conexin a la base de datos devuelve un identificativo de la conexin a la base de datos Debemos encerrar la construccin del objeto PDO en un try/catch
try { $pdo = new PDO('mysql:dbname=php;host=localhost','php','php'); } catch (PDOException $e) { echo 'Connection failed: ' . $e->getMessage(); }
89
$pdo->query("sentencia_sql");
En el caso de realizarse una seleccin, se devolver un objeto PDOStatement con el resultado de la misma
90
Una vez realizada la seleccin, podemos recorrer el resultado utilizando el mtodo fetch o simplemente haciendo un foreach
$sql = 'SELECT * FROM animales'; foreach ($pdo->query($sql) as $row) { echo '('.$row['identificador'].','.$row['denominacion'].')'.\n; }
Importar archivo
Seleccionamos el fichero animales.sql y continuamos. Antes de ejecutar seleccionSimple.php, no os olvidis de verificar que los datos de la conexin son los correctos.
92
Prepared Statements
El anterior mtodo (PDO->query()), est bien cuando se va a ejecutar una sentencia SQL una nica vez. Para consultas que se van a realizar mltiples veces, se puede obtener un mejor rendimiento preparando el objeto PDOStatement a usar, y realizando despus 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 parmetros.
93
Ejemplo insercionPreparada.php:
$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();
Probar las otras formas de insercin preparada que existen en dicho fichero descomentandolas.
94
Ejercicio favoritos
Dar de alta una tabla en la base de datos (con la estructura que se quiera)
Insertar elementos en la tabla 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 pgina, pero con el elemento seleccionado (sus datos aparecen en el formulario)
95
Propuesta de tabla
Tipo Longitud Extra Primaria ndice INT 5 auto_increment S VARCHAR 20 S VARCHAR 30 LONGTEXT
96
Propuesta interfaz
97
Estructura
Si quisiramos dividir la aplicacin en varias capas (en archivos y carpetas), podramos empezar consultando aqu. En el ejercicio dividiremos la propia pgina en varios "bloques". Conexin a la base de datos Gestin de los comandos
Propuesta de estructura
Todos los elementos de tipo "submit" tienen como nombre "accion" y como "value" la accion que realizan
98
Al seleccionar un grupo, se pasar como parmetro el cdigo del mismo Formulario: si hay algn grupo seleccionado, sus valores se muestran en los componentes, se muestran los botones "modificar" y "eliminar" y se guarda el cdigo seleccionado en un campo "hidden" Listado: recorrido de la tabla. Cada elemento es un link a la propia pgina con el formato:
Pgina web en s
Ejemplo prctico
Desde un formulario se enva 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
100
El formulario
multipart/form-data
El fichero se enva con un control file El control hidden MAX_FILE_SIZE indica el tamao mximo del fichero a enviar
101
Traducido a HTML...
<form enctype="multipart/form-data" action="procesar_fichero.php" method="post"> <fieldset> <legend>Seleccin 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>
102
Insertar el fichero
FIC_Codigo: autonumrico, clave primaria FIC_Data: los datos de la imagen FIC_Type: tipo de fichero
$_FILES['fichero']['name'] : nombre del fichero $_FILES['fichero']['size'] : tamao del fichero $_FILES['fichero']['type'] : tipo del fichero $_FILES['fichero']['tmp_name'] : fichero temporal
103
Insertar el fichero
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; }
104
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 codificacin 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);
105
Recuperar la imagen
Usaremos una pgina que recibe como parmetro el cdigo 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)
106
Recuperar la imagen
ndice
108
Otros
PDT PHPeclipse
109
SimpleXML
La extensin SimpleXML es una forma fcil y sencilla de hacer uso de documentos XML. Convierte XML a un objeto SimpleXML.
De dos maneras:
$xml = new SimpleXMLElement('prueba.xml',null,TRUE); $a = new SimpleXMLElement('<a><b/></a>'); $xml = simplexml_load_file('prueba.xml'); $xml = simplexml_load_string('<animales><animal raza="perro">guau</animal></animales>');
Usando funciones
110
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>
111
SimpleXML (2)
$elem->nomElem
$elem->children()
Devuelve una lista con sus subelementos sobre la que podemos iterar Devuelve una lista con sus atributos Podemos acceder a un atributo concreto:
$elem->attributes()
$elem->attributes()->nombreAtributo
112
SimpleXML (3)
Explorando el XML...
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>'; }
113
SimpleXML (4)
Modificar el XML
$nuevoElemento = $xml->addChild('nombre'); $nuevoElemento = $xml->addChild('nombre','valor'); $elemento->addAttribute('nombre','valor'); $xml->asXML(); El objeto SimpleXML no facilita la escritura en un archivo Para ver correctamente en el navegador podemos hacer uso de la funcin htmlentities que traduce los caracteres especiales a caracteres HTML.
114
Mostrarlo
SimpleXML (5)
Ejemplos de modificacin
Que SimpleXML no escriba en ficheros no quiere decir que en PHP no haya mltiples formas de hacerlo.
$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 cdigo fuente //echo htmlentities($xml->asXML()); // Para verlo bien desde el navegador
SimpleXML (6)
Que SimpleXML no escriba en ficheros no quiere decir que en PHP no haya otras formas de hacerlo.
XTemplate
XTemplate es una clase cuyo objetivo es permitir separar la vista (capa de presentacin) de la lgica del script PHP.
Podemos editar el HTML con nuestro editor preferido Los programadores se dedican a lo suyo (cdigo) y los diseadores concentran sus fuerzas en la presentacin.
Podemos parametrizar el HTML, hacer bucles, etc. (para hacer dinmica la pgina, si no a ver para que queremos PHP... :-D) SugarCRM, Drupal entre otros.
117
XTemplate (2)
El objeto XTemplate, que nos provee de unos mtodos a los que llamaremos desde nuestra aplicacin en PHP para ir rellenando la plantilla con datos.
118
XTemplate (3)
Secciones.
Pueden ser analizadas ms de una vez, creando bucles. Entre corchetes Cmo se ver, se pueden usar matrices con claves para hacer varias asignaciones a la vez
Cdigo a reemplazar
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 -->
120
XTemplate (5)
Bajarnos el cdigo :-) Incluir el archivo xtemplate.class.php, all donde queramos usar sus funcionalidades
require_once('PATH/xtemplate.class.php');
El archivo que nos bajemos contiene documentacin y ejemplos muy ilustrativos que tambin se pueden encontrar en su sitio web.
121
XTemplate (6)
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('-'); 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']...
122
Assign
XTemplate (7)
Parse
Analiza sintcticamente el trozo de cdigo 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'); Devuelve un string con el HTML construido por el parse. Imprime el HTML que se ha construido con parse. $xtpl->out('main'); Equivalente a echo $xtpl->text('main');
123
Text
Out
XTemplate (8)
PHP no slo funciona junto a un servidor web. Una forma curiosa de usarlo consiste en ejecutar un script desde la consola. Mirar ejemplo: scriptTiempo
Busca datos dentro de una pgina HTML mediante expresiones regulares y sabiendo de antemano en que lnea mirar
125
Comprobar si el script tiene los permisos necesarios para ejecutarse Abrimos la consola y nos ubicamos en la carpeta del script (de lo contrario bastara con especificar su ruta el ejecutarlo). Ejecutarlo
PEAR
PHP Extensin and Application Repository promueve la reutilizacin de cdigo que realizan tareas comunes Objetivos:
promover una biblioteca de cdigo bien estructurada mantener un sistema de distribucin y mantenimiento de paquetes de cdigo promover un estilo de codificacin estndar
Si la funcionalidad de base que ofrece PHP es ya de por si extensa, PEAR la aumenta sustancialmente.
127
PEAR (2)
Instalar php-pear
sudo aptitude install php-pear PEAR es sistema de distribucin y mantenimiento de paquetes de cdigo que mencionbamos antes
PEAR (3)
Ejemplo:
Lo usamos:
<?php require_once 'Mail.php'; $params['host'] = 'mail.deusto.es'; // p.e. $params['auth'] = TRUE; $params['debug'] = TRUE; $params['username'] = '9aigomez@rigel.deusto.es'; $params['password'] = 'passwd'; $obj = &Mail::factory('smtp',$params); $recipients = 'tulvur@gmail.com'; $headers['From'] = '9aigomez@rigel.deusto.es'; $headers['To'] = 'tulvur@gmail.com'; $headers['Subject'] = 'Asunto interesante'; $body = 'Mensaje ms interesante an (si cabe).'; $obj->send($recipients, $headers, $body); ?>
129
PEAR (4)
A continuacin os enumero algunos documentos y sitios webs utiles para los que queris continuar profundizando en PHP (espero que todos ;-) ).
Libro muy completo, actualizado y encima gratuito (open publication license). Est en ingls, pero creo que puede ser un buen libro de referencia. Dnde mejor viene cada cosa explicada. Web muy til: sencilla pero clarificadora. Es la suelo usar para dudas puntuales de CSS o HTML.
131
PHP.net
W3Schools
Libro escrito por el autor mientras aprenda PHP (con bastantes ejemplos). Es gratuito en su versin ONLINE, pero por 5$ lo tenis en PDF. Bueno para reforzar cosas vistas. Trata con mayor detalle algunos de los temas bsicos vistos y propone ejercicios interesantes para practicar. Un manual (que puede que en algunas secciones no se encuentre actualizado) y muchos ejemplos, muy detallados. Es una referencia un poco nostlgica, porque es donde comenc yo en esto de PHP :-)
132
Desarrolloweb.com
Chuleta de PHP
Para recordar algunas funciones tiles del lenguaje. En este curso no las hemos visto. ...si veis alguno que creis interesante, comentadme y actualizo este documento.
133
Agur ;-)
Para cualquier correccin, sugerencia, o comentario en general, no dudis 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.
134