anaya php 5

384
Manual Imprescindible de PHP5 Luis Miguel Cabezas Granado Prólogo de Zeev Suraski y Andi Gutmans ANAYA MULTIMEDIA

Upload: api-25915597

Post on 07-Jun-2015

6.274 views

Category:

Documents


7 download

DESCRIPTION

Libro de anaya de PHP5. Completo.

TRANSCRIPT

Manual Imprescindible de

PHP5

Luis Miguel Cabezas Granado

Prlogo de Zeev Suraski y Andi Gutmans

ANAYAMULTIMEDIA

MANUAL IMPRESCINDIBLERESPONSABLE EDITORIAL:

Eugenio Tuya FeijoILUSTRACIN DE CUBIERTA:

Cecilia Poza MeleroREALIZACIN DE CUBIERTA:

Gracia Fernndez-Pacheco

Todos los nombres propios de programas, sistemas operativos, equipos hardware, etc. que aparecen en este libro son marcas registradas de sus respectivas compaas u organizaciones.

Reservados todos los derechos. El contenido de esta obra est protegido por la ley, que establece penas de prisin y / o multas, adems de las correspondientes indemnizaciones por daos y perjuicios, para quienes reprodujeren, plagiaren, distribuyeren o comunicasen pblicamente, en todo o en parte, una obra literaria, artstica o cientfica, o su transformacin, interpretacin o ejecucin artstica fijada en cualquier tipo de soporte o comunicada a travs de cualquier medio, sin la preceptiva autorizacin.

EDICIONES ANA YA MULTIMEDIA (GRUPO ANAYA, S.A.), 2004 Juan Ignacio Luca de Tena, 15. 28027 Madrid Depsito legal: M-44.920-2004 ISBN: 84-415-1785-1 Printed in Spain Imprime: Artes Grficas Guemo, S.L. Febrero, 32. Madrid 28022

A mi mujer Mara Fernanda por creer en nuestro Proyecto de vida.

AgradecimientosFinalizar este libro ha sido una odisea donde han intervenido muchas personas y factores, mudanza incluida. Para empezar me gustara agradecer a Marta Camarero y a Eugenio Tuya su fe en m como escritor. Me dieron nimos desde el principio y un poquito de prisa. A Zeev Suraski y Andi Gutmans, creadores de PHP 5, por crear el lenguaje y tratarme como a uno de los suyos en los seminar de www.zend.com. Adems, tengo que agradecerles la rapidez con la que escribieron el prlogo del libro. A Marco Tabini, director de la revista canadiense PHParchitect, por enviarme el manual de Certificacin PHP en papel y no en PDF. A Tim Converse y Joyce Park por escribir PHP5 and MySQL Bible, cuyos conocimientos me beb en apenas 3 das. A Harry Fuecks por escribir el mejor libro de PHP de todos los tiempos The PHP Anthology, que me hizo reorientar todos los esfuerzos a la innovacin. A la Asociacin Regional de Universidades Populares de Extremadura (AUPEX) por probar todos mis programas escritos en PHP (libros de visita, foros, nccproject, newton, etctera). Espero dar algn da con la tecla. A mis compaeros de trabajo Pako, Palomo, Javi y Pedro por las largas horas de discusin en torno a Delphi, Java, C# y, por supuesto, PHP. A Justo Cabezas, porque todo lo que me regal fueron libros de informtica, y encima escritos por l. Sigo tus pasos. A los grupos de usuario de gnuLinux de Extremadura www.sinuh.org y www.gulex.org, por ser una fuente inagotable de conocimientos. Por ltimo: A mi padre Ramn, que ya no est, a mi madre Felisa y a mi hermano Felipe, porque nunca entendieron nada de informtica, pero me animaron a seguir adelante con todo lo que me propuse. Al resto de la familia, porque cada uno de ellos ha tenido algo que ver en m vida y forman parte de lo que soy.

ndice

Cmo usar este libroDestinatarios de este libro Organizacin del libro Convenios que emplea este libro Los ejemplos en la Web de Anaya

1920 20 25 26

Prlogo Introduccin...Historia de PHP Nuevas Caractersticas de PHP 5 Fcil de usar Embebido en HTML Multiplataforma Licencia Open Source Multitud de Extensiones Velocidad e incorporacin de objetos Popularidad Gran Comunidad de apoyo Objetivos del libro

..27 2930 31 31 32 33 34 34 34 35 35 36

1. Introduccin a PHP 5......Introduccin

3940

8

ndice HTML esttico Tecnologas del lado del cliente Tecnologas del lado del servidor Etiquetas de PHP Nuestro primer programa en PHP 5 Repaso de HTML Cabecera y cuerpo de una pgina Web Cabecera Cuerpo del documento Prrafos y saltos de lneas Estilo de texto Enlaces de texto Listas Imgenes Tablas Resumen 40 42 43 45 46 47 47 48 48 49 49 51 51 52 53 54

2 Variables, constantes y tipos de datosVariables en PHP 5 Tipos de Variables Asignacin de variables Tipos simples Enteros (integer) Nmeros de coma flotante (double) Cadena de caracteres (string) Boolean NULL Variables de variables Constantes defined() Constantes predefinidas Funciones relacionadas con variables isset() unsetQ gettype() settype() empty() is_integer(), is_double(), is_string() intvalQ, doublevalQ, strvalQ Resumen

5556 56 57 57 58 59 59 61 62 62 63 63 64 65 ,65 66 66 67 67 67 68 68

ndice

9

3. Operadores........Introduccin Operador de asignacin Operador Unario Operadores Aritmticos Operadores de comparacin Operadores Lgicos Operador Ternario Operadores bit a bit Operadores de asignacin combinados Operador de ejecucin Operador de supresin de errores Precedencia de Operadores Resumen

.6970 70 71 71 71 73 74 74 75 76 77 78 80

,

4 Estructuras de controlIntroduccin Estructuras de eleccin if-else elseif switch Bucles while do-while for break y continu Finalizar la ejecucin de un programa Sintaxis alternativa Resumen

8182 82 82 83 84 86 86 89 ,89 92 93 93 94

5. FuncionesIntroduccin Valores de las funciones Funcin de ejemplo. Obtencin de la fecha actual Documentacin sobre funciones Funciones de usuario Definicin de funciones Parmetros insuficientes Parmetros en exceso

9596 96 97 98 99 99 101 102

10

ndice mbito de las variables Variables estticas Include() y require() Recursividad Funciones con nmero de argumentos variables Argumentos por defecto Argumentos mediante un array Mltiples argumentos con func_num_args() Llamadas por valor Llamadas por referencia Referencia a variables Funciones variables Resumen 102 104 105 105 106 106 107 109 110 111 112 113 114

6. Cadenas de caracteres y expresiones regularesIntroduccin Propiedades de las cadenas ndices de string Operadores Sintaxis para mltiples lneas Funciones de string Tamao de la cadena Posicin de los caracteres Comparacin Bsqueda de caracteres Seleccin de subcadenas Funciones de limpieza de cadenas Sustitucin de cadenas Funciones de mayscula y minscula Expresiones regulares Comprobar expresiones regulares Reemplazar patrones Resumen

115116 116 116 118 118 119 120 120 121 122 122 124 126 126 127 129 131 131

7. Conjuntos de datos del tipo array.Introduccin Creacin de arrays Asignacin directa array() Funciones que devuelven arrays

133134 134 134 135 136

ndiceArrays multidimensionales Propiedades de arrays count() in_array() Borrar ocurrencias Interactuar con arrays Funciones para avanzar en un array Funciones para retroceder en un array Intercambio de valores Inversin del contenido Mezcla de los valores Pilas Ordenacin de los valores Resumen 136 137137

11

137 138 138 140 142 143 144 145 145 146 148

& Paso de informacin entre formulariosIntroduccin Argumentos GET Formularios con GET Paso de informacin con GET Argumentos POST Variables sper-globales Resumen

.149150 150 151 155 157 158 159

9 . Programacin orientada a objetosIntroduccin Definicin de clases Instancia de clase Funcin constructor Herencia Mtodos o funciones de objeto Herencia encadenada Valores y alcance de variables Miembros pblicos, privados y protegidos Mtodos privados Mtodos protegidos Mtodos pblicos Interfaces Clases abstractas Clases con mtodos estticos

1 6 1162 163 164 165 165 166 168 168 170 170 171 171 172 172 173

12

ndice Llamadas a funciones padre Sobrecarga de mtodos Sealizacin Funciones de manejo de clases Resumen 174 176 176 177 179

10. Ficheros y almacenamiento de datosIntroduccin Funciones de lectura y escritura de ficheros Abrir el fichero Lectura de ficheros Escritura de ficheros Sistema de ficheros y directorios Copiar, borrar y renombrar Funciones de comprobacin Directorios Ficheros de configuracin Manejo de ficheros en el servidor Subida de ficheros Descarga de ficheros Resumen

181182 182 182 183 185 188 188 189 190 191 193 193 195 197

11. Bases de datos con SQL y SQLite.....Introduccin SQL SELECT Uniones INSERT UPDATE DELETE Definicin de tablas SQLite Creacin de bases de datos ltimos cambios en una tabla Seleccin de datos SQLite orientado a objetos Seleccin de registros Funciones de Array para recuperar datos Nmero de filas Moverse entre registros Resumen

..199200 200 202 203 205 206 207 207 208 209 211 212 213 214 215 216 216 218

ndice

13

12. PHP 5 y MySQLIntroduccin Administracin de usuarios Conexin a MySQL Seleccionar datos Manipulacin de datos Insertar una fila Actualizar una fila Borrar una fila Errores con las comillas Contando filas Contar filas con PHP Contar filas con MySQL Contar filas afectadas ltimo nmero insertado Bsquedas dentro de una tabla Definicin de bases de datos Creacin de bases de datos Creacin de tablas Resumen , , ,

219220 220 220 222 224 224 225 225 226 228 228 229 230 230 231 231 231 231 233

13. Sesiones y CookiesIntroduccin Sesiones en PHP 5 Instanciando sesiones Variables de sesin Problemas con los navegadores Funciones para el manejo de sesiones Cookies setcookie() Borrar una cookie Cabeceras HTTP Resumen

.....235236 237 237 239 240 241 243 243 244 245 246

14 Lectura y escritura de archivos XML....Introduccin SAX,DOMySimpleXML SAX DOM

.247248 250 250 254

14

ndice Usar DOM para leer archivos Todo es un objeto Atributos Bsquedas mltiples Escribir archivos XML con DOM Modificar archivos XML SimpleXML Resumen 255 255 256 257 257 259 259 261

15. Aplicaciones prcticas de XMLIntroduccin Compartir informacin con RSS Distintos formatos Leer un archivo RSS Escribir archivos RSS Servicios Web XML-RPC Clase IXR Cliente XML-RPC Servidor XML-RPC Usos de XML-RPC Resumen

......263264 264 264 268 269 272 273 274 275 277 277

16. Generacin de grficos con PHP 5Introduccin Grficos HTML Grficos de barras Librera GD Tipos MIME Mostrar una imagen en pantalla Crear imgenes en miniatura Generar una marca de agua Grficos estadsticos profesionales con JpGraph Grficos de barras Grficos en 3D , Resumen

279280 280 284 285 285 286 288 290 292 292 295 297

17. Gestin de errores en PHP 5....Introduccin Errores y Excepciones

299300 300

ndiceLa clase Exception Bloque Try / Catch Heredar de la clase Exception Limitaciones de PHP 5 Control de errores sin excepciones Errores nativos de PHP Controladores de error Errores de usuario con trigger_error() Depuracin de errores Resumen 301 303 304 305 306 306 307 308 308 309

15

18. Conexiones desde PHP 5..............Introduccin FTP Mostrar los archivos remotos Descargar y Enviar ficheros Otras funciones de FTP Correo electrnico Enviar correo desde PHP PHPMailer Aadir un fichero adjunto Resumen

.311312 312 314 315 316 317 318 319 320 322

19. Creacin de archivos PDFIntroduccin Librera FPDF Nuestro primer documento Funciones de texto Mtodo Write() Mtodo Cell() Desplazamiento de los cursores Salto de pgina automtico Sobrescribir los mtodos Cabecera Imagen de cabecera Pie de pgina Tablas Enlaces Resumen

..............325326 326 327 328 328 329 330 330 331 331 332 333 334 337 338

16

ndice

20. Plantillas con SmartyIntroduccin Instalacin de Smarty Utilizacin bsica de Smarty Cuidado con los estilos CSS Llamada a varias plantillas Variables Modificadores Funciones foreach if, elseif, else php incluido en plantillas assign counter cycle Opciones avanzadas de Smarty Plugins Filtros Resumen

...339340 341 341 345 346 346 347 350 350 351 351 352 352 352 353 353 354 355

Apndice A. Instalacin de PHP 5 y MySQLAntes de comenzar Instalacin en MacOSX Apache PHP 5 MySQL 4 Comprobacin final Instalacin en Windows Instalacin en gnuLinux Recomendacin final

357358 358 358 360 360 361 362 363 364

Apndice B. Configuracin de php.iniIntroduccin short_open_tag disable_functions max_execution_time error_reporting register_globals magic_quotes_runtime

367368 368 368 368 368 368 369

ndice include_path Resumen 369 369

17

Apndice C BibliografaBibliografa Libros de PHP 5 Revistas profesionales Pginas Web

371372 372 372 373

Glosario ndice alfabtico

375 381

Cmo usar este libro

20

Cmo usar este libro

Destinatarios de este libroEste libro est dirigido a usuarios noveles que no sepan programar en ningn lenguaje de desarrollo y a usuarios que ya conocen PHP, pero desean tener una base slida sobre la nueva versin. PHP 5 est ligado a Internet, por lo tanto, todas las aplicaciones prcticas del lenguaje estn orientadas a realizar contenidos dinmicos para pginas. Por eso el lector debe conocer los aspectos bsicos de diseo en HTML. El libro puede dividirse en dos partes. Una primera en la que se detallan los conceptos principales del lenguaje como las variables, estructuras de control, manejo de cadenas de caracteres, creacin de objetos y conectividad con bases de datos, que dar al lector novel una visin general de PHP 5 y le permitir comenzar a desarrollar sus primeras aplicaciones. La segundaparte, algo ms compleja, har las delicias del usuario novel y del medio. Esta cuenta con tcnicas avanzadas para la lectura / escritura de archivos XML, creacin de imgenes en tiempo de ejecucin, conexiones de FTP y correo electrnico o diseo de plantillas con Smarty. El Software Libre est presente en el mbito de la programacin. Por eso, podemos utilizar algunos programas libres como base para construir aplicaciones ms complejas. El diseo de plantillas o la creacin de llamadas a procedimientos remotos no sera posible sin las libreras Smarty o IXR para XML-RPC desarrolladas por la comunidad de PHP para su uso libre. Por tanto, el libro va dirigido a usuarios noveles que no saben nada de PHP. Pero tambin a usuarios medios o avanzados que desean conocer las nuevas caractersticas de PHP 5 y manejar tcnicas avanzadas de comunicacin y diseo.

Organizacin del libroEste libro est dividido en 20 captulos con los siguientes contenidos: Captulo 1: Introduccin a PHP 5: La introduccin a PHP hace un recorrido por las nociones bsicas de HTML. Adems, aprender cmo crear su primera pgina en PHP y cmo mezclar el cdigo HTML con PHP. Captulo 2: Variables, constantes y tipos de datos: Los valores que manejamos en los programas deben ser almacenados en zonas de me-

PHP 5 moria reservadas por PHP. Estas zonas reciben el nombre de variables y pueden ser tratadas de diferentes forma dependiendo de los valores que guarden (nmeros enteros, cadenas de caracteres, valores booleanos). Este captulo contiene todo lo necesario para comprender cmo maneja PHP 5 las variables y las constantes, estableciendo una diferencia con otros lenguajes fuertemente tipados como Java o C. Captulo 3: Operadores: Otro aspecto de los lenguajes de programacin tiene que ver con los smbolos que se utilizan para realizar operaciones aritmticas, lgicas o de asignacin. Cada uno de los smbolos recibe el nombre de operador. Este captulo muestra por grupos todos los operadores con los que se puede encontrar en PHP 5. As, podr ver operadores especializados en sumas, restas, multiplicaciones o divisiones (aritmticos), operadores de igualdad, desigualdad o asignacin (de comparacin), incluso operadores de manejo a nivel de bits (binarios). Captulo 4: Estructuras de control: El flujo de los programas viene determinado siempre por las estructuras de control. Estas indican en cada momento el rumbo que debe llevar el cdigo y lo que debe mostrar nuestra pgina basndose en el valor contenido en las variables. Las estructuras de control y los operadores estn ntimamente relacionados y, su unin, permite desviar \a evolucin del programa en uno u otro sentido. Las estructuras de control que ver en este captulo le darn la potencia suficiente para crear sus primeros programas funcionales. Captulo 5: Funciones: Si su cdigo se hace muy extenso a medida que avanza en la comprensin del libro, en este captulo aprender a remediarlo. Las funciones permitirn al lector agrupar fragmentos de cdigo repetitivo y aislarlo en ficheros independientes. Este captulo no slo cubre los aspectos tericos para la creacin de funciones, sino que, adems, es un compendio de buenas prcticas a tener en cuenta para que sus proyectos se desarrollen ordenadamente. Los aspectos bsicos a tratar son la creacin de funciones propias y el paso de parmetros entre funciones de varias formas diferentes. Captulo 6: Cadenas de caracteres y expresiones regulares: La mayor parte de la informacin que puede encontrar en las pginas es texto. Conocer todas las tcnicas para concatenar, medir, cortar y buscar textos es bsico para crear un proyecto basado en contenido dinmico. Un peridico digital, un Log o, incluso, su propio CMS ya no tendrn secretos despus de leer este captulo. Adems, la gran potencia de bsqueda de patrones viene de la mano de las expresiones regulares. stas

21

22

Cmo usar este libro permiten encontrar palabras, frases y patrones dentro de un texto determinado para manipularlo a nuestro antojo. Captulo 7: Conjuntos de datos del tipo array: Este captulo trata a fondo las colecciones de datos. PHP 5 maneja los conjuntos de datos como arrays asociativos. Es posible acceder a los valores de un array de forma simple, utilizando un ndice como en C, y de forma asociativa, asociando una palabra a un valor determinado dentro del array. Los arrays tienen un incalculable valor en los posteriores captulos usndose como valor de retorno de muchas funciones de conectividad de bases de datos, lectura de archivos XML o creacin de plantillas. Captulo 8: Paso de informacin entre formularios: Si en el captulo 1 pudo ver los conceptos bsicos de la creacin de pginas, en este podr conocer las tcnicas para enviar informacin a travs de formularios. La mayora de las pginas utilizan formularios para interactuar con los usuarios. Aprender a pasar variables y arrays entre dos pginas y cmo recoger desde PHP 5 los valores que se envan. A d e m s podr saber la diferencia entre los mtodos GET y POST y las variables sper-globales. Captulo 9: Programacin orientada a objetos: El gran avance qu ha sufrido PHP 5 desde su versin anterior, ha sido la total incorporacin de la sintaxis y tcnica orientada a objetos. Esto permite desarrollar programas reutilizables en varios proyectos. Una de las ventajas de la programacin orientada a objetos es que nos permite utilizar software de otras personas, simplemente conociendo los mtodos que implementa; no es necesario conocer cmo funciona el objeto para utilizarlo. En este captulo el usuario novel y medio aprender las nuevas caractersticas de la programacin orientada a objetos de PHP 5. A partir del captulo 9, casi todos los ejemplos estarn basados en esta metodologa de trabajo. Captulo 10: Ficheros y almacenamiento de datos: La forma ms natural de almacenar datos persistentes es guardarlos en un fichero de datos. Es una tarea muy sencilla y no dependemos de la instalacin de algn programa externo como una base de datos. El captulo 10 mus-, tra cmo almacenar variables y textos dentro de un archivo, para despus recuperarlo en nuestra pgina. A d e m s aprender una serie de tcnicas para recuperar ficheros enviados a travs de un formulario y para poner en descarga archivos del servidor. Captulo 1 1 : Bases de datos con SQL y SQLite: Sin duda, la mejor forma de almacenar datos masivos es utilizar una base de datos. PHP 5 incorpora una API de gestin de bases de datos, SQLite, que permite almacenar millones de registros de diferentes tipos en un archivo binario. Lo

PHP 5 mejor de utilizar SQLite es que no necesita instalacin de una base de datos, ni su administracin, todo est contenido dentro de la API. A u n que este libro no est dedicado a la programacin con bases de datos, se da una referencia de los usos ms comunes del lenguaje de consultas estructurado (SQL) para que se pueda iniciar en este complejo mundo. Captulo 12: PHP 5 y MySQL: M y S Q L ha sido siempre la panacea del desarrollo en el mbito profesional. Es una base de datos robusta, que permite administracin de usuarios y seguridad a nivel de tablas y celdas. Es algo compleja de administrar, pero muy sencilla de manejar desde PHP 5. Su utilizacin ha sido tal que en el mundo de desarrollo se habla de las pginas L A M P (Linux + Apache + MySQL + PHP). En este captulo aprender a manejar las funciones ms caractersticas de M y S Q L y a utilizarlas, por medio de objetos, en sus aplicaciones. La prxima aparicin de M y S Q L 5 hace prever que la combinacin con PHP ser perfecta (MySQL 5 + PHP 5 = 10). Captulo 13: Sesiones y Cookies: En este captulo se detallan las tcnicas necesarias para grabar informacin en el equipo de los usuarios. Estas pequeas variables (Cookies) permiten crear un pequeo control de asistencia de sus usuarios o guardar configuraciones especiales. En cuanto a las sesiones, son muy necesarias a la hora de crear espacios de venta de productos. Las sesiones identifican a un usuario en concreto dentro de una pgina y permiten asociar variables concretas a ese usuario, aunque la pgina est siendo visitada por muchas personas a la vez. Captulo 14: Lectura y escritura de archivos XML: Frente a una inmensa cantidad de tipos de archivos propietarios como los documentos DOC o XLS, nos encontramos a una serie de archivos basados en el lenguaje XML. Este tipo de archivos, como SXW (Openoffice) o S V G (grficos vectoriales), estn creados para ser entendidos por las personas y por los ordenadores. Por lo tanto, crear programas que interpreten estos archivos no es nada complejo. El captulo 14 muestra tres caminos distintos para leer archivos XML. Dos de ellos que vienen funcionando desde versiones anteriores, SAX y D O M . Y uno nuevo, implementado en PHP 5 para facilitar esta tarea al programados Adems se incluyen las pautas necesarias para que cree sus propios archivos XML con la metodologa D O M . Captulo 15: Aplicaciones prcticas de XML: Si en el captulo anterior sentbamos las bases para la lectura de informacin desde archivos XML, en este captulo crearemos objetos que implementen aplicaciones reales y actuales para compartir informacin. Es m u y habitual, hoy

23

24

Cmo usar este libro en da, que las pginas lleven asociados un panel de noticias que se generan en portales diferentes. Esta informacin se puede mostrar gracias a tcnicas como RSS. A d e m s de crear sus propios objetos de generacin de contenido RSS y su lectura, haremos hincapi en lo que actualmente se llaman servicios. Los servicios son pequeos programas almacenados en algn servidor que informan acerca de algo concreto. A q u aprender a crear sus servicios con las tcnicas ya adquiridas en el captulo 14. Captulo 16: Generacin de grficos con PHP 5: La generacin de grficos desde PHP 5 es posible gracias a la utilizacin de libreras externas como G D . Esto le permite manipular archivos grficos que sus usuarios puedan subir a travs de un formulario. Con esta librera puede generar grficos en miniatura para, despus de hacer clic en l, aadir una marca de agua a todas las imgenes aadiendo el logo de su empresa o asociacin. Otra gran librera es JpGraph, que permite crear todo tipo de grficos estadsticos. Esto le servir para conocer el nmero de visitas por da, mes o ao, comparativas anuales de ventas de productos y todo un abanico de posibilidades. Captulo 17: Gestin de errores en PHP 5: Una v e z terminada la aplicacin tendr que tener en cuenta las partes del cdigo donde puede tener problemas. A l g u n o s usuarios pueden introducir caracteres no permitidos o nmeros donde se esperaban letras. La gestin de errores permite mostrar al desarrollador y al usuario dnde aparece el error y el tipo de fallo que se ha producido. Una buena gestin de errores har que su programa sea ms fiable. Captulo 18: Conexiones desde PHP 5: La conectividad de PHP con otras aplicaciones o servicios ha sido siempre una preocupacin de sus desarrolladores. As, desde anteriores versiones puede encontrar conectividad con servicios L D A P , POP3, SMTP o FTP. Este captulo trata de abarcar dos servicios muy utilizados por la comunidad de usuarios. El FTP, en primer lugar, para enviar y recuperar informacin de otros servidores desde un programa escrito en PHP. Y, en segundo lugar, el manejo de las funciones necesarias para enviar informacin por correo electrnico. Captulo 19: Creacin de archivos PDF: El formato de texto ms difundido en Internet es el PDF. Tanto se ha extendido este formato que la mayora de las pginas profesionales contienen archivos PDF con diferentes contenidos. Desde pginas de contenido tecnolgico hasta las de cocina

PHP 5 exportan sus contenidos en PDF para que sus usuarios puedan disfrutar desde su ordenador del manual del video o la receta de la semana. En este captulo ver paso a paso cmo generar un archivo PDF completo, desde la cabecera hasta el pie de pgina, pasando por todo tipo de textos e imgenes. Captulo 20: Plantillas con Smarty: La ltima aportacin de este libro tiene que ver con la tendencia de separar el cdigo PHP de la presentacin en HTML. Smarty provee unos sencillos mecanismos desde PHP que permiten realizar sencillamente esta separacin. A d e m s de las caractersticas bsicas de las plantillas, la potencia de Smarty reside en la compilacin del diseo cada vez que cambian los datos, hecho que otorga a Smarty el puesto nmero 1 en velocidad en el ranking de sistemas de plantillas. En este captulo aprender a crear plantillas con Smarty, que permitirn cambiar el aspecto grfico de su aplicacin sin tocar el cdigo escrito en PHP 5. Apndice A: Instalacin de Apache y PHP 5 en distintos Sistemas Operativos: La instalacin de PHP 5 es m u y sencilla en gnuLinux, MacOSX y Windows. El Apndice muestra los pasos necesarios para instalar un servidor Apache con el parse de PHP 5 listo para ser utilizado con los ejemplos. En cada caso,, la instalacin se hace de una forma distinta. Hemos buscado para cada Sistema Operativo la opcin ms sencilla, que es utilizando algn paquete compacto que se instale y deje listo el sistema. Puesto que es un libro para principiantes, hemos huido de crear PHP 5 desde el cdigo fuente compilando el programa. Apndice B: Configuracin bsica de php.ini: El archivo de configuracin php . i n i contiene aspectos de funcionamiento de PHP 5, que pueden cambiarse sin necesidad de compilar el programa. Este Apndice contiene algunos parmetros de configuracin que pueden ser tiles. Apndice C: Bibliografa: Este libro est basado en el conocimiento adquirido tras la lectura de numerosos libros sobre la temtica, pginas Web y revistas profesionales del sector. Este Apndice cubre todas las posibilidades, dando al lector un camino a seguir despus de terminar el presente libro.

25

Convenios que emplea este libroEl nombre de los comandos, funciones, mtodos u objetos aparecen resaltados en el libro de la siguiente forma: o b j e t o .

26

Cmo usar este libro Algunas palabras tcnicas que no tienen una traduccin fcil al castellano o simplemente est fuertemente asentada en el idioma tcnico aparecen de la siguiente forma: array, true ofalse. En el libro aparecen resaltados una serie de temas, circunstancias o acontecimientos extraordinarios de la siguiente forma: array, true ofalse. Nota: Anotaciones sobre el texto.

Advertencia: Informacin importante a tener en cuenta a la hora de desarrollar un programa. Explican de alguna manera posibles equivocaciones o ayudas para no caer en errores frecuentes.

Truco: Consejo o informacin importante que puede facilitar el trabajo.

Los ejemplos en la Web de AnayaLa mayora de los ejemplos del libro se pueden obtener en la Web de Anaya Multimedia, en la direccin siguiente: http://www.anayamultimedia.es Seleccionando los mens: Atencin a! cliente>Complementos>Manuales lmprescindibles>Manual Imprescindible de PHP 5. Adems de los ejemplos puede encontrar las aplicaciones externas, o enlaces a las mismas, que utilizamos para desarrollar algunos ejemplos como: Smarty, FPDF, JpGraph o la librera IXR. Todos los ejemplos han sido probados en el servidor Apache para MacOSX con el paquete de PHP 5.0.1 y en un servidor Apache sobre gnuLinEx. Todas las capturas de pantalla se han realizado con el navegador Grulla (Mozilla Firefox) de gnuLinEx 2004.

Prlogo

28

Prlogo Una de las preguntas ms interesantes que nos hacen es qu hace que PHP tenga tanto xito. Distintas personas nos han dado respuesta a esta pregunta. Algunos sostienen que es su excelente conexin con bases de datos, otros que se debe al cdigo abierto; por el contrario otros mantienen que es su funcionamiento. Sin embargo, nuestra opinin difiere. PHP permite que cualquier usuario obtenga rpidamente resultados de forma sencilla, incluso aquellos que no posean experiencia en programacin. Al mismo tiempo, a diferencia de las herramientas R A D , PHP permite el desarrollo de proyectos tan complejos como se desee. En nuestra opinin, esta combinacin, ausente en la mayora de las plataformas Web actuales, es lo que hace que PHP sea especial. Lograr el equilibrio entre estas dos lneas (la potencia y la sencillez) no ha sido fcil, pero s imprescindible para el xito de PHP, como tambin lo son las nuevas caractersticas que permiten al desarrollador aprovechar la ltima tecnologa. PHP 5 es el producto de este importante equilibrio. A u n q u e dotado de muchas funciones nuevas, esta versin es tan accesible como lo fueron PHP 3 y PHP 4, con lo que permite un rpido aprendizaje para aquellos que se inicien. De hecho, algunas de las novedades basadas en la interfaz de Zend Engine II, como SimpleXML, SQLite y S O A P , hacen ms sencillo el uso de PHP, al tiempo que incrementa el potencial de aquellos usuarios noveles, pues les permite trabajar con XML, SQL y Web Services sin esfuerzo. La nueva generacin PHP tambin supone una buena noticia para desabolladores experimentados. En primer lugar, por simplificar todas aquellas funciones que ya se han indicado (al contrario de lo que normalmente se piensa, ni siquiera a los desabolladores avanzados les gusta trabajar a menos que sea imprescindible) y, en segundo lugar, por poner a su disposicin funciones mejoradas. Las nuevas opciones orientadas a objetos de Zend Engine II son un regalo para el desarrollo de aplicaciones de media y gran escala; como la nueva extensin mysqli y el nuevo mdulo de integracin .NET, que permite la creacin de aplicaciones hbridas de PHP que emplean la estructura .NET. Este libro es una gran introduccin a PHP en general y de PHP 5 en particular. Si no tiene experiencia previa con PHP, e incluso si no tiene ninguna experiencia en programacin, en breve podr trabajar con l. Zeev Suraski, Tel A v i v A n d i Gutmans, Cupertino

Introduccin

30

Introduccin

Historia de PHPRasmus Lerdorf, miembro del equipo de desarrollo de Apache, cre PHP (Personal Home Page) en 1994. Su nica intencin fue la de crear un pequeo sistema de control para verificar el nmero de personas que lean su curriculum vitae en la Web. En los meses siguientes a su creacin, PHP se desarroll en torno a un grupo de programadores que comprobaban el cdigo y sus revisiones. Para dar ms potencia al sistema, Rasmus cre funciones en lenguaje C para permitir conexin a bases de datos. Este fue el comienzo de la potencia real del leguaje. En 1995, apareci un conjunto de herramientas sobre PHP. Esta biblioteca se llam "Herramientas para pginas personales" y contenan un analizador de cdigo muy sencillo, un libro de visitas, un contador y algunas macros que facilitaban el trabajo de los diseadores. A mediados de 1995, apareci una revisin pblica llamada P H P / F I 2.0. Esta nueva versin contaba con un analizador sintctico reescrito desde 0, adems de unas herramientas escritas para el tratamiento de datos desde un formulario (de ah el nombre eFI, Form nterpreter) y conectividad con mSQL (Gestor de bases de datos). Hacia 1997, P H P / F I se estaba usando en ms de 50.000 pginas en todo el mundo. En este perodo de tiempo, Zeev Suraski y Andi Gutmans decidieron crear una nueva versin de P H P / F I para solventar unos problemas con una aplicacin de comercio electrnico que estaban desarrollando. PHP 3.0 naci con suculentas innovaciones como la conectividad con varios gestores de bases de datos, protocolos y una API ampliada. La versin oficial de PHP 3.0 vio la luz en junio de 1998, donde se contemplaba ya la programacin orientada a objetos. En 1999 se realiz la primera revisin del motor Zend (Zend Engine), que aportaba modularidad, claridad y herramientas de optimizacin para pginas de gran escala. Zend viene de la unin de Zeev y Andi. PHP 4.0 vio la luz en mayo de 2000, dividida en 3 partes: El motor Zend, la API de servidor y los mdulos de funcionas. El motor Zend es el responsable de analizar el cdigo PHP, definir la sintaxis y del lenguaje de programacin. La API permite la comunicacin con el servidor. Con esta A P I es posible utilizar PHP desde varios servidores. Los mdulos contienen funciones para el manejo de cadenas, archivos XML o tratamiento de imgenes.

PHP 5

31

La orientacin a objetos no est muy lograda en PHP 4.0. Los objetos tienen un tratamiento m u y pobre e ilgico. La definicin de las variables miembro (propiedades) y los mtodos son siempre pblicos, por lo que la encapsulacin es nula. Todos los objetos se pasan por valor por defecto cuando deberan pasarse por referencia. Todas estas propuestas realizadas por el equipo de desarrollo de PHP han desembocado en la creacin del motor Zend 2.0. y su consecuencia PHP 5. PHP 5 incorpora una verdadera orientacin a objetos. Aadiendo las palabras reservadas public, protected y prvate a la definicin de las propiedades y mtodos de los objetos, se permite una verdadera encapsulacin. Adems del considerable avance con respecto a los objetos, PHP 5 incorpora un control de errores muy mejorado, al estilo de los lenguajes de programacin ms avanzados.Nota:

Despus de una encuesta entre desarrolladores y usuarios de PHP se decidi cambiar el significado de PHP a PHP Hypertext Preprocessor. Este cambio sigue los pasos de Richard Stallman al nombrar a su sistema operativo GNU (GNU is not Unix), dotando a la palabra PHP de recursividad. Es un juego de palabras muy utilizado en el ambiente hacker.

Nuevas Caractersticas de PHP 5Existen muchas razones para elegir PHP 5:

Fcil de usarPHP 5 es un lenguaje muy fcil de aprender con respecto a otros lenguajes utilizados para el mismo propsito, como J A V A o ASP. Debido a esto no es necesario hacer un estudio muy concienzudo de sus funciones para realizar programas sencillos que nos resuelvan la mayora de los problemas diarios. La mayora de las funciones ms usuales estn disponibles por defecto, como la conexin a bases de datos o la utilizacin de servidores IMAP. Existe una gran cantidad de pginas con documentacin y programas hechos por desarrolladores que se pueden leer y modificar libremente.

32

Introduccin

Embebido en HTMLLas pginas escritas en PHP son simples pginas en HTML que contienen, adems de las etiquetas normales, el programa que queremos ejecutar. Por ejemplo: Ejemplo de PHP5 embebido et^^l->tlt"Le . "-JaxV-, echo "Web: " . $this->RSS->channel->link . "
"; echo "";

} }$RSS = new SimpleRSS("http://www.luisyfernanda.net/ rss.php?categoryId = 3&blogId=2 ") ; $RSS->parsea_cabecera () ; $RSS->parsea_item(); ?>

Si ejecuta el programa, tendr como resultado las ltimas noticias sobre PHP del portal www.luisyfernanda.net separadas por lneas horizontales. El mtodo pblico p a r s e a _ i t e m () es el encargado de extraer noticia a noticia y mandarlas al navegador. Este mtodo hace 3 llamadas a 3 mtodos distintos que se encargan de recuperar el ttulo, el enlace a la noticia y la descripcin. Hemos separado los mtodos para que cada lector personalice la forma de visualizar los distintos datos. Mi forma particular puede verla en la figura 15.2. Por ejemplo, el ttulo podra mostrarlo en azul y el texto en gris, todo metido en una tabla-

Escribir archivos RSSLos archivos XML y en particular los archivos RSS pueden generarse de la misma forma que creamos un fichero de texto, aadiendo etiquetas con cierto criterio a un archivo de texto, pero la opcin ms correcta es utilizar D O M para generar nuestros propios documentos de noticias. Como ya sabe, la extensin D O M permite aadir, borrar y modificar elementos a lo largo de un documento en cualquier orden.

Para este cometido tenemos la siguiente clase, que nos va a generar documentos RSS a partir de cualquier fuente de datos.raiz->setAttribute('xmlns','http://purl.org/rss/1.0/'); $this->raiz = $this->documento->appendChild($this->raiz);

Aplicaciones prcticas de XML 271}

public function canal($titulo,$enlace,$descripcion,$sobre) { $this->channel = $this->documento->creatElement("channel"); $this->channel = $this->raiz->appendChild($this->channel); $this->titulo=$this->documento->createElement ( ' t i t l e ' ) ; $this->textotitulo=$this->documento->createTextNode($titulo) ; $this->titulo->appendChild($this->textotitulo); $this->channel->appendChild($this->titulo); $this->enlace=$this->documento->createElsment('link'); $this->textoenlace=$this->documento->createTextNode($enlace); $this->enlace->appendChild($this->textoenlace); $this->channel->appendChild($this->enlace); $this->descripcion=$this->documento->createElement ('description') ; $this->textodescripcion=$this->documento->createTextNode ($descripcion); $this->descripcion->appendChild($this->textodescripcion; $this->channel->appendChild($this->descripcion); } public function item_nuevo($titulo,$enlace / $descripcion) { $this->item = $this->documento->createEl