Razones para leer este libro ........................................................................................... Objetivos que puede alcanzar con este libro ............................................................. Concepto de PHP ............................................................................................................ Novedades de la versi6n 4.3 de PHP .......................................................................... Concepto de MySQL ....................................................................................................... Razones para utilizarPHPy MySQL .......................................................................... Alguna de las cualidades de PHP ................................................................................ Rendimiento ................................................................................................................ Integraci6n de base de datos ................................................................................... Bibliotecas incorporadas .......................................................................................... Coste .............................................................................................................................. Aprendizaje de PHP ............................................................................................... Portabilidad ................................................................................................................. C6digo fuente .............................................................................................................. Algunas de las ventajas de MySQL ............................................................................ Rendimiento ................................................................................................................ Bajo coste ...................................................................................................................... Facilidad de uso ......................................................................................................... Portabilidad ................................................................................................................. C6digo fuente .............................................................................................................. C6mo estd organizado este libro .................................................................................. . Finalmente .........................................................................................................................
31 32 33 33 34 34 35 35 35 36 36 36 36 36 37 37 37 37 37 37 38 38
.
......................................................................................39 1. Curso acelerado de PHP ..........................................................................40
Parte I Uso de PHP
Uso de PHP ....................................................................................................................... 42 Aplicaci6n de ejemplo: Bob's Auto Parts ................................................................... 42 El formulario de pedidos ........................................................................................ 43 Procesamiento del formulario .............................................................................. 44 C6mo incrustar PHP en HTML .................................................................................... 45 Estilos de etiquetas PHP ........................................................................................... 46 Instrucciones de PHP ................................................................................................ 47 Espacios en blanco ..................................................................................................... 47 Comentarios ................................................................................................................ 48 C6mo agregar contenido dinimico ............................................................................. 49 Llamada de funciones ............................................................................................... 49 Funci6n date() ............................................................................................................. 50 C6mo acceder a las variables de formulario ............................................................. 50 Variables de formulario ............................................................................................ 50 Concatenaci6n de cadenas ....................................................................................... 53 Literales y variables ................................................................................................... 54 Identificadores ............................................................................................................ 54 Variables declaradas por el usuario ............................................................................ 55 Asignacidn de valores a variables ............................................................................... 55 Tipos de variables ............................................................................................................ 55 Tipos de datos de PHP .............................................................................................. 56 Control de tipos ............................................................................................................... 56 Conversi6n de tipos .................................................................................................. 57 Variables de tip0 variable ........................................................................................ 57 . Constantes ......................................................................................................................... 58 Ambito de variables ........................................................................................................ 58 Operadores ........................................................................................................................ 59 Operadores aritmeticos ............................................................................................ 60 Operadores de cadena ............................................................................................... 61 Operadores de asignaci6n ....................................................................................... 61 Devoluci6n de valores de asignaci6n .............................................................. 61 Combinacidn de operadores de asignaci6n .................................................... 62 Increment0 y decrement0 previo y posterior ................................................ 62 Referencias ............................................................................................................. 63 Operadores de comparaci6n .................................................................................... 63 El operador iguales ............................. :.............................................................. 63 Otros operadores de comparaci6n ................................................................... 64 Operadores 16gicos ........................................................................... ........................ 64 Operadores bit a bit ................................................................................................... 65 Otros operadores ........................................................................................................ 66 Operador ternario ................................................................................................. 66
.
Operador de supresi6n de error ........................................................................ 66 Operador de ejecucibn ......................................................................................... 67 Uso de operadores: calcular 10s totales de 10s formularios ................................... 67 Precedencia y asociatividad: evaluacidn de expresiones ....................................... 69 Funciones de variables ................................................................................................... 70 C6mo probar y establecer tipos de variables ...................................................... 70 C6mo probar el estado de las variables ................................................................ 71 Reinterpretacibn de variables ................................................................................. 72 Estructuras de control ..................................................................................................... 72 Toma de decisiones con estructuras condicionales ................................................ 72 Las instrucciones if .................................................................................................. 72 Bloques de c6digo ...................................................................................................... 73 Instrucciones else ...................................................................................................... 73 Instrucciones elseif ................................................................................................. 74 Instrucci6n switch ...................................................................................................... 75 Comparacidn de condiciones diferentes............................................................... 77 Iteracibn: repeticion de acciones .................................................................................. 77 Bucles while ................................................................................................................. 78 Los bucles for y foreach ............................................................................................ 80 Bucles do ...while ......................................................................................................... 81 C6mo salir de una estructura de control o una secuencia de comandos ............ 81 Siguiente paso: guardar el pedido del cliente ......................................................... 82
.
2 Almacenamiento y recuperacibn de datos
........................................ 84
C6mo guardar datos para su lectura posterior ..................................................... 86 Almacenamiento y recuperaci6n de 10s pedidos de Bob ........................................ 86 Introducci6n a1 procesamiento de archivos .............................................................. 87 * C6mo abrir un archivo .................................................................................................. 88 Modos de archivo ....................................................................................................... 88 Uso de fopen() para abrir un archivo .................................................................... 88 C6mo abrir archivos a travks de FTP o HTTP ..................................................... 91 Problemas a1 abrir el archivo ................................................................................... 91 C6mo escribir en un archivo ................................................................................... 93 Parimetros de fwrite() ........................................................................................ 94 Formatos de archivo .......................................................................................... 94 C6mo cerrar un archivo .................................................................................................. 95 Lectura desde un archivo ............................................................................................... 95 Apertura de un archivo para su lectura: fopen() ................................................ 96 C6mo saber cuindo parar: feof() ............................................................................ 97 C6mo leer linea a linea: fgets(). fgetss() y fgetcsv() ........................................ 97 Lectura de todo el archivo: readfile(). fpassthruo. file()................................... 98 Lectura de un caricter: fget()+................................................................................ 99 Lectura de una longitud arbitraria de bytes: fread()........................................ 99 Otras funciones de archivo utiles .............................................................................. 100
fndice de contenidos
Comprobaci6n de la existencia de un archivo: file-exists() ........................... 100 C6mo averiguar el tamaiio de un archivo: filesize() ........................................ 100 Eliminaci6n de un archivo: unlink() ................................................................... 100 Navegaci6n dentro de un archivo: rewind(). fseek() y ftell() ........................ 101 Bloqueo de archivos ......................................................................................................102 La opci6n mis acertada: 10s sistemas de administracibn de base 103 de datos ................................................................................................................. Problemas con el uso de archivos planos ........................................................... 103 C6mo resolver estos problemas ............................................................................ 104 105 Lecturas adicionales ...................................................................................................... 105 A continuaci6n ...............................................................................................................
.
3 Uso de matrices
.......................................................................................106
i Q ~ es k una matriz? ................................................................................................ 108 Matrices indexadas numkricamente .......................................................................... 108 Inicializaci6n de matrices indexadas numkicamente .................................... 109 Acceso a 10s contenidos de matrices ................................................................... 109 Uso de bucles para acceder a la matriz ............................................................... 110 111 Matrices asociativas ...................................................................................................... Inicializaci6n de una matriz asociativa .............................................................. 111 C6mo acceder a elementos de matriz .................................................................. 111 Uso de bucles con matrices asociativas .............................................................. 111 113 Matrices multidimensionales ...................................................................................... 117 C6mo ordenar matrices ................................................................................................ 117 Uso de sort() .............................................................................................................. Uso de asorto y ksort() para ordenar matrices asociativas ............................ 117 Inversi6n del orden .................................................................................................. 118 Ordenaci6n de matrices~multidimensionales......................................................... 118 Ordenaciones definidas por el usuario .................................................. :............ 118 Ordenaciones de usuario inversas ....................................................................... 120 Reordenaci6n de matrices ............................................................................................ 120 Uso de shuffle() ........................................................................................................ 121 Uso de array-reverse() ............................................................................................ 122 Carga de matrices desde archivos ............................................................................. 123 Otras manipulaciones de cadenas ............................................................................. 125 Navegaci6n dentro de una matriz con each(). current(). reset(). end(). next(). pas(). and prev() ................................................................... 126 Aplicaci6n de cualquier funci6n a cada elemento de una matriz: array-walk() ................................................................................................ 126. C6mo contar elementos de una matriz: count(). sizeof(). and array-count-values() ......................................................................................... 128 Conversi6n de matrices en variables escalares: extract() ............................... 129 130 Lecturas adicionales ...................................................................................................... 130 A continuaci6n ............................................................................................................... %
Desarrollo W e b con PHP y MySQL
............................
4. Manipulaci6n de cadenas y expresiones regulares 132 Aplicaci6n de ejemplo: Smart Form Mail ................................................................. 133 Aplicaci6n de formato a cadenas ............................................................................... 136 Limpieza de cadenas: chop(). Itrim() y trim().................................................... 136 Aplicaci6n de formato a cadenas para presentaciones ................................... 136 Uso de formato HTML: la funci6n nl2br() .................................................... 136 Aplicaci6n de formato a una cadena para su impresi6n ........................... 137 Cambio de mayusculas y minusculas en una cadena ................................ 139 Aplicaci6n de formato a las cadenas para su almacenamiento: Addslashes0 y StripSlashes() .................................................................... 140 C6mo combinar y dividir cadenas con funciones de cadena .............................. 141 Uso de explode(). implode() y join() .................................................................... 142 Uso de strtok() .......................................................................................................... 142 Uso de substr() .......................................................................................................... 143 Comparaci6n de cadenas ............................................................................................ 144 Ordenaci6n de cadenas.strcmp(). strcasecmp() y strnatcmpo ....................... 144 Comprobaci6n de la longitud de una cadena con strlen() ............................. 145 C6mo buscar subcadenas y reemplazarlas con funciones de cadena ............... 145 Busqueda de cadenas en cadenas: strstr(). strchr(). strrchr(). stristr() ......... 146 Busqueda de la posicion de una subcadena: strpos(). strrpos() .................... 147 Sustituci6n de subcadenas: str-replace(). substr-replace() ...........................148 Introduccidn a las expresiones regulares ................................................................. 149 Los fundamentos ...................................................................................................... 150 Conjuntos y clases de caracteres .......................................................................... 150 Repetici6n .................................................................................................................. 152 Subexpresiones ......................................................................................................... 152 Recuento de subexpresiones ..................................................................................152 Anclajes a1 principio o a l final de una cadena ................................................... 152 Bifurcaci6n ................................................................................................................. 153 Cdmo buscar coincidencias de caracteres especiales ...................................... 153 Resumen de 10s caracteres especiales ................................................................. 153 Uso de estos elementos en Smart Form .............................................................. 154 Busqueda de subcadenas con expresiones regulares ........................................ 155 Sustituci6n de cadenas con expresiones regulares ................................................ 156 Divisidn de cadenas con expresiones regulares .....................................................156 Comparaci6n de funciones de cadenas y funciones de expresiones regulares ................................................................................... 157 Lecturas adicionales ...................................................................................................... 157 A continuaci6n ............................................................................................................... 157
...............................
5. Reutilizaci6n de c6digo y creaci6n de funciones 158 ~ P o qud r reutilizar cbdigo? .......................................................................................... 160 Costes .......................................................................................................................... 160 Legibilidad ................................................................................................................. 160
fndice de contenidos
Uniformidad .............................................................................................................. 160 Uso de require() e include() ......................................................................................... 161 Uso de require() ........................................................................................................ 161 Extensiones de nombre de archivo y require() .................................................. 162 Etiquetas de PHP y require() ................................................................................. 162 Uso de require() para plantillas de sitios Web ........................................................ 163 Uso de auto-prepend-file y auto-append-file ................................................. 167 Uso de include()........................................................................................................ 168 Uso de las funciones de PHP ...................................................................................... 170 Llamada de funciones ............................................................................................. 170 C6mo llamar a una funci6n no definida ............................................................. 171 Funciones y el uso de may6sculas y min6sculas ........................................ 172 ~ P o qu6 r deberia crear funciones propias? .............................................................. 173 Estructura b6sica de una funci6n ............................................................................... 173 Designaci6n de funciones ....................................................................................... 174 Parfimetros ....................................................................................................................... 175 177 Ambito .............................................................................................................................. Llamadas por referencia frente a llamadas por valor ........................................ 179 Final de las funciones .................................................................................................... 180 C6mo devolver valores desde funciones ................................................................. 182 Bloques de c6digo .................................................................................................... 182 Recursi6n ......................................................................................................................... 183 Lecturas adicionales ...................................................................................................... 185 A continuaci6n ............................................................................................................... 185
.
6 PHP orientado a objetos
........................................................................186
Conceptos orientados a objetos .................................................................................. 187 188 Clases y objetos ...................................................................................................... Polimorfismo ............................................................................................................. 189 Herencia ..................................................................................................................... 189 Creaci6n de clases, atributos y operaciones en PHP ........................................ 190 Estructura de una clase ........................................................................................... 190 Constructores ............................................................................................................ 191 Instanciaci6n ................................................................................................................... 191 Uso de 10s atributos de clase ....................................................................................... 192 Llamadas a operaciones de clase ............................................................................... 194 Implementaci6n de la herencia en PHP .................................................................... 195 Reemplazamientos ................................................................................................... 196 Herencia m6ltiple .................................................................................................... 197 Diseiio de clases ............................................................................................................. 198 Escritura del c6digo para nuestra clase .................................................................... 199 A continuaci6n ............................................................................................................... 207
Parte I1. Uso de MySQL ............................................................................ 209
7. Diseiio de la base de datos Web
........................................................... 210
Conceptos de base de datos relacionales ................................................................. 212 Tablas .................................................................................................................... 212 Columnas ............................................................................................................. 212 Filas ........................................................................................................................ 213 Valores .................................................................................................................. 213 Claves .................................................................................................................... 213 Esquemas .............................................................................................................. 214 Relaciones ............................................................................................................. 214 Como disefiar nuestra base de datos Web ............................................................... 215 Piense en 10s objetos del mundo real que esti modelando ............................ 215 C6mo evitar el almacenamiento de datos redundantes .................................. 216 Uso de valores de columna unicos ....................................................................... 217 Selecci6n de claves 16gicas ..................................................................................... 218 Reflexiones sobre las preguntas que desea formular a la base de datos .....218 Evite disefios con varios atributos vacios .......................................................... 219 Resumen de 10s tipos de tablas ............................................................................. 219 Arquitectura de base de datos Web ......................................................................... 220 Arquitectura .................................................................................................................... 220 Lecturas adicionales ..................................................................................................... 221 A continuaci6n ............................................................................................................... 221
.
8 Creaci6n de la base de datos Web
....................................................... 222
Nota sobre el uso del monitor de MySQL ................................................................ 224 C6mo registrarse en MySQL ....................................................................................... 225 Creaci6n de bases de datos y usuarios ..................................................................... 226 Creaci6n de la base de datos ................................................................................. 226 Usuarios y privilegios .................................................................................................. 227 Introduction a1 sistema de privilegios de MySQL ................................................. 227 Principio de asignaci6n del privilegio mas bajo ............................................... 227 C6mo configurar usuarios: el comando GRANT ............................................. 228 Tipos y niveles de privilegio ................................................................................. 229 El comando REVOKE .............................................................................................. 231 Ejemplos de uso de GRANT y REVOKE ............................................................. 232 C6mo configurar un usuario para la Web ............................................................... 233 C6mo cerrar la sesidn como administrador ....................................................... 233 Uso de la base de datos correcta ................................................................................ 233 Creaci6n de tablas de base de datos .......................................................................... 234 iCuil es el significado del festo de las palabras clave? .................................. 235 Tipos de columna ................................................................................................... 236 C6mo examinar la base de datos con SHOW y DESCRIBE ............................ 238 Identificadores de MySQL ........................................................................................... 239 Tipos de dato de columna ............................................................................................ 240 Tipos numericos ....................................................................................................... 241
fndice de contenidos
Tipos de fecha y hora ......................................................................................... Tipos de cadena .................................................................................................. Lecturas adicionales ...................................................................................................... A continuaci6n ..............................................................................................................
.
9 C6mo trabajar con la base de datos de MySQL
242 244 245 246
................................248
iQue es SQL? .................................................................................................................. 250 Inserci6n de datos en la base de datos ...................................................................... 250 Recuperaci6n de datos de la base de datos ............................................................. 252 Recuperaci6n de datos con criterios especificos ...............................................253 Recuperaci6n de datos desde varias tablas ........................................................ 256 Combinaciones sencillas de dos tablas ............................................................... 256 Combinacidn de varias tablas .......................................................................... 257 Busqueda de filas que no coincidan ............................................................... 258 Uso de otros nombres para designar tablas: 10s alias ................................ 260 Resumen de 10s tipos de combination .......................................................... 260 Recuperaci6n de datos con u n orden dado ........................................................ 261 Agrupacidn y agregaci6n de datos ...................................................................... 262 C6mo escoger las filas que recuperar .................................................................. 264 Actualizaci6n de registros en la base de datos ....................................................... 264 Alteraci6n de tablas tras su creacidn ......................................................................... 265 Eliminacidn de registros de la base de datos .......................................................... 267 Eliminaci6n de tablas .................................................................................................... 267 Eliminaci6n de una base de datos entera ................................................................. 267 Lecturas adicionales ...................................................................................................... 268 A continuaci6n ............................................................................................................... 268
-
10. Acceso a la base de datos de MySQL desde la Web con PHP .
.......270
Funcionamiento de las arquitecturas de base de datos ........................................ 272 Pasos bdsicos para consultar una base de datos desde la Web ........................... 275 Comprobaci6n y filtrado de datos entrantes ...........................................................275 C6mo configurar de una conexi6n ............................................................................ 277 Selecci6n de una base de datos .................................................................................. 278 Cdmo consultar la base de datos ............................................................................... 279 Recuperacidn de resultados de consulta .................................................................. 279 Desconexi6n de una base de datos ............................................................................ 281 C6mo colocar nueva informacidn en la base de datos ........................................ 281 Otras funciones utiles PHP y MySQL ....................................................................... 284 Liberaci6n de recursos ............................................................................................ 285 Creaci6n y eliminacidn de bases de datos .......................................................... 285 Otras interfaces de base de datos y PHP .................................................................. 285 Uso de una interfaz de base de datos generics: PEAR DB ................................... 286 Lecturas adicionales ...................................................................................................... 288 A continuacidn ............................................................................................................... 289
.
11. MySQL Avanzado
................................................................................
290
An6lisis detallado del sistema de privilegios ......................................................... 291 La tabla de usuario .................................................................................................. 292 Las tablas db y host ............................................................................................. 294 Las tablas tables-priv y columns-priv ............................................................... 295 Control de acceso: jc6m0 utiliza MySQL las tablas de concesi6n de privilegios? ..................................................................................................... 296 Actualizaci6n de privilegios: jcu6nd0 surten efecto 10s cambios? ..............297 C6mo proteger la bases de datos MySQL ................................................................ 297 MySQL desde el punto de vista del sistema operativo ...................................297 Contraseiias ......................................................................................................... 298 Privilegios de usuario ...................................................................................... 299 Aspectos relacionados con la Web ............................................................... 299 C6mo obtener m6s informaci6n sobre bases de datos ..........................................300 C6mo obtener informaci6n con SHOW ............................................................ 300 C6mo obtener informaci6n con DESCRIBE .......................................................302 Compresi6n del funcionamiento de las consultas con EXPLAIN ................303 C6mo agilizar consultas con indices .......................................................................306 Trucos de optimizaci6n general .................................................................................307 Optimizaci6n del diseiio ........................................................................................ 307 Permisos ..................................................................................................................... 307 Optimizaci6n de tablas ..................................................................................... 307 Uso de indices ........................................................................................................... 308 Uso de valores predeterminados .......................................................................... 308 Uso de conexione permanentes ............................................................................ 308 Otras sugerencias ................................................................................................. 308 Tipos diferentes de tabla ...................................................................................... 308 Carga de datos desdeun xchivo ............................................................................... 309 C6mo realizar una copia de seguridad de la base de datos MySQL .................310 Restablecimiento de la base de datos MySQL ........................................................ 310 Lecturas adicionales ...................................................................................................... 311 A continuaci6n ............................................................................................................... 311
.
........................................313 12. Creacibn de un sitio Web de comercio electrbnico ......................... 314
Parte I11 Comercio electrbnico y seguridad
j C ~ 6 1es nuestro objetivo? ........................................................................................... 315 Tipos de sitios Web comerciales ................................................................................ 316 Medios publicitarios en linea ................................................................................ 316 No suministrar informaci6n importante ....................................................... 317 Mala presentaci6n .............................................................................................. 317 No responder a la informaci6n generada por el sitio Web ....................... 317 No actualizar el sitio .......................................................................................... 318
fndice de contenidos
No realizar el seguimiento del 6xito del sitio .............................................. 318 Recogida de pedidos de articulos y servicios .................................................... 319 Preguntas sin respuesta .................................................................................... 321 Confianza ............................................................................................................. 321 Facilidad de uso .................................................................................................. 322 Compatibilidad ................................................................................................... 323 Suministro de servicios y articulos digitales ..................................................... 323 C6mo afiadir valor a 10s articulos y servicios ................................................... 324 Recorte de costes ...................................................................................................... 324 Riesgos y amenazas ....................................................................................................... 325 Piratas informfiticos ................................................................................................. 325 Fracaso en la atraccidn de suficiente negocio .................................................... 326 Fallos de hardware ................................................................................................... 326 Fallos de alimentacih. comunicaci6n1 red y distribuci6n ............................. 327 Competencia .............................................................................................................. 327 Errores de software .................................................................................................. 327 Cambios en las politicas e impuestos gubernamentales ................................. 328 Limites de la capacidad del sistema .................................................................... 328 Por qu6 estrategia optar ............................................................................................... 328 A continuaci6n ............................................................................................................... 329
.
.
13 Aspectos de seguridad relacionados con el comercio electr6nico 330 Importancia de la informaci6n ................................................................................... 332 Amenazas contra la seguridad ................................................................................... 332 Exposici6n de datos confidenciales ..................................................................... 333 P6rdida o destrucci6n de datos ............................................................................. 335 Modificaci6n de 10s datos ...................................................................................... 335 Errores en el software ...... ...................................................................................... 336 Malas especificaciones t6cnicas ...................................................................... 337 Suposiciones err6neas hechas por 10s desarrolladores ............................. 337 Pruebas incompletas .......................................................................................... 337 Repudio ...................................................................................................................... 338 Equilibrio entre usabilidad. rendimiento. coste y seguridad .............................. 339 Creaci6n de una politica de seguridad ..................................................................... 340 Principios de autenticaci6n .................................................................................... 340 Uso de la autenticaci6n ................................................................................................ 341 Fundamentos de la encriptaci6n ................................................................................ 342 Encriptacih de clave privada ............................................................................... 343 Encriptaci6n de clave publica ..................................................................................... 344 Firmas digitales .............................................................................................................. 344 Certificados digitales .................................................................................................... 345 Servidores Web seguros ............................................................................................... 347 Auditorias y registros ................................................................................................... 348 Cortafuegos ..................................................................................................................... 349
Desarrollo W e b con PHP y MySQL
Copia de seguridad de 10s datos ................................................................................ 349 Copia de seguridad de 10s archivos generales .................................................. 350 Copia de seguridad y restauraci6n de bases de datos MySQL .....................350 Seguridad fisica .............................................................................................................. 350 A continuaci6n ............................................................................................................... 351
.
14 Implementaci6n de la autenticacibn con PHP y MySQL ...............352 Identificaci61-1de visitantes .......................................................................................... 353 Implementaci6n del control de acceso ...................................................................... 355 Almacenamiento de contraseiias ......................................................................357 Cifrado de contraseiias ........................................................................................... 360 Protecci6n de piginas multiples ...........................................................................361 Autenticaci6n bisica .....................................................................................................362 Uso de la autenticacidn bisica en PHP ..................................................................... 363 Uso de la autenticaci6n bisica con 10s archivos .htaccess de Apache ..............365 Autenticaci6n b k i c a con IIS ................................................................................. 368 Uso de la autenticacibn mod-auth-mysql ...............................................................371 Instalaci6n de mod-auth-mysql ...................................................................... 371 ~Funcionb?................................................................................................................. 372 Uso de mod-auth-mysql ........................................................................................ 372 Creaci6n de su propio sistema de autenticaci6n .................................................... 373 Lecturas adicionales ...................................................................................................... 374 A continuation ............................................................................................................... 374
.
15 Implementaci6n de transacciones seguras con PHP y MySQL
.... 376
Como suministrar transacciones seguras ................................................................377 El equipo del usuario ..............................................................................................378 . Internet ....................................................................................................................... 380 Su sistema ............................................................................................................... 381 Us0 SSL .........................................................................................................:............382 Filtrado de la entrada de 10s usuarios .....................................................................385 Suministro de un almacenamiento seguro .............................................................. 386 LPor quk almacenar numeros de tarjeta de crkdito? .............................................. 387 Uso de encriptaci6n en PHP ........................................................................................ 388 Instalaci6n de GPG ..........................................................................................388 C6mo probar GPG ..............................................................................................391 Lecturas adicionales ....................................................................................................396 A continuaci6n ............................................................................................................396
.
.
.....................................................397 16. Interacci6n con el sistema de archivos y el servidor ....................... 398
Parte IV TCcnicas avanzadas de PHP
Introducci6n a la carga de archivos ........................................................................... 400
fndice d e contenidos
HTML para la carga de archivos .......................................................................... 400 Un inciso sobre seguridad .................................................................................. 401 C6digo PHP para procesar la tarea de carga del archivo ...............................402 Problemas habituales .............................................................................................. 407 Uso de las funciones de directorio ............................................................................. 407 Lectura desde directorios ....................................................................................... 408 C6mo obtener informaci6n sobre el directorio actual ..................................... 409 Creaci6n y eliminaci6n de directorios ................................................................. 409 Interaction con el sistema de archivos ..................................................................... 410 C6mo obtener informaci6n de archivo ............................................................... 410 Cdmo cambiar las propiedades de archivo ........................................................ 413 Creaci6n. eliminaci6n y desplazamiento de archivos ..................................... 413 Uso de funciones de ejecuci6n de programas ......................................................... 414 Interacci6n con el entorno: getenv() y putenv() ..................................................... 417 Lecturas adicionales ...................................................................................................... 418 A continuaci6n ............................................................................................................... 418
17. Uso de funciones de red y de protocolo ........................................420 Descripci6n general de protocolos ............................................................................ 421 Envio y recepci6n de correos electr6nicos ...............................................................422 Uso de otro sitio Web .................................................................................................... 423 Uso de funciones de busqueda de red ...................................................................... 426 Uso de FTP ....................................................................................................................... 430 Uso de FTP para realizar una copia o reproducir un archivo ........................430 Conexi6n a1 servidor FTP remoto ................................................................... 433 Inicio de sesi6n en el servidor FTP ................................................................. 433 Comprobaci6n del momento temporal de la actualizaci6n de archivos ....,....... .....................:.............................................................. 434 Descarga del archivo ......................................................................................... 435 Cierre de la conexi6n ......................................................................................... 436 Carga de archivos ..................................................................................................... 436 Como evitar 10s tiempos de espera ...................................................................... 437 Uso de otras funciones de FTP .............................................................................. 437 Comunicaciones de red genbricas con CURL...........................................................438 Lecturas adicionales .................................................................................................... 440 A continuation ............................................................................................................... 441
.
18 Administracih de la fecha y la hora
................................................ 442
C6mo obtener la fecha y la hora en PHP ..................................................................443 Uso de la funci6n date()..........................................................................................443 Marcas de tiempo de Unix .....................................................................................445 Uso de la funci6n getdate() .................................................................................... 446 Validaci6n de fechas ................................................................................................ 447 Conversi6n entre formatos de fecha de PHP y MySQL ........................................ 447
Desarrollo W e b colt PHP y MySQL
Cilculos de fecha ........................................................................................................... 449 Uso de funciones de calendario .................................................................................. 450 Lecturas adicionales ...................................................................................................... 451 A continuacidn ............................................................................................................... 451
.
19 Creacion de imiigenes
..........................................................................452
Configuraci6n de compatibilidad de imigenes en PHP .......................................453 Formatos de imagen ...................................................................................................... 454 JPEG ............................................................................................................................ 455 PNG .............................................................................................................................455 WBMP ....................................................................................................................... 455 GIF ............................................................................................................................... 455 Creaci6n de imigenes ................................................................................................... 456 Creacion de un lienzo .............................................................................................. 458 Dibujo o impresi6n de texto en la imagen .......................................................... 458 Generaci6n del grafico final ................................................................................. 460 Liberaci6n de recursos ............................................................................................461 Uso de imigenes generadas automiticamente en otras piginas .......................462 Uso de texto y fuentes para crear imigenes ............................................................463 Lienzo base ................................................................................................................466 C6mo ajustar el texto sobre el b o t h ................................................................... 466 Colocaci6n del texto ................................................................................................470 C6mo escribir el texto en el b o t h ...................... ................................................. 470 Para terminar .......................................................................................................... 471 Dibujo de figuras y representaci6n grifica de datos ........................................ 471 Otras funciones de imagen .......................................................................................... 478 Lecturas adicionales ..................................................................................................479 A continuaci6n ................... ........................................................................................479 ;
.
20 Uso del control de sesi6n en PHP
.......................................................480
Qu6 es el control de sesi6n ..........................................................................................481 Funcionalidad de sesi6n bisica ..................................................................................482 Qu6 es una cookie .................................................................................................... 482 Configuraci6n de cookies desde HTTP ...............................................................483 Uso de cookies con sesiones ...........................................................................483 Almacenamiento del Id . de sesi6n ...................................................................484 Implementaci6n de sesiones simples ........................................................................484 Inicio de sesion ....................................................................................................... 484 Registro de variables de sesi6n ............................................................................. 485 Uso de variables de sesi6n ..................................................................................... 485 Anulaci6n del registro de variables y eliminaci6n de la sesi6n .................... 486 Ejemplo de sesi6n sencilla ........................................................................................ 487 Configuraci6n del control de sesi6n .........................................................................489 Implementaci6n de autenticaci6n con el control de sesi6n .................................490
fndice de contenidos
Lecturas adicionales ...................................................................................................... 496 A continuaci6n ............................................................................................................... 497
21 . Otras caracteristicas utiles ..................................................................498 Uso de comillas migicas .............................................................................................. 499 EvaluaciBn de cadenas: eval()..................................................................................... 500 Finalizaci6n de ejecuci6n: die y exit .......................................................................... 501 Serializaci6n .................................................................................................................... 502 C6mo obtener informaci6n sobre el entorno PHP ................................................. 503 C6mo saber qu6 extensiones se han cargado .................................................... 503 Identificaci6n del propietario de la secuencia de comandos .........................504 C6mo saber cuindo se ha modificado una secuencia de comandos .................................................................................................. 504 Carga dinimica de extensiones .................................................................................. 504 Modificacih temporal del entorno de ejecuci6n .................................................. 505 C6mo resaltar fuentes ................................................................................................... 506 A continuaci6n ............................................................................................................... 506
Parte V. Creaci6n de proyectos PHP y MySQL practicos
...................509
22. Uso de PHP y MySQL en grandes proyectos ................................... 510 Aplicaci6n de ingenieria de software a1 desarrollo Web ...................................... 512 Planificaci6n y ejecuci6n de un proyecto de aplicaci6n Web .............................. 513 Reutilizaci6n de c6digo ................................................................................................ 514 C6mo escribir c6digo mantenible .............................................................................. 514 Estindares de codificaci6n ..................................................................................... 515 Convenciones de-nompnclatura ...................................................................... 515 Comentarios de c6digo ..................................................................................... 516 Sangrados ............................................................................................................. 517 Divisi6n del c6digo .................................................................................................. 518 Uso de una estructura de directorios estindar .................................................518 C6mo documentar y compartir funciones internas ......................................... 519 Implementaci6n del control de versi6n .................................................................... 519 Selecci6n de un entorno de desarrollo ...................................................................... 520 Documentaci6n de nuestros proyectos ..................................................................... 521 Prototipos ........................................................................................................................ 521 SeparaciBn de 16gica y contenido ............................................................................... 522 Optimizaci6n de c6digo ............................................................................................... 523 Uso de optimizaci6n sencilla ................................................................................. 523 Uso de productos Zend ........................................................................................... 524 Comprobaciones ............................................................................................................ 524 Lecturas adicionales ...................................................................................................... 526 A continuaci6n ............................................................................................................... 526
Desarrollo Web con P H P y M y S Q L
Errores de programacibn ............................................................................................. 530 Errores sinticticos .................................................................................................... 530 Errores de ejecuci6n ................................................................................................. 531 Llamadas a funciones que no existen ............................................................ 533 Lectura o escritura de archivos .................................................................... 533 Interacci6n con MySQL u otras bases de datos ........................................... 534 Conexiones a redes de servicios ..................................................................... 535 Comprobaci6n de entrada de datos incorrecta ........................................... 536 Errores 16gicos .......................................................................................................... 537 Ayuda de depuraci6n de variables ............................................................................ 538 Niveles de informes de errores ................................................................................... 540 Modificaci6n de 10s parimetros de informes de error .......................................... 541 C6mo desencadenar nuestros propios errores ........................................................ 543 Procesamiento correct0 de errores ............................................................................ 543 A continuaci6n ............................................................................................................... 546
.
.........
24 C6mo generar autenticacihn y personalizaci6n de usuarios 548 El problema ................................................................................................................... 550 Componentes de la solucion ....................................................................................... 550 Identificaci6n y personalizaci6n de usuarios .................................................... 550 551 Almacenamiento de marcadores .......................................................................... Recomendaci61-1de marcadores ............................................................................ 551 Presentaci6n de la soluci6n ......................................................................................... 551 Implementaci6n de la base de datos ......................................................................... 554 Implementaci6n del sitio bisico ................................................................................. 555 Implementaci6n de la aut~nticaci6nde usuarios ................................................... 558 Registro ..................:.................................................................................................... 558 Conexi6n .................................................................................................................... 563 Desconexi6n .............................................................................................................. 567 Modificaci6n de contrasefias ................................................................................. 568 Restablecimiento de contrasefias olvidadas ...................................................... 570 Implementaci6n del almacenamiento y recuperaci6n de marcadores .............. 575 C6mo afiadir marcadores ....................................................................................... 575 C6mo mostrar marcadores .................................................................................... 578 Eliminaci6n de marcadores .................................................................................. 579 Implementaci6n de recomendaciones ...................................................................... 581 Conclusi6n y posibles ampl'iaciones ......................................................................... 585 A continuaci6n .............................................................................................................. 585
........................................
25. Construcci6n de un carro de la compra 586 El problema .................................................................................................................... 588 Componentes de la soluci6n ....................................................................................... 588
fndice de contenidos
Generaci6n de un catdogo en linea ..................................................................... 588 C6mo realizar el seguimiento de las compras de un usuario mientras compra ............................................................................................................. 588 Pagos ........................................................................................................................... 589 Interfaz de administracibn ..................................................................................... 589 Presentaci6n de la soluci6n ......................................................................................... 590 Implementaci6n de la base de datos ......................................................................... 594 Implementaci6n del catdogo en linea ...................................................................... 596 Enumeraci6n de categorias .................................................................................... 598 Enumeraci6n de libros en una categoria ............................................................. 601 C6mo mostrar detalles sobre un libro ................................................................. 602 Implementaci6n del carro de la compra ................................................................. 604 Uso de la secuencia de comandos show-cart.php ...........................................604 C6mo ver el carro ................................................................................................... 607 C6mo afiadir articulos a1 carro ............................................................................. 610 C6mo guardar el carro actualizado ..................................................................... 611 Impresi6n de un resumen en la barra de encabezado ..................................... 612 C6mo salir ................................................................................................................. 613 Implementaci6n del pago ............................................................................................ 618 Implementacidn de una interfaz de administracibn .............................................. 620 Ampliaci6n del proyecto .............................................................................................. 628 Uso de un sistema existente ........................................................................................ 628 A continuaci6n ............................................................................................................... 628
.
26 Creaci6n de un sistema de administraci6n de contenidos
............. 630
El problema ..................................................................................................................... 631 Requisitos de la soluci6n ..............................................................................................632 Modificaci6n del contenido ........................................................................................ 632 Introducci6n de contenido en el sistema ............................................................ 632 FTP ......................................................................................................................... 632 Metodo de carga de archivos ...........................................................................633 Cambios en linea ................................................................................................633 Bases de datos frente a almacenamiento en archivos ......................................633 Estructura de documentos .....................................................................................634 Uso de metadatos .......................................................................................................... 635 Formato del resultado ...................................................................................................635 Manipulaci6n de imigenes ..........................................................................................637 Disefio y presentaci6n de la soluci6n ........................................................................639 Disefio de la base de datos ...........................................................................................640 Implementaci6n ............................................................................................................. 642 Interfaz de usuario ................................................................................................... 642 Sistema ........................................................................................................................ 646 Busquedas .................................................................................................................. 654 Pantalla del editor .................................................................................................... 657
Desarrollo W e b con PHP y MySQL
Ampliaci6n del proyecto .............................................................................................. 658 A continuaci6n .............................................................................................................. 659
27. Creacibn de un servicio de correo electronic0 basado en la Web ... 660 El problema ..................................................................................................................... 661 Componentes de la soluci6n ....................................................................................... 662 Presentaci6n de la soluci6n ......................................................................................... 663 Configuraci6n de la base de datos ............................................................................. 665 Arquitectura de secuencias de comandos ................................................................667 Conexi6n y desconexi6n .............................................................................................. 673 Configuraci6n de cuentas ............................................................................................ 676 Creaci6n de una nueva cuenta .............................................................................. 678 Modificaci6n de una cuenta existente ................................................................ 680 Eliminaci6n de una cuenta ..................................................................................... 680 Lectura de correo ........................................................................................................ 681 Selecci6n de una cuenta ......................................................................................... 681 C6mo ver 10s contenidos del buz6n de correo ................................................ 684 Lectura de un mensaje de correo .......................................................................... 687 C6mo ver encabezados de mensaje ..................................................................... 690 Eliminaci6n de correo ............................................................................................. 691 Envio de correo ............................................................................................................... 692 Envio de un nuevo mensaje ................................................................................... 692 C6mo responder o reenviar correo ...................................................................... 694 Ampliaci6n del proyecto .............................................................................................. 695 A continuaci6n ............................................................................................................... 696
28. Creaci6n de un gestor de listas de correo
.
........................................ 698
. El problema .....................................................................................................................
699 Componentes de la soluci6n ....................................................................................... 700 Definici6n de una base de datos de listas y suscriptores ............................... 700 Carga de archivos ..................................................................................................... 701 Envio de correo con archivos adjuntos ...............................................................701 Presentaci6n de la soluci6n ........................................................................................ 702 Definici6n de la base de datos .................................................................................... 704 Arquitectura de la secuencia de comandos ............................................................. 706 714 Implementaci6n del inicio de sesi6n ......................................................................... Creaci6n de una nueva cuenta .............................................................................. 715 Conexi6n .................................................................................................................... 717 Implementaci6n de funciones de usuario ................................................................ 720 C6mo ver las listas ................................................................................................... 720 C6mo ver informadm de listas .......................................................................... 725 C6mo ver archivos de listas ................................................................................... 727 Suscripciones y anulaci6n de suscripciones ...................................................... 728 Modificaci6n de la configuraci6n de una cuenta .............................................. 729
fndice de contenidos
Modificaci6n de contraseiias ................................................................................. 730 Desconexidn .............................................................................................................. 732 Implementacidn de funciones administrativas ...................................................... 732 Creaci6n de una nueva lista .................................................................................. 733 Carga de un nuevo boletin informativo ............................................................. 735 Procesamiento de la carga de varios archivos ................................................... 737 Vista previa del boletin informativo ................................................................... 742 Envio del mensaje .................................................................................................... 743 Ampliaci6n del proyecto .............................................................................................. 749 A continuaci6n ........................................................................................................... 749
.
29 Creaci6n de foros Web
....................................................................750
El problema ..................................................................................................................... Componentes de la soluci6n ....................................................................................... Presentaci6n de la soluci6n ......................................................................................... Diseiio de la base de datos ........................................................................................... C6mo ver el Arb01 de articulos .................................................................................... Despliegue y repliegue ........................................................................................... C6mo mostrar 10s articulos .................................................................................... Uso de la clase treenode ......................................................................................... Cdmo ver articulos individuales ................................................................................ Cdmo afiadir nuevos articulos .................................................................................... Ampliaciones .................................................................................................................. Uso de un sistema existente ........................................................................................ A continuacidn ...............................................................................................................
.
752 752 754 755 758 760 763 764 770 772 778 779 779
.......................
30 Generaci6n de documentos personalizados en PDF 780 El problema ................................................................................................................... 781
.
Evaluacidn de formatos de documento .................................................................... 782 Papel ............................................................................................................................ 782 ASCII ........................................................................................................................... 783 HTML .......................................................................................................................... 783 Formatos de procesadores de texto ..................................................................... 783 Formato de texto enriquecido ............................................................................... 784 Postscript ................................................................................................................... 785 Formato de documento portable .......................................................................... 785 Componentes de la soluci6n ....................................................................................... 786 Sistema de preguntas y respuestas ...................................................................... 786 Software de generaci6n de documentos ............................................................. 787 Software para crear una plantilla RTF ........................................................... 787 Software para crear una plantilla PDF .......................................................... 787 Software para crear PDF mediante programaci6n ..................................... 788 Presentaci6n de la solucion ......................................................................................... 788 C6mo responder a las preguntas .......................................................................... 790
Desarrollo Web con P H P y MySQL
Cdmo calificar las respuestas ................................................................................ 792 Generacidn de un certificado RTF ........................................................................ 794 Generacidn de un certificado PDF a partir de una plantilla .......................... 797 Generacidn de un documento PDF por medio de PDFlib ............................... 801 Una secuencia de comandos Hello World para PDFlib ..................................801 Generacidn de nuestro certificado con PDFlib .................................................. 805 Problemas con 10s encabezados ................................................................................. 812 Ampliacidn del proyecto .............................................................................................. 813 Lecturas adicionales ...................................................................................................... 813
.
31 Conexibn a servicios Web con XML y SOAP
..................................814
El problema ..................................................................................................................... 815 Cdmo entender XML ..................................................................................................... 816 Servicios Web ................................................................................................................. 820 SOAP ........................................................................................................................... 820 WSDL .......................................................................................................................... 821 Componentes de la solucidn ..................................................................................... 822 Creacidn de un carro de la compra ...................................................................... 822 Uso de las interfaces de servicios Web de Amazon ........................................ 822 Andisis de XML ................................................................................................. 823 Uso de SOAP con PHP ............................................................................................ 823 Almacenamiento en cache ...................................................................................... 824 Presentacidn de la solucidn ........................................................................................ 824 Aplicacidn principal .............................................................................................. 828 Cdmo mostrar 10s libros de una categoria ......................................................... 834 Obtencidn de un AmazonResultSet .................................................................. 836 Uso de XML sobre HTTP ........................................................................................ 844 Uso de SOAP ........,....... .......................................................................................... 850 Almacenamiento de datos en cache ..................................................................... 852 Creacidn del carro de la compra ........................................................................... 854 Cdmo salir a Amazon .............................................................................................. 857 Instalacidn del cddigo del proyecto ........................................................................... 858 Ampliacidn del proyecto .............................................................................................. 859 Lecturas adicionales ...................................................................................................... 859
.
.................................................................................... 861 A . Instalacibn de PHP y MySQL .............................................................. 862 Parte VI . ApCndices
Ejecucidn de PHP como interprete CGI o como mddulo ..................................... 864 Instalacidn de Apache. PHP y MySQL en Unix ...................................................... 864 Instalacidn binaria .................................................................................................. 865 Instalacidn desde cddigo fuente ...................................................................... 8 6 5 Instalacidn de MySQL ...................................................................................... 866 Instalacidn de PDFlib ......................................................................................... 868
fndice de contenidos
Instalaci6n de CURL........................................................................................... 869 Instalacion de PHP ............................................................................................. 869 Fragmentos de c6digo de httpd.conf ................................................................... 872 ~Funcionala compatibilidad con PHP? .............................................................. 873 ~FuncionaSSL? ......................................................................................................... 874 ...................................................................................................... 875 ~ l t i m o pasos s Instalaci6n de Apache. PHP y MySQL en Windows ........................................ 875 Instalaci6n d e MySQL en Windows ..................................................................... 876 Definici6n de la ruta .......................................................................................... 878 Eliminaci6n del usuario an6nimo ................................................................... 878 Definici6n de la contraseiia raiz ...................................................................... 879 Instalaci6n de Apache en Windows ..................................................................... 879 Instalaci6n de PHP en Windows .......................................................................... 881 Uso de Installshield ........................................................................................... 881 Instalacion.manual ............................................................................................. 881 Como aiiadir PHP a su configuraci6n de Apache ....................................... 883 C6mo aiiadir PHP y MySQL a Microsoft IIS y PWS .................................. 883 Pruebas .................................................................................................................. 884 Instalaci6n de PEAR ...................................................................................................... 884 Configuraciones adicionales ....................................................................................... 885
.
B Recursos Web
.........................................................................................
Recursos PHP .................................................................................................................. Recursos especificos de MySQL y SQL ..................................................................... Recursos para Apache ................................................................................................. Desarrollo Web ...............................................................................................................
.
886 887 889 889 890
.......................................................................892
C Contenido del C D - R O N
Contenido del CD-ROM ............................................................................................. 893 Windows .................................................................................................................... 893 Linux / Unix ................................................................................................................ 894 L6alo antes de abrirlo ....................................................................................... 894
Indice alfabdtico
..........................................................................................895
Bienvenidos a Desarrollo Web con PHP y MySQL. Estas piginas recogen 10s conocimientos fruto de nuestras experiencias con PHP y MySQL, dos de las herramientas de desarrollo Web rnis actuales. En esta introduccidn, trataremos 10s siguientes aspectos: Razones para leer este libro Objetivos que se pueden akanzar utilizando este libro Qu6 es PHP y MySQL y por qu6 son unas herramientas geniales Una repaso general a las ultimas funciones de PHP 4 Cdmo esti organizado este libro Empecemos.
Razones para leer este libro En este libro se explica cdmo crear sitios Web interactivos, desde 10s formularios de pedidos rnis sencillos hasta 10s sitios de comercio electr6nico rnis complejos y seguros, y lo que es mis, con ayuda de tecnologias de cddigo abierto. Este libro va dirigido a lectores con un conocimiento bisico de HMTL y con cierta experiencia de programacidn con lenguajes actuales, aunque no es necesario
que hayan programado para Internet o utilizado una base de datos relacional. Los lectores con menos experiencia en programaci6n tambien podrin aprovechar este libro aunque tardarin un poco mas en digerir sus conceptos. Hemos intentado tratar 10s conceptos bisicos, aunque se aborden ripidamente. Este libro va dirigido a personas que deseen dominar PHP y MySQL para crear un sitio Web comercial o de gran tamafio. Puede que tenga experiencia con otros lenguajes de desarrollo Web. Si asi fuera, este libro le ayudari a ponerse a1 dia ripidamente. La raz6n que nos ha animado a escribir este libro es que todos 10s manuales sobre PHP que conociamos eran bisicamente guias de referencia de funciones. Estos libros resultan utiles pero no sirven para mucho cuando nuestro jefe o un cliente nos piden crear un carro de la compra para un sitio Web. Hemos intentado que 10s ejemplos resulten iitiles. De hecho, gran parte de su c6digo se puede utilizar directamente en un sitio Web o bastaria con pequefias modificaciones para hacerlo.
Objetivos que puede alcanzar con este libro La lectura de este libro le permitiri crear sitios Web reales y dinAmicos. Si ha desarrollado sitios Web utilizando simple HTML, ya conoceri las limitaciones de este enfoque. El contenido estitico de 10s sitios desarrollados unicamente con HTML es exactamente eso, estitico. Estos sitios no varian a menos que se actualicen fisicamente. Los usuarios no pueden interactuar con el sitio de forma significativa. El uso de un lenguaje como PHP y una base de datos como MySQL permite crear sitios Web dinimicos, es decir, susceptibles de personalizaci6n y dotados de informaci6n en tiempo real. En este libro nos hemos centrado deliberadamente en aplicaciones del mundo real, incluso en 10s capitulos introductorios. Comenzamos por analizar un sencillo sistema de pedidos en linea y aprovecharemos para examinar 10s distintos componentes de PHP y MySQL. Abordaremos aspectos relacionados con el comercio electr6nico y la seguridad mientras desarrollamos un sitio Web real y le mostraremos c6mo implementarlos en PHP y MySQL. En la secci6n final del libro, comentaremos c6mo abordar proyectos del mundo real y le guiaremos a travks del disefio, planificaci6n y construcci6n de 10s siguientes ocho proyectos: Autenticaci6n d e usuario y personalizaci6n Carros de la compra Sistemas de administracidn de contenido Correo electr6nico basado en la Web Administradores de listas d e correo Foros Web
Desarrollo W e b con PHP y MySQL
Generacidn de documentos. Conexidn a servicios Web con XML. Puede utilizar estos proyectos directamente o modificarlos para ajustarlos a sus necesidades. Se han seleccionado porque creemos que representan las ocho aplicaciones Web mhs comunes desarrolladas por programadores. Si sus necesidades son distintas, este libro deberia servirle de ayuda para lograr sus objetivos.
Concepto de PHP PHP es u n lenguaje d e secuencia d e comandos d e servidor diseiiado especificamente para la Web. Dentro de una phgina Web puede incrustar cddigo PHP que se ejecutarh cada vez que se visite una pdgina. El cddigo PHP es interpretado en el servidor Web y genera cddigo HTML y otro contenido que el visitante verh. PHP fue concebido en 1994 y es fruto del trabajo d e un hombre, Rasmus Lerdorf. Ha sido adoptado por otras personas d e talent0 y ha experimentado tres trasformaciones importantes hasta convertirse en el producto actual. En octubre de 2002, era utilizado por mhs de nueve millones de dominios de todo el mundo y su numero crece rhpidamente. Si desea conocer el numero actual de sitios que utilizan este lenguaje, visite el sitio h t t p : //www.p h p . net/usage. php. PHP es un producto de cddigo abierto, lo que quiere decir que puede acceder a su cddigo. Puede utilizarlo, modificarlo y redistribuirlo sin coste alguno. Las siglas PHP equivalian inicialmente a Personal Home Page (PBgina de inicio personal) pero se modificaron de acuerdo con la convencidn de designacidn de GNU (del ingles, Gnu's Not Unix, Gnu no es Unix) y ahora equivale a PHP Hipertext Preprocessor (PreprocesZdor a e hipertexto PHP). En la actualidad, PHP esth en su versidn 4. Esta versidn incorpora mejoras importantes a1 lenguaje que comentaremos en la siguiente seccidn. La direccidn Web de la phgina de PHP esth disponible es http: / / www.php.net. La direccidn de la pdgina de Zend (la compafiia cuyos fundadores disefiaron PHP4) se encuentra en http: / / www.zend.com.
Novedades de la versi6n 4.3 de PHP Si ha utilizado PHP anteriormente, observar6 una serie de mejoras importantes en la version 4.3. La mayor parte de las funciones de entrada y salida utilizan ahora un enfoque de secuencias unificado, lo que significa que se pueden abrir archivos fhcilmente, asi como conexiones HTTP, HTTPS y FTP.
Introduccidn
PEAR ya ha salido de su versi6n beta y dispone de un instalador sencillo. La biblioteca gr6fica GD se ha incorporado a PHP La compatibilidad con Apache se sigue considerando como experimental, per0 mejora constantemente. Un ejecutable pensado para su uso con secuencias de linea de comandos que se incorpora de manera predeterminada a1 instalar PHP.
Concepto de MySQL MySQL es un sistema para la administracidn de bases de datos relacional (RDBMS) r6pido y d i d o . Las bases de datos permiten almacenar, buscar, ordenar y recuperar datos de forma eficiente. El servidor de MySQL controla el acceso a 10s datos para garantizar el uso simult6neo de varios usuarios, para proporcionar acceso a dichos datos y para asegurarse de que s610 obtienen acceso a ellos 10s usuarios con autorizacidn. Por lo tanto, MySQL es un servidor multiusuario y d e subprocesamiento mdtiple. Utiliza SQL (del ingles Structured Query Language, Lenguaje de consulta estructurado), el lenguaje est6ndar para la consulta de bases de datos utilizado en todo el mundo. MySQL lleva disponible desde 1996 per0 su nacimiento se remonta a 1979. Ha obtenido el galard6n Choice Award del Linux Journal Readers en varias ocasiones. MySQL se distribuye bajo una licencia de cddigo abierto en la actualidad, per0 tambikn existen licencias comerciales.
Razones para u t i l ~ a rPHP y MySQL A1 desarrollar un sitio de comercio electrbnico, se pueden utilizar una gran cantidad de productos diferentes: Hardware para el servidor Web Un sistema operativo Software de servidor Web Un sistema de administraci6n de base de datos Un lenguaje de secuencia de comandos o de programaci6n Algunas de estas opciones dependen de otras. Por ejemplo, no todos 10s sistemas operativos se ejecutan sobre todo el hardware ni todos 10s lenguajes de secuencia de comandos se pueden conectar a bases de datos, etc. En este libro no vamos a prestar mucha atencidn a1 hardware, ni a 10s sistemas operativos ni a1 software de servidor Web. No ser6 necesario. Una de las ventajas
Desarrollo W e b con P H P y MySQL
de PHP es que estti disponible para Microsoft Windows, para muchas versiones de Unix y para cualquier servidor Web completamente funcional. MySQL resulta igualmente verstitil. Para demostrarlo, 10s ejemplos de este libro se han escrito y probado en dos configuraciones muy utilizadas: Linux con el servidor Web Apache Microsoft Windows 2000 con Microsoft Internet Information Server (11s) Sea cual sea el hardware, sistema operativo y servidor Web que elija, le recomendamos que considere seriamente la opci6n de utilizar PHP y MySQL.
Akuna de las cualidades de PHP Entre 10s competidores principales de PHP se puede citar a Perl, Microsoft Active Server Pages (ASP), Java Server Pages (JSP) y Allaire ColdFusion. En comparaci6n con estos productos, PHP cuenta con muchas ventajas, entre las que se encuentran las siguientes: Alto rendimiento Interfaces para una gran cantidad de sistemas de base de datos diferentes Bibliotecas incorporadas para muchas tareas Web habituales Bajo coste Facilidad de aprendizaje y uso Portabilidad
.L
Acceso a1 c6digo abierto A continuaci6n se comentan en mtis detalle estas cualidades.
Rendimiento PHP es muy eficiente. Mediante el uso de un unico servidor, puede servir millones de acceso a1 dia. Los indicadores comparativos de rendimiento publicados por Zend Technologies (http: / / www.zend.com) muestran que PHP supera ampliamente a sus competidores en esta faceta.
Integracion de base de datos PHP dispone de una conexi6n propia a todos 10s sistemas de base de datos. Ademtis de MySQL, puede conectarse directamente a las bases de datos de
lntroduccidn
PostgreSQL, mSQL, Oracle, dbm, filepro, Hyperwave, Informix, InterBase y Sybase, entre otras. El uso de ODBC (del inglbs Open Database Connectivity Standard, Est6ndar de conectividad abierta de base de datos) permite establecer una conexi6n a cualquier base de datos que suministre un controlador ODBC. Entre ellas, se incluyen 10s productos de Microsoft, y muchos otros.
Bi bliotecas incorporadas Como se ha diseiiado para su uso en la Web, PHP incorpora una gran cantidad de funciones integradas para realizar utiles tareas relacionadas con la Web. Puede generar im6genes GIF a1 instante, establecer conexiones a otros servicios de red, enviar correos electr6nicos, trabajar con cookies y generar documentos PDF, todo con unas pocas lineas de c6digo.
Coste PHP es gratuito. Puede descargar la ultima versi6n de http:/ /www.php.net cuando lo desee sin coste alguno.
Aprendizaje de PHP La sintaxis de PHP se basa en otros lenguajes de programaci61-1,principalmente en C y Perl. Si ya conoce C o Perl, o u n lenguaje d e tip0 C como C++ o Java, no tardar6 nada en utilizar PHP de manera productiva.
Portabilidad PHP estd disponible para una gran cantidad de sistemas operativos diferentes. Puede escribir c6digo PHP en todos 10s sistemas operativos gratuitos del tip0 Unix, como Linux y FreeBSD, versiones comerciales de Unix, como Solaris y IRIX o en las diferentes versiones de Microsoft Windows. Su c6digo funcionar6 sin necesidad de aplicar ninguna modificaci6n a 10s diferentes sistemas que ejecute PHP.
C6digo fuente Dispone de acceso a1 c6digo fuente de PHP. A diferencia de 10s productos comerciales y de c6digo cerrado, si desea modificar algo o agregar un elemento al programa, puede hacerlo con total libertad. No necesitara esperar a que el fabricante publique parches, ni tendr6 que preocuparse porque el fabricante cierre sus puertas o decida abandonar el producto.
Desarrollo W e b con PHP y MySQL
Algunas de las ventajas de MySQL Entre 10s competidores principales de MySQL, se puede citar a PostgreSQL, Microsoft SQL Server y Oracle. MySQL cuenta con muchas ventajas, entre las que se encuentran las siguientes: Alto rendimiento Bajo coste Facilidad de configuraci6n y aprendizaje Portabilidad Accesibilidad a c6digo fuente A continuaci6n se comentan en mds detalle estas cualidades.
Rendimiento MySQL es muy rdpido. Si lo desea, puede consultar la pdgina de indicadores comparativos de sus desarrolladores en el sitio Web mysql.com. Estos indicadores revelan en muchos casos una diferencia de velocidad abismal con respecto a 10s productos de la competencia.
Bajo coste MySQL estd disponible de manera gratuita, bajo una licencia de c6digo abierto, o por un precio reducido en forma de licencia comercial si resultara necesario para su aplicaci6n.
-
Facilidad de uso Las bases de datos mis modernas utilizan SQL. Si ha utilizado otros RDBMS, no deberia tener problemas para adaptarse a este sistema. MySQL resulta ademds rnds sencillo de configurar que otros productos similares.
PortabiIidad MySQL se puede utilizar en una gran cantidad de sistemas Unix diferentes asi como bajo Microsoft Windows.
C6digo fuente Como en el caso de PHP, puede obtener y modificar el c6digo fuente de MySQL.
lntroduccidn
C6mo estd organizado este libro Este libro se divide en cinco partes principales. La parte I, "Uso de PHP", proporciona una visi6n general de las partes fundamentales del lenguaje PHP. Los ejemplos escogidos son ejemplos del mundo real utilizados para desarrollar un sitio de comercio electr6nico y no c6digo sin utilidad priictica. Esta secci6n se inicia con el capitulo "Curso acelerado". Si ya tiene experiencia en programaci6n con PHP, puede repasar riipidamente esta secci6n. Si ha trabajado antes con PHP o acaba de llegar a1 mundo de la programaci611, conviene que se detenga un poco m6s sobre ella. La parte 11, "Uso de MySQL" aborda 10s conceptos y el disefio implicado en el uso de sistemas de bases de datos relacionales como MySQL, el uso de SQL, la conexi6n de la base de datos MySQL a1 mundo con PHP y temas avanzados sobre MySQL, como la seguridad y la optimizaci6n. La parte 111, "Comercio electr6nico y seguridad" trata alguno de 10s temas generales implicados en el desarrollo de un sitio de comercio electr6nico utilizando cualquier lenguaje. El aspect0 m b importante es la seguridad. Seguidamente, explicaremos c6mo utilizar PHP y MySQL para autenticar usuarios y recoger, transmitir y almacenar datos de manera segura. La parte IV, "Tkcnicas avanzadas de PHP", trata de manera detallada alguna de las funciones principales que integra PHP. Se han seleccionado aquellos grupos de funciones que tienen una mayor probabilidad de aparici6n a1 crear un sitio de comercio electr6nico. Aprenderii a interactuar con el servidor, a interactuar con la red, a generar imiigenes, a manipular fechas y horas y variables de sesibn. En la parte V, "Construcci6n de proyectos pricticos con PHP y MySQL", trata temas del mundo real como la gesti6n de proyectos de gran tamafio y funciones de depuraci6n. Se incluyen proyecos de ejemplo que muestran el potencial y la versatilidad de PHP y MySQL. -
Finalmente Esperamos que disfrute de este libro y que se lo pase tan bien aprendiendo a utilizar PHP y MySQL como lo hicimos nosotros cuando empezamos a utilizar estos productos. Es un placer trabajar con ellos. En poco tiempo, podrii unirse a 10s miles de desarrolladores que utilizan potentes y robustas herramientas para desarrollar sitios Web din6micos y en tiempo real.
En este capitulo se realiza un ripido repaso de la sintaxis y de las estructuras de lenguaje de PHP. Si ya programa en PHP, puede utilizar este capitulo para colmar sus lagunas de conocimientos. Si tiene experiencia en programaci6n con C, ASP u otro lenguaje de programaci611, este capitulo le ayudari a ponerse a1 dia riipidamente. En este libro aprender5 a utilizar PHP a travks de una serie de ejemplos del mundo real, tornados de nwstr-xperiencia en el desarrollo de sitios de comercio electr6nico. Por regla general, 10s textos sobre programaci6n utilizan ejemplos muy simples para explicar elementos de sintaxis. Nosotros hemos decidido no seguir esta prictica. Nos hemos dado cuenta de que lo que el lector quiere con frecuencia es poder ver un sitio ya creado y operativo, para entender c6mo se utiliza el lenguaje, en lugar de otra guia de sintaxis y funciones sin mayor inter& que un manual en linea. Pruebe 10s ejemplos, introddzcalos y ciirguelos desde el CD-ROM, modifiquelos, dividalos en partes y aprenda a unirlas de nuevo. En este capitulo comenzaremos por presentar un ejemplo de un formulario de product0 en linea para aprender a utilizar las variables, operadores y expresiones en PHP. Tambien analizaremos 10s tipos de variables y el orden de precedencia de 10s operadores. Le ensefiaremos a acceder a variables de formulario y a manipularlas para calcular 10s totales y 10s impuestos correspondientes en un pedido de cliente. Seguidamente, desarrollaremos un ejemplo de formulario de pedido en linea utilizando nuestra secuencia de comandos de PHP para validar 10s datos. Examina-
remos el concept0 de valores booleanos y presentaremos ejemplos de uso de if,else, del operador ? : y de la instruction s w i t c h . Por ultimo, analizaremos el tema de 10s bucles para lo cual escribiremos c6digo de PHP con el que generar tablas HTML repetitivas. Entre 10s temas clave que se analizarrin estan 10s siguientes: Como incrustar PHP en HTML Como agregar contenido dinrimico C6mo acceder a variables de formulario Identificadores Variables declaradas por el usuario Tipos de variables Asignacion de valores a variables Constantes Ambito de variables Operadores y su prioridad Expresiones Funciones de variables Toma de decisiones con i f , e l s e y s w i t c h
Uso de PHP Para realizar 10s ejemplos dk ese capitulo, asi como 10s del resto del libro, necesitar6 disponer de acceso a un servidor Web con PHP instalado. Para sacar el mriximo partido a 10s ejemplos y casos prricticos que se presentarrin, deberia ejecutarlos e intentar modificarlos. Para ello, necesitar6 un banco de pruebas sobre el que experimentar. Si no tiene PHP en su equipo, deberri instalarlo o pedirle a su administrador del sistema que lo haga en su lugar. En el apkndice A encontrarri las instrucciones y en el CD-ROM se incluye todo lo necesario para instalar PHP en UNIX y Windows NT.
Aplicacion de eiemplo: Bob's Auto Parts Una de las aplicaciones mris comunes de cualquier lenguaje de secuencia de comandos de servidor es el procesamiento de formularios Web. Empezaremos nuestro estudio de PHP implementando un formulario para Bob's Auto Parts, una compafiia
Desnrrollo Web corz P H P y MySQL
d e repuestos d e coches. El ccidigo utilizado para este ejemplo se incluye en el directorio correspondiente del CD.
p
5 y ~ L d u - kc'p l qqc4$f3s
Por el momento, el programador de HTML d e la empresa d e Bob ha creado un formulario d e pedido para los repuestos que vende la empresa. En la figura 1.1 se ilustra el aspecto del formulario. Resulta bastante sencillo y es muy parecido a 10s que se pueden encontrar e n Internet. Lo primero clue Bob quiere saber es qu6 pide el cliente, obtener el total del pedido e incluir 10s impuestos que se deben pagar. En el listado 1.1se recoge parte del codigo HTML asociado a esta pigina. En este ccidigo debe fijarse en dos &as importantes.
I
I1
BOWS
~
~Parts t o
Order Form Item Tires
oil Spark Plu~,s
Quantity
rI r-
Figura 1.1. El formulario inicial d e pedido d e B o b solo registra productos y cantidades
Listado 1.1, orderform.html. Codigo HTML correspondiente al formulario basico de pedido de Bob
1 . Curso acelerado de P H P
En primer lugar, hemos establecido la accibn del formulario en el nombre de la secuencia de comandos PHP que procesard el pedido del cliente. (Escribiremos esta secuencia de comandos a continuacibn.)Por regla general, el valor del atributo ACTION es el URL que se cargari cuando el usuario pulse el botbn de envio. Los datos indicados por el usuario en el formulario se enviarin a este URL a traves del metodo especificado en el a t r i b u t o ~ ~ya ~ sea ~ o GET ~ , (ajuntado al final del URL) o POST (enviado como un paquete diferente). En segundo lugar, deberia fijarse en 10s nombre s de 10s formularios t i r e q t y, o i l q t y Y s p a r k q t y . Utilizaremos estos nombres de nuevo en nuestra secuencia de comandos de PHP. Por ello, resulta importante asignar nombres significativos a 10s campos de formulario que Sean sencillos de recordar a1 escribir la secuencia de comandos de PHP. Algunos editores de PHP generan nombres de campo del tip0 camp02 3 de manera predeterminada. Estos campos resultan dificiles de recordar. Su vida como programador de PHP resultari mucho m i s sencilla si estos nombres reflejan 10s datos que se introducen en el campo. Es aconsejable adoptar un estindar de codificacibn para nombres de campos de manera que todos 10s nomljres $el sitio utilicen el mismo formato. De esta forma le resultar6 m6s sencillo recordar, por ejemplo, si abrevib una palabra en el nombre de un campo o si utilizb guiones bajos para representar espacios.
Procesamiento del formulario Para procesar el formulario, tendremos que crear la secuencia de comandos mencionada en el atributo A C T I O N de la etiqueta FORM llamada p r o c e s s o r d e r php. Abra su editor de texto y Cree este archivo. Escriba el siguiente cbdigo:
.
< t i t l e > B o b l s Auto P a r t s < h l > B o b t s Auto P a r t s < / h l >
0rder Results