600

Php manual de referencia holzner, steven(author)

Embed Size (px)

Citation preview

, conteniendo un encabezado y una porcinde texto: Uso de PHP y HTML juntosUso de PHP y HTML juntosAqu est su informacin PHP:
. . . Ahora, sta es la clave (puede insertar PHP en cualquier parte de esta pgina y el motorde PHP del servidor Web lo ejecutar, en tanto lo contengan las marcas ). Cuandose ejecute PHP, cualquier cdigo HTML generado se insertar en la pgina, en el lugar de esePHP. As que, por ejemplo, si desea mostrar la tabla de configuracin PHP que genera la funcinphpinfo( ), podra llamar a esa funcin de esta manera en la pgina Web: Uso de PHP y HTML juntosUso de PHP y HTML juntos 27. 12PHP:Manual de referencia Aqu est su informacin PHP:

Ahora bien, cuando el motor PHO ejecute esta pgina en el servidor, el cdigo HTML pasar por el navegador sin cambios y el fragmento de PHP ser ejecutado. Cualquier cdigo HTML que genere PHP se insertar tambin en la pgina enviada al navegador. Dicha pgina se conoce como phphtml.php, que puede ver en la Figura 1-6. Observe que el cdigo HTML de la pgina aparece donde debe estar as como el cdigo HTML generado por PHP. Desea dar a sus pginas un aspecto ms profesional? Puede usar logotipos de PHP, dis- ponibles en www.php.net/download-logos.php. El uso de estas imgenes descargables en sus pginas Web, es para conferirles el aspecto propio de PHP. Por ejemplo, as es como podra emplear la imagen php-med-trans-light.gif en una pgina llamada phpimage.php (coloque el archivo de imagen en el mismo directorio que phpimage.php en su servidor): FIGURA 1-6 Combinacin de PHP y HTML 28. Captulo 1: Fundamentos de PHP 13 Uso de PHP y HTML juntos Uso de PHP y HTML juntossta es su informacin de PHP:

Y ver los resultados el logotipo se encuentra en la esquina inferior derecha en laFigura 1-7.FIGURA 1-7 Uso de logotipos de PHP 29. 14 PHP: Manual de referencia Impresin de textoDe acuerdo, qu tal si ahora imprimimos texto con PHP? Ya ha visto que puede colocar textoen sus archivos PHP de manera muy similar a como lo hara en una pgina HTML, como aqu,donde se coloca un encabezado y texto en una pgina: Uso de PHP y HTML juntosUso de PHP y HTML juntossta es su informacin de PHP: . . . Esto es correcto pero, evidentemente, tambin esttico. El texto que se muestra no va acambiar, sin importar lo que suceda en la parte de cdigo de su pgina, y eso es claramenteinaceptable. Qu pasa si desea presentar resultados de una bsqueda en una base de datos oreservacin de boletos? Necesita insertar texto en la pgina manejando PHP y, para hacerlo, se emplea la instruccinecho de PHP. Por ejemplo, parahacer ecodel textoBienvenido a PHPen la pgina Web devueltaal navegador, se podra agregar esta lnea de cdigo a una nueva pgina, phpdisplaytext.php: Mostrando texto de PHP Mostrando texto de PHPEsto es lo que PHP tiene que decir:

Observe esta pgina, phpdisplaytext.php, en su navegador ahora, como se muestra en laFigura 1-8. Ver el texto que PHP insert en la pgina de la figura (nada mal). 30. Captulo 1: Fundamentos de PHP15FIGURA 1-8 Cmo mostrar texto desde PHPPuede pasar texto para mostrar la instruccin echo, empleando comillas sencillas o dobles: echo "Bienvenido a PHP."; echo Bienvenido a PHP.;Hay una diferencia sutil entre estas dos formas de pasar texto, que ver en el siguientecaptulo. Tambin puede pasar nmeros directamente para hacer eco si lo desea, sin recurrira comillas: echo 1234.5678;Y puede pasar texto entre parntesis para hacer eco tambin: echo ("Bienvenido a PHP.");El paso de datos a funciones tambin se realiza de esta forma: coloque los datos dondedesee que la funcin opere, entre parntesis. Hay muchas funciones integradas en PHP; sinembargo, echo, tcnicamente hablando, no es una funcin es una caracterstica integrada dellenguaje PHP. 31. 16PHP:Manual de referencia Impresin de HTML Nunca olvide que cuando trabaja con PHP en lnea, interacta con el usuario a travs de un navegador. Eso significa que el texto enviado por usted de vuelta al navegador se interpretar como HTML, no un texto simple. Eso da tambin la posibilidad de utilizar HTML para dar for- mato a su texto, tal y como se indica aqu en una nueva muestra, phpdisplayhtml.php: Mostrando texto de PHP Mostrando texto de PHP Esto es lo que PHP tiene que decir:

Puede ver esta pgina en la Figura 1-9 incluyendo el formato en HTML.FIGURA 1-9 Cmo mostrar HTML desde PHP 32. Captulo 1:Fundamentos de PHP 17As que cuando quiera pasar a la siguiente lnea en su resultado, deber insertar el comandoHTML correcto,
, en el texto que se muestra.Mayor poder de echoTambin puede ejecutar PHP desde la lnea de comandos, simplemente utilizando el comandophp. Esto es lo que vera ejecutando el archivo phpdisplayhtml.php desde la lnea de comandos(recuerde que % representa un smbolo de sistema genrico en este libro):%php phpdisplayhtml.php Mostrando texto de PHPMostrando texto de PHPEsto es lo que PHP tiene que decir:

Bienvenido
a
PHP.Observe que el cdigo HTML no se interpret como HTML; se imprimi como textosimple. Si, en este caso, desea pasar a la lnea siguiente, debe utilizar el carcter de control n, quePHP interpretar como carcter de lnea nueva (ste mostrar las tres palabras en sus propiaslneas):echo "Bienvenidon";echo "an";echo "PHP.";ste es un ejemplo de los caracteres de control disponibles en PHP:n Carcter de lnea nuevar Cambio de lneat Tabulador Muestra una $ Muestra un signo $" Muestra una"0 a 777 Muestra un carcter correspondiente a un cdigo hexadecimal (de base 8)x0 a xFF Muestra un carcter correspondiente a un cdigo hexadecimal (de base 16) 33. 18PHP:Manual de referenciaPuede imprimir un carcter sensible como una comilla ("), sin decir a PHP que ha llegado al final de su texto (lo que una marca " hara en su defecto). Para esto, use " en su lugar de esta forma: echo "l dijo, "Me gusta el helado."";A esto se le conoce como escapar de la comilla, para que PHP la muestre en lugar de tratarla como marca al final de una cadena de texto.Si lo desea, puede dividir una cadena entrecomillada larga en varias lneas en su escrito,para conservar los cambios de lnea si imprime desde la lnea de comando. (Si imprime enuna pgina Web, los cambios de lnea sern pasados por alto): Tambin puede separar los elementos que desea imprimir con comas, de esta forma: echo "Bienvenido", "a", "PHP."; Todos los elementos que imprima de esta forma aparecern en la impresin, uno detrs del otro: BienvenidoaPHP. Si desea espacios entre las palabras, haga algo como esto: echo "Bienvenido ", "a ", "PHP."; Esto producira Bienvenido a PHP. Tambin puede ensamblar cadenas de texto en una sola utilizando un punto (.). ste es un ejemplo: echo "Bienvenido " . "a " . "PHP.";En este caso, PHP toma su expresin "Bienvenido" . "a " . "PHP." y la ensambla junta (a esto se le llama concatenacin) en una cadena, "Bienvenido a PHP."; luego pasa esa cadena a la instruccin echo.Adems, existe otra forma de mostrar texto: puede usar tambin la instruccin print de PHP con la misma sintaxis, as: print Bienvenido a PHP.;. Cul es la diferencia entre print y echo? No mucho; print es ms una funcin de PHP (vea el captulo 5), de modo que produce un 34. Captulo 1: Fundamentos de PHP 19valor siempre iniciado en 1. Para la mayora de los fines, echo y print funcionan igual en PHP, demodo que el uso de cada una depender de usted.Uso de documentos here de PHPDe hecho, hay otra forma de mostrar texto que debe conocer y consiste en usar documentoshere de PHP. Un documento here es tan slo texto inserto directamente en una pgina PHP,entre dos instancias del mismo token; ese token es una palabra, como END. Luego puede mos-trar el texto en un documento here utilizando la sintaxis echo Esto es lo que obtendra al ejecutar la instruccin a travs del CLI con la opcin l:%php -l echoer.phpPHP Parse error: syntax error, unexpected T_STRING, expecting , or ; in echoer.php on line 2Errors parsing echoer.phpEs el mismo error que obtendra de PHP en lnea (php-cgi). Debe saber que el resultado producido por CLI difiere de php-cgi; por ejemplo, en CLI no seincluyen encabezados HTTP estndar que imprime php-cgi al devolver el resultado al navegador.Y el CLI imprime los mensajes de error en texto simple, no en cdigo HTML que dar php-cgi. 39. 24 PHP: Manual de referencia Tambin vale la pena observar que en Linux y Unix, pueden ejecutarse scripts PHP con sloescribir el nombre del script en la lnea de comandos, si indica dnde encontrar PHP con unalnea que inicia con los caracteres #!:#! /usr/bin/php Adicin de comentarios a cdigo de PHPAl igual que virtualmente todos los lenguajes de programacin, se pueden agregar comenta-rios al cdigo PHP. Los comentarios son anotaciones agregadas por usted para hacer su cdigolegible y omitido por PHP. Es importante agregar comentarios si el cdigo es extenso, ya que esposible que usted o alguien ms revise el cdigo tiempo despus y no tenga la menor ideade para qu sirve. Puede reconstruir laboriosamente lo que sucede, pero por qu no agregarcomentarios que faciliten el proceso? De esa forma puede descifrar su viejo cdigo (o de alguienms) con facilidad. Existen tres tipos de comentarios en PHP. El primer tipo de comentario permite crearcomentarios en diferentes lneas, que comiencen con /* y terminen con */, de esta forma:Eso es genial si tiene un comentario extenso que ocupar mltiples lneas para mostrarse.Sin embargo, algo que vuelve loco a PHP es que el usuario anide comentarios, que comienzancon /* y terminan con */, de esta forma: PHP busca */ para marcar el final del comentario y si anida comentarios dentro de otros,encontrar */ antes del final real del comentario. Los otros dos tipos de comentarios son de una lnea. Este tipo de comentarios slo seextienden a una lnea, no como los del tipo multilneas /*...*/. El primer tipo de comentario deuna lnea comienza con //: 40. Captulo 1: Fundamentos de PHP25 Y el siguiente tipo de comentario en una lnea funciona de la misma forma, salvo quecomienza con el signo #: De hecho, PHP pasa por alto todo despus de la doble barra // o el signo #; de ese modotambin puede colocar comentarios de un rengln al final de las lneas, despus de cdigo PHPvlido como ste:Puede utilizar, incluso, comentarios en una lnea para hacer bloques de comentarios en sucdigo PHP, similares a comentarios multilneas, como ste: Desea algo que destaque realmente, en trminos de comentarios? Pruebe algo como esto: No es necesariamente bonito, pero capta su atencin. Probablemente descubrir que utiliza ms comentarios en una lnea que en mltipleslneas. Los comentarios en una lnea son ms fciles de escribir, pues no tiene que llevar el con-trol del punto final del comentario. Sin embargo, los comentarios en mltiples lneas son tilestambin en PHP, y los ver con frecuencia en la definicin de funciones de PHP, explicando qudatos pasa a la funcin y cules recibe de vuelta. 41. 26 PHP: Manual de referencia Trabajo con variablesHasta este punto, el texto producido por nuestros scripts ha sido esttico. En este caso, porejemplo, el script muestra slo el texto Bienvenido a PHP.:Eso es texto bastante esttico. Puede hacer aadiduras con el operador de adicin de PHP,+, para agregar nmeros de esta forma: sta es la respuesta La respuestaLa primera vez que ejecuta esto se muestra el mensaje sta es la respuesta: 14. Y la segundavez que se ejecuta, vuelve a mostrar el mensaje sta es la respuesta: 14.As que es lo mismose vuelve a obtener texto esttico. Esto est bien hasta donde llega, pero no muy lejos. Si slo deseara texto esttico, podraquedarse con HTML. Es ah donde las variables entran en accin. Como en cualquier otrolenguaje de programacin, las variables de PHP son ubicaciones en la memoria con nombresasignados alojando datos. Suponga por ejemplo que deseara llevar el control del nmero deusuarios de su sitio en tres ciudades Pars, Londres y Acapulco, pero el nmero de usuariosen cada lugar no se conoce hasta ejecutar el programa. Las variables llegan al rescate. Con las variables, usted podra almacenar el nmero de usuarios en la variable de cadaciudad al momento de la ejecucin. En PHP, los nombres de variables comienzan con un signo$, seguido de un nombre y ese nombre debe comenzar con una letra o lnea de subrayado, nocon un nmero. Por ejemplo, para almacenar el nmero de usuarios en Pars, podra tener unavariable llamada $pars; el nmero de usuarios en Londres y Acapulco podra estar en las varia-bles $londres y $acapulco. Podra colocar datos en esas variables al momento de la ejecucin ysumar los tres elementos de datos, tambin al momento de la ejecucin. La suma se vera as: sta es la respuesta La respuesta 42. Captulo 1: Fundamentos de PHP27 Al momento de la ejecucin, el valor dentro de cada variable se sustituye por esa variable; de modo que si $pars = 1, $londres = 5 y $acapulco = 8, PHP podra ver la lnea anterior de cdigo PHP de esta forma: Y entonces obtiene sta es la respuesta: 14. (la misma que antes). Pero ahora supongamos que las tres variables alojaran 2, 4 y 6 al momento de la ejecucin, con lo que obtendra Entonces obtiene sta es la respuesta: 12. lo que significa que nuestro mensaje ya no es esttico. sa es la razn por la que se llaman variables los datos que contienen pueden variar. se es el primer paso para trabajar con datos en PHP: usar variables para almacenar datos. As que, cmo almacenar exactamente datos en variables?Almacenaje de datos en variables En PHP, como otros lenguajes, puede asignar datos a variables. PHP le permite almacenar nmeros y texto en dichas variables, como en estos ejemplos: $pi = 3.1415926535; $nmero_de_Saturnos = 1; $nombre = "Klostix Daz"; $pez = "bacalao"; A diferencia de otros lenguajes en lnea, como Java, PHP no insiste en que usted cree dife- rentes tipos de variables para cada dato. sta es la forma en que tales variables podran crearse en Java: double pi = 3.1415926535; int nmero_de_Saturnos = 1; String nombre = "Klostix Daz"; String pez = "bacalao"; PHP puede almacenar todo tipo de datos en variables y no tiene que crear diferentes tipos de variables para almacenar esos datos, que facilita mucho las cosas. Por otra parte, en virtud de la arquitectura interna de las computadoras, PHP almacena internamente sus datos en diferentes formatos y a veces es importante saber cules son esos formatos internos (hablaremos ms de esto despus). 43. 28 PHP:Manual de referenciaObserve el uso del signo =, se utiliza para asignar datos a variables. El signo = es el operador deasignacin en PHP, que le permite encuadrar datos a variables. (De hecho, existen otros operadoresde asignacin, como se ver en el siguiente captulo; pero el signo = es el principal.) Por ejemplo,para inicializar el nmero de hamburguesas con queso de su cdigo en 1, usted hara esto:Luego podra transmitir el nmero actual de hamburguesas con queso al navegador:Ahora podra cambiar el nmero almacenado en la variable $hamburguesasconqueso con-forme se sumaran ms hamburguesas en lnea. Por ejemplo, si tiene tres hamburguesas ms,podra utilizar el operador + de PHP para sumarlas al nmero actual almacenado en $hambur-guesasconqueso de esta forma: Ahora puede mostrar el nuevo nmero de hamburguesas con queso en este ejemplo,phpvariables.php, de la siguiente forma: Almacenar datos en variables Almacenar datos en variables 44. Captulo 1: Fundamentos de PHP 29 Puede ver phpvariables.php en la Figura 1-11 donde, como apreciar, el valor almacenado en $hamburguesasconqueso cambi exitosamente. En algunos lenguajes, como Java, tienen que declararse variables, dando su tipo y nombre, antes de usarlas, como double pi; int nmero_de_Saturnos = 1; En PHP no tiene que declarar variables antes de usarlas otra forma en que PHP ahorra tiempo y esfuerzo. Todo lo que debe hacer antes de usar una variable en PHP, consiste en asignar valor cuando lo haga, PHP crear esa variable por usted y almacenar sus datos FIGURA 1-11 Cmo poner las variables a trabajar en PHP 45. 30PHP: Manual de referencia en ella. Sin embargo, eso significa que debe asignar datos a una variable antes de leer el valor de la misma. Por ejemplo, si intentara leer el nmero de hamburguesas con queso sin antes inicializarlo, obtendra el error en la Figura 1-12. ste es el mensaje de error: PHP Notice: Undefined variable: hamburguesasconqueso in C:Inetpubwwwrootch01 phpvariables.php on line 14 PHP Notice: Undefined variable: hamburguesasconqueso in C:Inetpubwwwrootch01phpvariables.php on line 16 Desea anular una variable? Resulta difcil pensar en aquellas ocasiones que usted podra ya no desear el uso de una variable, pero en realidad puede anular variables en PHP. Tan slo use un cdigo como ste: unset ($hamburguesasconqueso);Despus de ejecutar esta instruccin de PHP, la variable $hamburguesasconqueso ya no existir ni obtendra un error, si intentara leer el valor que sta contena. FIGURA 1-12 Cuando olvida inicializar una variable en PHP 46. Captulo 1: Fundamentos de PHP 31Interpolacin de cadenas Puede mostrar el valor de una variable como sta, desde luego: En este caso, usted ha colocado explcitamente $hamburguesasconqueso en la lista de ele- mentos cuyos valores desea mostrar. Por otra parte, hay una forma abreviada de hacer esto en PHP que debe conocer, llamada interpolacin de cadenas.Cuando usted usa la interpolacin, slo tiene que colocar la variable cuyo valor desea inser- tar, dentro de una cadena de texto con comillas dobles (no con comillas sencillas). Por ejemplo, podra convertir el ejemplo phpvariables.php anterior para usar la interpolacin de cadenas, en un nuevo ejemplo llamado phpinterpolation.php, de esta forma: Uso de la interpolacin de cadenas Uso de la interpolacin de cadenas Observe cmo funciona esto: PHP ve el nombre de una variable, $hamburguesasconqueso, dentro de una cadena de texto con comillas dobles:echo "Nmero actual de hamburguesas con queso: $hamburguesasconqueso
"; Eso significa que PHP colocar de inmediato el valor alojado en $hamburguesasconqueso en la cadena, de esta forma:echo "Nmero actual de hamburguesas con queso: 1
"; Es as como funciona la interpolacin de cadenas; PHP sustituir el valor de una variable por aquella en una cadena de texto con comillas dobles. Puede ver phpinterpolation.php en accin en la Figura 1-13. La interpolacin de cadenas es un atajo rpido que permite colocar el valor de una variable en una cadena con comillas dobles (no con comillas sencillas), pero hay algo que debe saber 47. 32PHP: Manual de referencia FIGURA 1-13 Uso de la interpolacin de cadenas en PHP aqu: necesita rodear el nombre de la variable con espacios o puntuacin simple. Si coloca el nombre de la variable directamente junto al texto, podra confundir a PHP. Por ejemplo, si la variable $tipo aloja el texto balon y desea insertar el texto baloncesto en texto con comillas dobles, podra verse tentado a utilizar la expresin $tipocesto. Y eso no funcionar; ver el aviso PHP Notice: Undefined variable:tipocesto en C:phpwrong.php on line 8 La solucin consiste en encerrar el nombre de la variable entre llaves, como stos: {$tipo}, creando la expresin ${tipo}cesto, como se puede apreciar en phpadjoininginterpolation.php: Uso de interpolacin de variables con palabras adjuntas Uso de interpolacin de variables con palabras adjuntas 48. Captulo 1: Fundamentos de PHP33 FIGURA 1-14 Uso de la interpolacin de cadenas con texto adjunto en PHP Ahora funciona, como se ve en la Figura 1-14. La interpolacin de cadenas es til, pero podra no utilizarla todo el tiempo. Por ejemplo, qu sucede si tiene la cadena de texto: Conseguimos muy buen precio en la comida fue $barato incluso para Jessica.?). As como se plantea, confundir a PHP, que intentar hallar una variable llamada $barato y dar un error cuando no pueda encontrarla. Existen dos soluciones a este problema; primero, podra usar comillas sencillas en vez de dobles, as: Conseguimos muy buen precio en la comida fue $barato incluso para Jessica.. Cuando se utilizan comillas sencillas, PHP no aplica la interpolacin de cadenas. La segunda forma de evitar interpolacin cuando no la desea pero an pretende usar comillas dobles consiste en anular el nombre de la variable colocando antes del signo $ una diagonal inversa (), que da como resultado: Conseguimos muy buen precio en la comida fue $barato incluso para Jessica.. PHP ver el smbolo $ y lo convertir en un smbolo $ inocuo, como debe ser aqu, no el inicio de un nombre de variable. Eso es interpolacin de cadenas si desea colocar el valor de una variable en una cadena con comillas dobles, sta es la herramienta para usted.Creacin de variables alternas Mientras analizamos las variables, tambin vale la pena analizar variables alternas. PHP permite stas para alojar el nombre de otra variable. 49. 34PHP: Manual de referenciaAs es como funciona. Podra tener una variable llamada $hamburguesasconqueso, a la que podra dar un valor de 1: Luego podra crear una nueva variable, $tipodehamburguesa, que aloje el nombre de la pri- mera variable,hamburguesasconqueso: Sabe que puede mostrar el valor en $hamburguesasconqueso de esta forma: Resulta que tambin puede tener acceso al valor en $hamburguesasconqueso mediante la variable alterna, $tipodehamburguesa, de esta forma: Observe la sintaxis como $tipodehamburguesa contiene el texto hamburguesasconqueso, la expresin $$tipodehamburguesa es equivalente a $hamburguesasconqueso. Desea utilizar variables alternas con interpolacin de cadenas? PHP tendr problemas con una expresin como $$tipodehamburguesa entre comillas dobles; de modo que la forma de corregir eso consiste en utilizar phpvariablevariables.php: 50. Captulo 1: Fundamentos de PHP35 Uso de variables alternas Uso de variables alternas Si no hubiera usado los llaves en este ejemplo, habra obtenido el siguiente resultado: Nmero de hamburguesas con queso: 1 Ese nmero de nuevo: 1 Una vez ms: $hamburguesasconqueso Ahora mismo, las variables alternas podran parecer poco ms que una curiosidad, pero tienen sus usos cuando se trabaja con ciclos y matrices, que se analizan en el captulo 3.Creacin de constantes A veces no desea que un elemento de datos sea variable. Por ejemplo, el valor de pi, 3.1415926535, no debe cambiar. Si creara una variable llamada $pi, algo en su cdigo podra asignar un nuevo valor a $pi por error. Lo que debe hacer es crear una constante, cuyo valor no se pueda modificar.En PHP, una constante se crea con la funcin define, pasando a define el nombre de la cons- tante que desea crear y el valor que quiere asignarle, como define (PI, 3.1415926535). Eso crea una constante llamada PI distinguiendo entre maysculas y minsculas: PI no es lo mismo que pi (si quiere que una constante no distinga entre maysculas y minsculas, puede pasar un valor TRUE como ste: define (PI, 3.1415926535, TRUE)). Observe que esto simplemente crea una constante llamada pi no se utiliza un signo $ frente al nombre, porque la convertira en variable.As es como funciona la creacin de una constante en un archivo de ejemplo phpconstant.php: Definicin de constantes 51. 36PHP:Manual de referencia Definicin de constantes Y puede ver los resultados de la Figura 1-15, donde la constante se cre en realidad. As, sa es la idea tras las constantes (si intenta alterar el valor de esta constante, pi (por ejemplo, pi = 3.14), PHP no lo aceptar, ni siquiera iniciar el script). Esto es algo de tomar en cuenta: como a las constantes no se les antepone un prefijo $, PHP se puede confundir si utiliza una constante con el mismo nombre de una de las palabras clave reservadas a PHP. Estas palabras clave aparecen en la Tabla 1-1. Asimismo, existen varias constantes predefinidas disponibles para sus scripts. Utilizaremos estas constantes conforme las necesitemos; ste es un ejemplo: _LINE_ El nmero de lnea actual del archivo _FILE_ La ruta completa y el nombre del archivo _FUNCTION_ El nombre de la funcin _CLASS_ El nombre de la clase _METHOD_ Nombre del mtodo de clase PHP_VERSION Versin de PHP _CLASS__FILE__FUNCTION_ _LINE_ _METHOD_ and arrayas breakcasecfunctionclass constcontinuedeclaredefault diedoecho else elseif empty enddeclare endfor endforeach endif endswitchendwhile eval exception exit extends forforeach function global if include include_once isset list new old_function or php_user_filterprint requirerequire_once return staticswitch unset usevar whilexor TABLA 1-1Palabras clave de PHP 52. Captulo 1: Fundamentos de PHP37 FIGURA 1-15 Definicin de constantes PHP_OS El sistema operativo DEFAULT_INCLUDE_PATH Donde PHP buscar lo que necesita Por ejemplo, el uso de echo_LINE_ en la ubicacin especfica de un script mostrar la lnea actual en ejecucin.Entendamos los tipos de datos internos de PHP PHP le hace un gran favor al permitirle almacenar datos sin especificar el tipo. En otros lengua- jes necesita establecer el formato exacto de los datos de cada variable, pero PHP se encarga de eso por usted.Sin embargo, a veces tiene que conocer los tipos de datos internos usados por PHP, como ver a continuacin. stos son esos tipos internos: boolean Aloja valores verdaderos/falsos integer Aloja nmeros como -1, 0, 5, etctera. float Aloja nmeros de punto flotante (dobles), como 3.14159 o 2.7128 string Aloja texto como Bienvenido a PHP. array Aloja matrices de elementos de datos object Aloja objetos de programacin resource Aloja un recurso de datos NULL Aloja un valor NULL (nulo) 53. 38PHP: Manual de referencia PHP suele manejar los tipos de sus datos automticamente. Por ejemplo, esta instruccin crea una variable alojando una cadena: $datos = "Son muchas hamburguesas con queso las que tiene ah."; Esta instruccin crea una variable que aloja un nmero flotante internamente: $datos = 123.456; ste es un ejemplo que crea una variable booleana (TRUE/FALSE, VERDADERO/FALSO): $datos = TRUE;Todo eso est bien; el problema se presenta cuando mezcla tipos de datos. Por ejemplo, si comienza con una variable simple inicializada en 0 entonces eso crea una variable que contiene la cadena 0. Ahora bien, qu sucede si suma 1 al valor de esa variable?: En este caso, PHP hace lo mejor que puede; sumar el nmero 1 a la cadena 0 deja $varia- ble alojando el entero 1. Qu sucede si suma un valor de punto flotante? Ahora $variable aloja un valor flotante de 2.2. Qu pasa si suma 3 + 8 hamburguesas con queso? De nueva cuenta, PHP har su mejor esfuerzo, sumando 3 + 8 y dejando el resultado, un valor entero de 11, como resultado: 54. Captulo 1: Fundamentos de PHP39 Debe evitar la confianza en estas reglas. Estn integradas en PHP, pero confiar en ellas podra darle un resultado equivocado. Si desea convertir un valor de un tipo de datos a otro, puede usar explcitamente un tipo de datos combinado. Los tipos de datos combinados se ponen entre parntesis; por ejemplo: $entero = (integer) $datos; convierte explcitamente el valor de $datos a entero. El siguiente convierte el valor en $datos en un valor $flotante: $flotante = (float) $datos; Cuando se hace la conversin al tipo booleano, estos valores se consideran FALSE (falsos): El booleano FALSE El entero 0 El flotante 0 La cadena vaca y la cadena 0 Una matriz con cero elementos Un objeto sin variables miembros Un tipo especial NULL (incluyendo valores no inicializados) Cualquier otro valor se considera TRUE (verdadero).Cuando se convierte al tipo entero, stas son las reglas: Un booleano FALSE producir 0 (cero) y el booleano TRUE producir 1 (uno). Los valores de tipo flotante se redondearn a cero. Cuando se convierten datos al tipo flotante, PHP convierte primero los datos a entero y luego a flotante. Tambin puede convertir el tipo de cadena a tipos numricos, pero es un poco enredado vea el captulo 3 para conocer los detalles. Asimismo, PHP incluye funciones especiales que le permiten comprobar el formato interno de los datos is_int( ), is_float( ), is_array( ), etctera; por ejemplo, si pasa una variable alma- cenada por PHP como entero internamente en is_int( ), esa funcin producir un valor TRUE en el siguiente captulo ahondaremos en este tema. 55. CAPTULO 2Operadores y control de flujoE l captulo 1 fue una introduccin a PHP y este captulo profundiza ms en el tema. Todo lo que ver en este captulo es una habilidad esencial para el resto del libro.En este captulo se analizan operadores de PHP que usted emplear para manipulardatos; sta es parte esencial de los fundamentos de PHP que necesitar. Por ejemplo, la expre-sin $variable + 8, suma 8 al valor en $variable. La expresin $variable * 4, multiplica el valor de$variable por 4. Incluso si ha visto operadores en otros lenguajes, al menos revise este material,pues encontrar contenido exclusivo de PHP. Tambin ver todo sobre control del flujo en este captulo. ste le permite tomar decisionesen su cdigo. Va a tener un da de campo? Puede decidir basndose en la temperatura ambienteactual, segn cdigo PHP. Tiene suficiente inventario para surtir pedidos de sus clientes? Denuevo, es cuestin de control del flujo. En PHP, como otros lenguajes, la instruccin principal decontrol del flujo es la instruccin if, que permite tomar una decisin y ejecutar cierto cdigo, si esadecisin se orienta hacia un lado y cdigo alternativo si la decisin apunta hacia el otro. Adems de instrucciones como if, tambin analizaremos ciclos. Los ciclos son fundamen-tales para PHP, como para muchos lenguajes de programacin; permiten manipular grandesconjuntos de datos recorrindolos en ciclos, un elemento de datos a la vez. Las computadorasfueron creadas para realizar tareas repetitivas como stas, de modo que los ciclos tienen unlugar preponderante en PHP.Operadores matemticos de PHPComenzaremos con los operadores ms bsicos (los matemticos), que son stos: + Suma dos nmeros Resta un nmero de otro * Multiplica dos nmeros / Divide un nmero entre otro %Devuelve el residuo, cuando un nmero se divide entre otro (mdulo)41 56. 42PHP: Manual de referencia Estos operadores funcionan como sera de esperarse: para sumar dos valores se utiliza el operador +, de esta forma: a + b. Para restar b de a, es a b. Bueno, es momento de escribir algo de cdigo. ste es un ejemplo, phpmathoperators.php, que pone a trabajar los operado- res matemticos: Uso de los operadores matemticos Uso de los operadores matemticos Puede ver resultados en la Figura 2-1, donde los operadores matemticos ejecutan sus funciones. FIGURA 2-1 Operadores matemticos de PHP en accin 57. Captulo 2: Operadores y control de flujo 43Este ejemplo demuestra el uso de operadores matemticos con dos nmeros, 7 y 2, perodesde luego puede usar variables tambin:$resultado = $operando1 + $operando2;$resultado = $operando1 - $operando2;$resultado = $operando1 * $operando2;$resultado = $operando1 / $operando2;$resultado = $operando1 % $operando2; Adems de los operadores matemticos integrados, PHP tambin cuenta con varias funcio-nes matemticas y, mientras analizamos los operadores matemticos, bien vale la pena dar unvistazo a las funciones matemticas. stas son: abs Valor absoluto acos Arco coseno acosh Coseno hiperblico inverso asin Arco seno asinh Seno hiperblico inverso atan2 Arco tangente de dos variables atan Arco tangente atanh Tangente hiperblica inversa base_convert Convierte un nmero entre bases bindec Convierte de binario a decimal ceil Redondea fracciones hacia arriba cos Coseno decbin Convierte de decimal a binario dechex Convierte de decimal a hexadecimal decoct Convierte de decimal a octal deg2rad Convierte el nmero en grandes al equivalente en radianes exp Calcula el exponente de e expm1 Devuelve exp(nmero) 1 floor Redondea fracciones hacia abajo fmod Devuelve el residuo de punto flotante de la divisin de los argumentos getrandmax Muestra el mayor valor aleatorio posible hexdec Convierte de hexadecimal a decimal hypot Devuelve sqrt(num1*num1 + num2+num2) is_finite Determina si un valor es un nmero finito vlido is_infinite Determina si un valor es infinito is_nan Determina si un valor no es nmero 58. 44PHP: Manual de referencia lcg_value Generador de congruencia lineal combinado log10 Logaritmo de base 10 log1p Devuelve log(1 + nmero) log Devuelve el logaritmo naturalmax Encuentra el valor ms altomin Encuentra el valor ms bajomt_getrandmax Muestra el mayor valor aleatorio posiblemt_rand Genera un mejor valor aleatoriomt_srand Siembra el mejor generador de nmeros aleatoriosoctdec Convierte de octal a decimalpi Obtiene el valor de pipow Expresin exponencialrad2deg Convierte el nmero de radianes a un equivalente en gradosrand Genera un entero aleatorioround Redondea un nmero flotantesin Senosinh Seno hiperblicosqrt Raz cuadradasrand Siembra el generador de nmeros aleatoriostan Tangentetanh Tangente hiperblica ste es un ejemplo, phpmathfunctions.php, que pone a trabajar algunas de estas funciones. Por ejemplo, usted podra querer la tangente de 45 y utilizara la funcin tan para ello. La fun- cin tan espera que su operando est en radianes; de modo que primero debe convertir 45 a radianes, que puede hacer con la funcin deg2rad: Qu tal si calculamos ahora un exponente? Puede calcular 4 elevado a la potencia 3, es decir 43, utilizando la funcin pow: 59. Captulo 2: Operadores y control de flujo 45Puede redondear nmeros hacia abajo utilizando la funcin floor o bien, usando la funcinceil. En este ejemplo, redondeamos pi hacia abajo: Qu tal un poco de matemticas hexadecimales? La funcin dechex convierte valores deci-males a hexadecimales de esta forma: Y puede obtener el arco tangente de 1 con la funcin atan, convirtiendo la respuesta enradianes a grados en phpmathfunctions.php de esta forma: Uso de las funciones matemticas Uso de las funciones matemticasPuede ver phpmathfunctions.php en la Figura 2-2, funcionando segn lo planeado. 60. 46 PHP:Manual de referenciaFIGURA 2-2 Funciones matemticas de PHP en accin Trabajando con los operadores de asignacinEl operador de asignacin principal es =, que simplemente asigna un valor, como ste, almace-nando el valor 99 en $botellas_de_cerveza_en_la_pared:$botellas_de_cerveza_en_la_pared = 99;Esto es algo ms que debe saber acerca del operador de asignacin: puede hacer mltiplesasignaciones en la misma lnea, de esta forma:Esta lnea de cdigo asigna el valor 3 a cada una de las variables $a, $b, $c y $d. Es bastante til.Ahora d un vistazo a estas lneas de cdigo: 61. Captulo 2: Operadores y control de flujo 47La idea aqu es que asignamos un valor de 3 a la variable $a y luego sumamos 6 a ese valor,para terminar con 9 en $a. PHP proporciona un conjunto de operadores de asignacin de com-binacin; de modo que si desea contraer una lnea como $a = $a = 6, puede usar el operador deasignacin de combinacin +=. El operador =+ combina los operadores + e = de tal modo, queesta lnea:$a = $a + 6;funciona igual que esta otra:As, los operadores de asignacin de combinacin proporcionan una forma abreviada de realizardos operaciones, una de ellas como asignacin; $a = $a + 6 se convierte en $a += 6;. De manera similar, el operador de asignacin -= combina una resta con una asignacin;este cdigo deja 1 en $a: stos son los operadores de asignacin combinados de PHP. Algunos de los que aqu semuestran podran no serle familiares an, pero pronto los analizaremos en este captulo: += = *= /= .= %= &= |= ^= = 62. 48 PHP: Manual de referenciaste es otro ejemplo, que usa el operador de concatenacin de cadenas de PHP (.), de estaforma:Esto deja el texto Sin preocupaciones. en $a. Incremento y disminucin de valoresOtra cosa hecha con frecuencia en PHP, es incrementar (sumar 1) o disminuir (restar 1) valores.Por ejemplo, podra utilizar cdigo como ste para aumentar el valor en $a:De hecho, incluso podra usar el operador de asignacin abreviado += de esta forma:Pero PHP tiene un operador ms sencillo, especficamente para incrementar valores: ++,usado de esta forma:Despus de la ejecucin de este cdigo, $a queda con un valor de 2. De forma similar, el opera-dor disminuye valores. Esto es clave para entender los operadores ++ y --. Si utiliza ++ o -- despus de unavariable como en $a++, el valor de la variable se incrementa luego de ejecutarse el resto de lainstruccin. As que, por ejemplo, esta lnea de cdigo calcula y muestra la raz cuadrada de 4,mostrando un valor de 2 y, slo entonces, incrementa el valor de $a: 63. Captulo 2: Operadores y control de flujo 49Por otra parte, este cdigo, donde el operador ++ va primero, incrementa primero el valoren $a y luego muestra la raz cuadrada de 5: Es importante tener eso presente (si coloca ++ o -- enfrente de una variable, el valor de estase incrementa o disminuye antes de que se ejecute el resto de la instruccin; si coloca el opera-dor ++ o -- despus de la variable, el valor de esa variable se incrementa o disminuye despus deejecutarse el resto de la instruccin. sta es una pgina PHP de ejemplo, que muestra cmo funcionan los incrementos en PHP,phpincrement.php: Incremento y disminucin Incremento y disminucin Puede ver esta pgina, phpincrement.php, en la Figura 2.3. 64. 50PHP: Manual de referencia FIGURA 2-3 Incremento y disminucin con PHP Operadores de cadena de PHP Quizs haya escuchado que PHP logra la excelencia al trabajar con cadenas de texto y es verdad. As que tal vez se sorprenda al enterarse de que PHP slo tiene dos operadores para funcionar con cadenas: el operador de concatenacin, ., y el operador de asignacin de concatenacin combinado, .=. El verdadero poder de encadenamiento PHP est en sus funciones de cadena, que ver en el captulo 3. ste es un ejemplo del uso de operadores de cadena, phpstringoperators.php: Operadores de cadenaOperadores de cadena 65. Captulo 2:Operadores y control de flujo 51 FIGURA 2-4 Operadores de cadena en PHP Puede ver phpstringoperators.php en la Figura 2-4.Operadores orientados a bits PHP brinda tambin un conjunto de operadores orientados a trabajar con bits individuales de nmeros. En general, tiene poco sentido utilizar estos operadores a menos que sepa lo que hace con lujo de detalle. Si no sabe de los bits contenidos en bytes, no se preocupe por ello. Aunque normalmente se usan para enteros y similares, de hecho pueden usarse tambin con cadenas, en cuyo caso trabajar con el cdigo ASCII numrico de cada carcter. NOTA Estos operadores estn diseados para trabajar en los bits individuales contenidos en sus operandos; si busca los operadores booleanos que funcionan con valores TRUE/FALSE, esto lo veremos ms adelante en este captulo.Por ejemplo, el operador Or, |, trabaja con dos operandos como ste: $a | $b. En el resultado, los bits que se inicializan (es decir, igual a 1, no a 0) en $a o $b se inicializan en el resultado. As, por ejemplo, si $a es igual a 1 (que tiene el bit 0 inicializado) y $b = 2 (con el primer bit iniciali- zado), entonces $a | $b ser igual a 1 | 2; los bits 0 y 1 se inicializan en el resultado, de modo que es igual a 3.Puede observar los operadores orientados a bits en la Tabla 2-1. 66. 52 PHP: Manual de referencia Operador OperacinEjemplo Resultado $a & $bAnd$a & $b Se inicializan los bits en $a y $b. $a | $bOr $a | $b Se inicializan los bits en $a o en $b. $a ^ $bXor$a ^ $b Se inicializan los bits en $a o $b pero no en ambos. ~ $a Not~ $aLos bits en $a no se inicializan y viceversa. $a $b Desplazar a la derecha $a >> $bDesplaza los bits de $a $b pasos a la derecha (cada paso significa dividir entre dos).TABLA 2-1 Operadores orientados a bitsAqu podra observar tambin los operadores de desplazamiento, >. stos le permi-ten desplazar los bits contenidos en sus operandos a la izquierda (). Ustedindica el nmero que desea desplazar y el nmero de espacios que desea se desplacen los bitsde ese nmero. Por ejemplo, 8 > 2 desplaza los bits de valor 8 dos espacios a laderecha, lo mismo que dividir entre 4, de modo que 8 >> 2 = 2. Operador de ejecucinEl operador de ejecucin de PHP es formidable (le permite ejecutar comandos del sistema,como fecha o dir (de directorio) de Windows. Todo lo que debe hacer para ejecutar un comandodel sistema es encerrarlo entre comillas individuales inversas ( ` ). ste es un ejemplo. El cdigo ejecutar el comando de Windows dir c:Inetpubwwwrootch02 y mostrar los resultados (observe que la diagonal inversa es un carcter sensible, demodo que debe cerrarlo como ):Esto es lo que se obtiene al ejecutar este ejemplo, phpdir.php:%php phpdir.php El volumen de la unidad K es AsicomDBaseII Directorio de K:AsicomClientesMcGrawHillPHPTraducidosCaptulosCap 02Cdigoch0207/03/200809:39 p.m.

  • .07/03/200809:39 p.m.
    • ..03/03/200811:06 a.m.457 phpbreak.php 67. Captulo 2: Operadores y control de flujo5303/03/2008 11:06 a.m.375 phpcontinue.php07/03/2008 09:39 p.m. 79 phpdir.php03/03/2008 11:06 a.m.554 phpdoornot.php03/03/2008 11:06 a.m.434 phpdowhile.php03/03/2008 11:06 a.m.406 phpelse.php03/03/2008 11:06 a.m.642 phpelseif.php03/03/2008 11:06 a.m.358 phpequality.php03/03/2008 11:06 a.m.384 phpfor.php03/03/2008 11:06 a.m.323 phpforeach.php03/03/2008 11:06 a.m.359 phpif.php07/03/2008 06:17 p.m.549 phpincrement.php03/03/2008 11:06 a.m.344 phpisfloat.php03/03/2008 11:06 a.m.347 phplogical.php07/03/2008 01:40 p.m.555 phpmathfunctions.php06/03/2008 07:43 p.m.475 phpmathoperators.php03/03/2008 11:06 a.m. 30 phpprecedence.php03/03/2008 11:06 a.m.267 phpsettingprecedence.php07/03/2008 06:32 p.m.454 phpstringoperators.php03/03/2008 11:06 a.m.1,150 phpstrings.php03/03/2008 11:06 a.m.897 phpswitch.php03/03/2008 11:06 a.m.405 phpwhile.php 22 archivos 9,844 bytes2 dirs 28,034,473,984 bytes libresAqu hay otro ejemplo; ste ejecuta el comando date:ste es el tipo de resultado que podra ver con Unix, utilizando el shell bash:-bash-2.05$b php phpdate.phpFri April 06 11:24:45 PDT 2007Como date es tambin un comando de DOS, esto es lo que podra ver en una ventana DOS:C:php>php phpdate.phpLa fecha actual es: 07/03/2008Escriba la nueva fecha: (dd-mm-aa)Precedencia de operadores de PHPLa mayora de operadores adicionales de PHP que ver en este libro son para uso en instruccio-nes if y ciclos, es los que veremos a continuacin. Sin embargo, primero hay una cosa que deciracerca de los operadores y es la precedencia (el orden en que se ejecutan los operadores).Por ejemplo, observe esta expresin:4 + 3 * 9Qu pasar aqu? Se har la suma 4 + 3 y el resultado se multiplicar por 9 para producir63? O bien, el 3 se multiplicar por 9 para dar 27 y a ese nmero se sumar 4 para producir 31?Resulta que PHP procesa las multiplicaciones antes que las sumas; as que aqu obtendr 31,como se puede verificar con este script, phpprecedence.php: 68. 54PHP: Manual de referencia Cuando lo ejecute obtendr %php phpprecedence.php 31 Cmo puede averiguar la precedencia de diferentes operadores? Observe la Tabla 2-2, mostrando la precedencia de diversos operadores, de un valor alto en la cima de la tabla, a un valor bajo en la base de la misma. Desea establecer la precedencia usted mismo? Puede indicar a PHP qu operaciones eje- cutar primero, encerrndolas entre parntesis. ste es un ejemplo, phpsettingprecedence.php: Establecer precedencia de operadoresEstablecer precedencia de operadores TABLA 2-2 OperadorOperadores new [ ! ~ ++ - (int) (float) (string) (array) (object) @ */ % +-. > < >= == != === !== & ^ | && || ?: = += -= *= /= .= %= &= |= ^= = print and xor or , 69. Captulo 2: Operadores y control de flujo 55 FIGURA 2-5 Cmo establecer la precedencia en PHP Puede ver esta pgina en un navegador en la Figura 2-5. Como puede apreciar, el uso de parntesis determina la precedencia de la ejecucin de los operadores.Uso de la instruccin if ste es el punto donde usted comienza a tomar decisiones en su cdigo y a ejecutar otro, dependiendo de los resultados de esa decisin. sta es la instruccin if, la instruccin principal para tomar decisiones en PHP. As es como se ve formalmente: if(expresin) instruccin Aqu, una expresin de PHP se evala de acuerdo con un valor TRUE o FALSE. Al igual que otros lenguajes a los que haya tenido alcance, si la expresin es TRUE (verdadera), se ejecuta la instruccin siguiente; si es FALSE (falsa), la instruccin no se ejecuta. Se usan operadores con- dicionales y lgicos, que veremos a continuacin, para crear expresiones del tipo que pueden evaluar instrucciones if. Por ejemplo, puede utilizar el operador mayor que, >, para formar una expresin como 4 > 1, que es TRUE, ya que 4 es realmente mayor que 1.Tambin cabe observar que aunque la instruccin pueda ser una lnea de cdigo, tambin es posible utilizar una instruccin compuesta de PHP, integrada por mltiples instrucciones indivi- duales encerradas entre llaves { y }. sta es una instruccin individual: echo "sta es la respuesta."; 70. 56 PHP: Manual de referencia sta es una instruccin compuesta: { echo "sta"; echo " es"; echo " la"; echo " respuesta."; }La instruccin if es formidable porque le permite hacer elecciones al instante y ejecutar cdigo alternativo, dependiendo de los resultados de esa eleccin. Por ejemplo, podra verifi- car el valor de una contrasea para asegurarse de que es correcta o comprobar la respuesta del usuario a preguntas s/no (Desea papas fritas con su platillo?).Por ejemplo, podra mostrar texto si la temperatura exterior es superior a 18 grados cent- grados, lo que se podra hacer de esta forma: Aunque esta forma de hacer las cosas, con una sola instruccin despus de la instruccin if, funciona, es ms usual emplear los llaves con instrucciones compuestas como sta: Como sta es la forma en que generalmente ver que se hacen las cosas (incluso con ins- trucciones individuales), as ver la instruccin if en este libro (con las llaves). Desde luego, tam- bin puede usar instrucciones compuestas aqu: ste ejemplo, phpif.php, comprueba cuntos minutos ha estado alguien en la piscina (si son ms de 30, es tiempo de salir): Uso de la instruccin if 71. Captulo 2: Operadores y control de flujo 57 Uso de la instruccin ifSi es tiempo de salir de la piscina, puede mostrar un mensaje:Uso de la instruccin if Uso de la instruccin ifPuede ver phpif.php en accin en la Figura 2-6.FIGURA 2-6 Uso de la instruccin if en PHP 72. 58PHP: Manual de referencia ste es otro ejemplo, phpisfloat.php. Como se dijo en el captulo anterior, PHP incluye fun- ciones especiales que permiten determinar el formato de almacenaje interno seleccionado por PHP para las variables is_int, is_float, etctera. Este ejemplo comprueba si una variable est almacenada como nmero de punto flotante, luego le suma 4.5 y utiliza la funcin var_dump de PHP para descargar (es decir, mostrar) el valor de la variable en el navegador: Uso de la funcin is_float Uso de la funcin is_float Puede ver phpisfloat.php en accin en la Figura 2-7. Como aparece ah, la funcin vardump da aqu la respuesta float(15.2), indicando valor y tipo interno de la variable.Hablaremos ms de la instruccin if a continuacin. Por ejemplo, el operador mayor que (>), es tan slo uno de entre un conjunto de operadores de comparacin de PHP, que se anali- zarn a continuacin. FIGURA 2-7 Uso de la funcin is_float en PHP 73. Captulo 2:Operadores y control de flujo 59Operadores de comparacin de PHPYa ha visto uno de los operadores de comparacin de PHP, el operador mayor que:Existen muchos otros operadores de comparacin, como menor que o igual a ( Puede ver todos los operadores de comparacin de PHP en la Tabla 2-3. Por ejemplo, para saber cmo usar el operador de igualdad == en phpequality.php, quecomprueba si alguien ha estado en la piscina exactamente 30 minutos:Uso del operador ==Operador OperacinEjemploResultado== Igual$a == $b TRUE si $a es igual a $b===Idntico $a === $bTRUE si $a es igual a $b y son del mismo tipo!= No igual $a != $b TRUE si $a no es igual a $b No igual $a $b TRUE si $a no es igual a $b!==No idntico$a !== $bTRUE si $a no es igual a $b o no son del mismo tipoMayor que$a > $bTRUE si $a es estrictamente mayor que $b= $b TRUE si $a es mayor que o igual a $bTABLA 2-3 Operadores de comparacin 74. 60PHP: Manual de referencia Uso del operador == Puede ver phpequality.php en la Figura 2-8; asegrese de no confundir el operador de igualdad, ==, y el operador de asignacin, =. De forma similar, en este ejemplo se usa el operador no igual, !=, para probar si la tempera- tura no es igual a 20 grados: Inicio de sesin con Ajax y PHP sta es otra tarea para la que se usa Ajax a menudo y PHP tiene que ver tambin: comprobar inicios de sesin. Por ejemplo, puede verificar el inicio de sesin de un usuario discretamente o permitirle elegir su nombre de usuario y contrasea. Este ejemplo, log.html, concede al usua- rio la eleccin de su nombre y, si ya se encuentra ese nombre registrado, log.html informa al usuario de ese hecho. Puede ver cmo funciona esto en la Figura 13-10 la aplicacin com- prueba el nombre de usuario ingresado por la persona, mientras sta lo teclea y si ya no est disponible, como aqu, le informa del hecho.Este ejemplo lee claves conforme el usuario las escribe, llamando a una funcin JavaScript de nombre checker, comprobando el nuevo nombre de usuario: Elija un nombre de usuario Escriba un nombre de usuario: FIGURA 13-10 Comprobacin de un nombre de usuario 503. 496 PHP: Manual de referenciaLa funcin checker llama a getData con la URL log.php, enviando el nombre de usuario queste escribe en log.php, mediante el uso del nombre de parmetro qu: function checker() { var targetDiv = document.getElementById("targetDiv"); targetDiv.innerHTML = ""; if (document.getElementById("textField").value) { getData("log.php?qu=" + document.getElementById("textField").value); } }La funcin getData se conecta al servidor y descarga los resultados: function getData(dataSource) { if(XMLHttpRequestObject) { XMLHttpRequestObject.open("GET", dataSource); XMLHttpRequestObject.onreadystatechange = function() { if (XMLHttpRequestObject.readyState == 4 && XMLHttpRequestObject.status == 200) { . . . } } XMLHttpRequestObject.send(null); } }En este caso, el script PHP devolver OK si el nombre de usuario elegido es correcto ynotOK, si ya est en uso. Si el nombre de usuario ya fue tomado, este ejemplo mostrar elmensaje Lo sentimos, ese nombre de usuario no est disponible. en un elemento
      : function getData(dataSource) { if(XMLHttpRequestObject) { XMLHttpRequestObject.open("GET", dataSource); XMLHttpRequestObject.onreadystatechange = function() { if (XMLHttpRequestObject.readyState == 4 && XMLHttpRequestObject.status == 200) { if(XMLHttpRequestObject.responseText == "notOK"){ var targetDiv = document.getElementById("targetDiv"); targetDiv.innerHTML = "
      Lo sentimos, ese nombre de usuario no est disponible.
      "; 504. Captulo 13: Ajax avanzado 497}}}XMLHttpRequestObject.send(null);}} El script PHP, log.php, comprueba el nombre de usuario que se enva usando el parmetro qu y devuelve el texto notOK, en caso de que el nombre de usuario ya est en uso: De lo contrario, devuelve OK: Y eso es todo lo que necesita.Obtencin de datos con solicitudes de encabezados y Ajax Puede usar tambin Ajax para comprobar archivos en el servidor antes de trabajar con ellos. Este ejemplo, head.html, lee los encabezados HTTP devueltos por el servidor para el archivo head. html mismo, haciendo una lista de ellos, como ver en la Figura 13-11.Como se aprecia en la figura, cuando enva una solicitud de encabezado para un archivo, recibe de vuelta informacin como sta, indicando servidor, ltima fecha de modificacin del archivo y longitud: Server: Microsoft-IIS/5.1 Date: Mon 28, May 2007 17:57:54 GMT Content-Type: text/ html Accept-Ranges: bytes Last-Modified: Mon, 28 May 2007 17:57:49 GMT ETag: "3c058b451a1c71:a2f" Content-Length: 1266Vale la pena observar cmo se trabaja con solicitudes de encabezados en Ajax, y este ejem- plo, head.html, presenta su funcionamiento. El ejemplo comienza con el botn de la figura, ligado a la funcin getData: Obtencin de informacin de encabezados 505. 498 PHP: Manual de referenciaEn la funcin getData, usted especifica que desea informacin de encabezados especifi-cando abrir el documento con el mtodo HEAD (no GET ni POST):function getData(dataSource, divID){if(XMLHttpRequestObject) {var targetDiv = document.getElementById(divID);XMLHttpRequestObject.open("HEAD", dataSource);...} Y cuando se descarguen sus datos, puede recuperar los datos de los encabezados con elmtodo getAllResponseHeaders del objeto XMLHttpRequest:function getData(dataSource, divID){if(XMLHttpRequestObject) {var targetDiv = document.getElementById(divID);XMLHttpRequestObject.open("HEAD", dataSource);XMLHttpRequestObject.onreadystatechange = function(){if (XMLHttpRequestObject.readyState == 4 &&XMLHttpRequestObject.status == 200) {targetDiv.innerHTML =XMLHttpRequestObject.getAllResponseHeaders();}}XMLHttpRequestObject.send(null);}} Este cdigo da los resultados en la Figura 13-11. Genial. Puede utilizar el mtodo getAllResponseHeaders para leer todos los encabezados delservidor, pero tambin emplear el mtodo getResponseHeader para leer el valor de cualquierencabezado en particular. Este ejemplo, lastModified.html, comprueba su ltima fecha de modi-ficacin y la muestra, como se ve en la Figura 13-12 Esto se pone en accin llamando el mtodo getResponseHeader, del objeto 506. Captulo 13: Ajax avanzado 499FIGURA 13-11 Obtencin de informacin acerca de encabezadosXMLHttpRequest de esta forma: getResponseHeader(Last-Modified). ste es el uso delmtodo pasa el nombre del encabezado de su inters. As es como lastModified.html poneesto a trabajar:Obtencin de la ltima fecha de modificacin de un documentoObtencin de la ltima fecha de modificacin de un documento 508. 14CAPTULO Trazo de imgenes en el servidorT odo este captulo trata sobre el uso de PHP para crear grficos en el servidor. Puede trazar casi cualquier cosa y devolverla al navegador en diferentes formatos grficos (JPEG, PNG, etc.) mediante PHP. Para hacer que funcione, debe instalar el soporte GD2 para PHP. Ya que se hace de diferen-tes maneras, compruebe las instrucciones de instalacin de PHP para su sistema operativo. Porejemplo, podra tener que comprobar la casilla de seleccin CD2, cuando el programa de insta-lacin pregunte qu opciones desea instalar. Pero qu funciones grficas estn disponibles? sta es la lista:FuncinDescripcingd_infoRecupera informacin acerca de la biblioteca GDgetimagesize Devuelve el tamao de una imagenimage_type_to_extensionDevuelve la extensin del archivo de la imagenimage_type_to_mime_typeDevuelve el Tipo Mime de imagen que detecta getimagesize, exif_read_data, exif_thumbnail, exif_imagetypeimage2wbmp Enva la imagen al navegador o archivoimagealphablending Establece la combinacin de una imagenimageantialias Establece si se usarn funciones antialias o noimagearc Traza un arcoimagecharTraza un carcter horizontalmenteimagecharupTraza un carcter verticalmenteimagecolorallocate Asigna color a una imagenimagecolorallocatealphaAsigna color a una imagen y la configuracin alfaimagecolorat Devuelve el ndice del color de un pxelimagecolorclosestDevuelve el ndice del color ms prximo al color dadoimagecolorclosestalpha Devuelve el ndice del color ms prximo al color dado y configuracin alfa 501 509. 502 PHP:Manual de referenciaFuncin Descripcinimagecolorclosestthwb Devuelve el ndice del color que tiene el matiz, cantidad de blanco y negro msprximos al color dadoimagecolordeallocateDesestima un colorimagecolorexact Devuelve el ndice del color dadoimagecolorexactalphaDevuelve el ndice del color dado y la configuracin alfaimagecolormatch Hace que los colores de la versin de la paleta de una imagen se aproximen msa la versin de color verdaderoimagecolorresolve Devuelve el ndice del color dado o su alternativa ms prxima posibleimagecolorresolvealphaDevuelve el ndice del color dado y configuracin alfa o su alternativa msprxima posibleimagecolorset Establece el color del ndice de paleta dadoimagecolorsforindex Devuelve los colores de un ndiceimagecolorstotalDevuelve el nmero de colores de la paleta de una imagenimagecolortransparent Establece transparente un colorimageconvolutionAplica una matriz de circunvolucin de 3 x 3imagecopy Copia slo parte de una imagenimagecopymergeCopia y combina parte de una imagenimagecopymergegrayCopia y combina parte de una imagen con escala de grisesimagecopyresampledCopia y cambia el tamao de parte de una imagen, usando muestreo repetidoimagecopyresizedCopia y cambia el tamao de parte de una imagenimagecreate Crea una nueva imagenimagecreatefromgd Crea una nueva imagen a partir de un archivo GD o URLimagecreatefromgd2Crea una nueva imagen a partir de un archivo GD2 o URLimagecreatefromgd2partCrea una nueva imagen a partir de una parte dada de un archivo GD2 o URLimagecreatefromgifCrea una nueva imagen a partir de un archivo GIFimagecreatefromjpeg Crea una nueva imagen a partir de un archivo JPEGimagecreatefrompngCrea una nueva imagen a partir de un archivo PNGimagecreatefromstring Crea una nueva imagen a partir del flujo de imgenesimagecreatefromwbmp Crea una nueva imagen a partir de un archivo WBMPimagecreatefromxbmCrea una nueva imagen a partir de un archivo XBMimagecreatefromxpmCrea una nueva imagen a partir de un archivo XPMimagecreatetruecolorCrea una nueva imagen de color verdaderoimagedashedline Traza una lnea punteadaimagedestroyDestruye una imagenimageellipseTraza una elipse 510. Captulo 14: Trazo de imgenes en el servidor 503FuncinDescripcinimagefillRelleno por inundacin de colorimagefilledarc Traza una elipse parcial y la rellenaimagedfilledellipseTraza una elipse rellenaimagefilledpolygon Traza un polgono rellenoimagefilledrectangle Traza un rectngulo rellenoimagefilltoborderRelleno por inundacin con un color especficoimagefilterAplica un filtro a una imagenimagefontheightDevuelve la altura de la fuenteimagefontwidthhDevuelve el ancho de la fuenteimageftbboxProporciona el cuadro limtrofe de textoimagefttextEscribe texto en la imagenimagegammacorrectAplica una correccin gammaimagegdEnva una imagen GD al navegador o archivoimagegd2 Enva una imagen GD2 al navegador o archivoimagegif Enva una imagen al navegador o archivoimageinterlace Habilita o deshabilita operaciones de entrelazadoimageistruecolor Determina si una imagen es de color verdaderoimagejpegEnva una imagen al navegador o archivoimagelayereffect Establece la bandera de combinacin alfa para utilizar efectos por capasimagelineTraza una lneaimageloadfontCarga una nueva fuenteimagepalettecopy Copia la paleta de una imagenimagepng Enva una imagen PNG al navegador o un archivoimagepolygon Traza un polgonoimagepsbboxEspecifica el cuadro de texto limtrofe usando fuentes PostScript Type1imagepsencodefontCambia la codificacin de caracteres de una fuenteimagepsextendfontExtiende o condensa una fuenteimagepsfreefontLibera la memoria usada actualmente por una fuente PostScript Type1imagepsloadfontInclina una fuenteimagepstextTraza texto mediante fuentes PostScript Type1imagerectangle Traza un rectnguloimagerotateGira una imagen a un ngulo dado 511. 504 PHP:Manual de referenciaFuncin DescripcinimagesavealphaEstablece la bandera para guardar informacin completa del canal alfa cuando seguardan imgenes PNGimagesetbrush Establece la imagen del pincel para el trazo de lneasimagesetpixel Establece un pxelimagesetstyle Establece el estilo para el trazo de lneasimagesetthickness Establece el grosor para el trazo de lneasimagesettileEstablece la imagen en mosaico para rellenoimagestring Traza una cadena horizontalmenteimagestringup Traza una cadena verticalmenteimagesx Devuelve el ancho de la imagenimagesy Devuelve el alto de la imagenimagetruecolortopalette Convierte una imagen de color verdadero en una de paleta de coloresimagettfbboxProporciona el cuadro limtrofe de un texto usando fuentes TrueTypeimagettftextEscribe texto en la imagen usando fuentes TrueTypeimagetypesDevuelve los tipos de imgenes admitidosimagewbmp Enva una imagen al navegador o archivoimagexbmEnva una imagen XBM al navegador o archivoiptcembed Incorpora datos IPTC binarios en una imagen JPEGiptcparse Analiza la estructura de un bloque IPTC binariojpeg2wbmp Convierte un archivo de imagen JPEG en WBMPpng2wbmpConvierte un archivo de imagen PNG en WBMPBueno, comencemos con la creacin de una imagen simple.Creacin de una imagenPara crear una imagen con la cual trabajar en la memoria, se comienza con la funcin image-create de GD2:imagecreate(x_size, y_size)Los parmetros x_size y y_size estn en pxeles.As se crea una primera imagen:$image_height = 100;$image_width = 300;$image = imagecreate($image_width, $image_height);... 512. Captulo 14: Trazo de imgenes en el servidor505 Despus, para establecer los colores a usarse en la imagen, se usa la funcin imagecolora-llocate:imagecolorallocate (image, red, green, blue) Debe pasar a esta funcin la imagen con que est trabajando, adems de los componentesrojo, verde y azul (red, green, blue) como valores de 0 a 255. Por ejemplo, si desea rojo slido,pasara a imagecolorallocate un valor rojo de 255, mientras verde y azul seran de 0. La primera vez que usted llama a imagecolorallocate, esta funcin establece el color defondo; las llamadas subsecuentes establecen diferentes colores para dibujar. As se establece elcolor de fondo en gris claro (rojo = 200, verde = 200, azul = 200):$image = imagecreate($image_width, $image_height);$back_color = imagecolorallocate($image, 200, 200, 200);...Para devolver una imagen JPEG al navegador, debe indicarle que est haciendo eso con lafuncin header, para establecer el tipo de imagen y luego enviarla con la funcin imagejpeg:$image_height = 100;$image_width = 300;$image = imagecreate($image_width, $image_height);$back_color = imagecolorallocate($image, 200, 200, 200);header(Content-Type: image/jpeg);imagejpeg($image);...stas son algunas funciones para crear imgenes para diversos formatos que puede usar: imagegif Enva una imagen GIF al navegador o un archivo imagejpeg Enva una imagen JPEG al navegador o un archivo imagewbmp Enva una imagen WBMP al navegador o un archivo imagepng Enva una imagen PNG al navegador o un archivo Despus de enviar la imagen, puede destruir el objeto de imagen con la funcin imagedes-troy; todo esto se muestra en phpimage.php:Puede ver los resultados en la Figura 14-1. Todo lo que aparece es un rectngulo en el fondode este ejemplo. Sin embargo, hemos logrado progresar (es una imagen real la que ve en lafigura).Por otra parte, es una pgina Web rara que muestra simplemente una imagen. En general,dicha imagen aparece en una pgina HTML.Presentacin de imgenes en pginas HTMLLa imagen creada en phpimage.php es JPEG estndar; as que no hay razn por la que nopueda incorporarla en una pgina Web. Cmo hara eso? Con un elemento estndar,desde luego. Por ejemplo, si tuviera una imagen JPEG en el servidor, image.jpg, podra mostrarlade esta forma en una pgina Web: De la misma forma, puede dar el nombre del script que genera una imagen JPEG, phpi-mage.php, como el atributo src de esta manera: 514. Captulo 14: Trazo de imgenes en el servidor507 FIGURA 14-2 Cmo mostrar la imagen de un rectngulo en una pgina WebAs se ve una pgina Web, phpimage.html, mostrando el rectngulo en blanco creado por phpimage.php: Incorporacin de imgenes creadas en pginas HTML Incorporacin de imgenes creadas en pginas HTML sta es una imagen en blanco que se crea en el servidor:
      Puede ver los resultados en la Figura 14-2, donde aparece la imagen JPEG creada por php- image.php, incorporada en una pgina HTML. No est mal. Bueno, eso crea una imagen bsica y la muestra. Qu tal si trazamos algunos grficos reales?Trazo de lneas Puede trazar lneas con la funcin imageline: imageline(image, x1, y1, x2, y2, color) 515. 508 PHP: Manual de referenciaEsta funcin traza una lnea de (x1, y1) a (x2, y2) (el extremo superior izquierdo de laimagen es (0, 0) y todas las medidas estn en pxeles) en la imagen image, usando el color detrazo color.Es momento de trazar lneas en un nuevo script, phpline.php. Este ejemplo comienza con lacreacin del mismo fondo en la imagen ya vista:Ahora estableceremos el color de trazo para las lneas. En este caso usaremos negro, cuyosvalores son rojo, verde y azul en 0:Luego trace lneas con imageline: Y enve la imagen al navegador, para luego destruirla de esta forma: As luce la pgina Web, phpline.html, mostrando las lneas creadas por phpline.php: Trazo de lneasTrazo de lneasEstas lneas se trazaron en el servidor:
      Puede ver los resultados en la Figura 14-3, las lneas creadas por phpline.php aparecen enuna pgina HTML. Genial.Puede ajustar los parmetros de lneas como stas; por ejemplo, trazar lneas ms gruesas yeso veremos a continuacin. 517. 510PHP: Manual de referenciaFIGURA 14-3 Cmo mostrar lneas en una pgina WebCmo establecer el grosor de la lneaPuede establecer el grosor del trazo cuando crea una imagen, mediante la funcin imagesetthi-ckness:imagesetthickness(image, thickness)Cuando llama a esta funcin y le pasa una imagen, establece ancho del trazo de esa imagen,en pxeles. Por ejemplo, puede definir el grosor de lneas en phpline.php a 6 pxeles (en lugar delvalor predeterminado de 1 pxel), de esta forma en phpthickline.php: 518. Captulo 14: Trazo de imgenes en el servidor 511 FIGURA 14-4 Cmo mostrar lneas gruesas en una pgina WebAs vera la pgina Web phpthickline.html, mostrando las lneas ms gruesas creadas en phpthickline.php: Trazo de lneas gruesas Trazo de lneas gruesas Estas lneas gruesas se trazaron en el servidor:
      Y puede ver los resultados en la Figura 14-4, las lneas gruesas aparecen en una pgina HTML.Trazo de rectngulos Puede dibujar muchas figuras usando slo lneas, pero hay ms funciones de GD a considerar. Una de ellas, imagerectangle, traza rectngulos: imagerectangle(image, x1, y1, x2, y2, color) 519. 512PHP: Manual de referenciaEsta funcin crea un rectngulo de color color en la imagen image, a partir de la coordenadasuperior izquierda x1, y1, que termina en la coordenada inferior derecha x2, y2.Este ejemplo, phprectangle.php, traza varios rectngulos:Y as podra incorporar esos rectngulos en una pgina Web, phprectangle.html: Trazo de rectngulos Trazo de rectngulos Estos rectngulos se trazaron en el servidor:
      En los resultados de la Figura 14-5, aparecen los rectngulos: 520. Captulo 14: Trazo de imgenes en el servidor513 FIGURA 14-5 Cmo mostrar rectngulos en una pgina WebTrazo de elipses Desea trazar circunferencias o elipses? Use la funcin imageellipse: imageellipse(image, cx, cy, w, h, color)As trabaja. Esta funcin traza una elipse con centro en cx, cy en la imagen representada por image. Los valores w y h especifican ancho y alto de la elipse, respectivamente. El color de la elipse lo define color. Esta funcin es bastante similar a imagerectangle, pero en lugar de espe- cificar las esquinas superior izquierda e inferior derecha, se define el centro de la elipse, adems de su ancho y alto.Este ejemplo, phpellipse.php, traza elipses: Y as se incorporan estas elipses en una pgina Web, phpellipse.html: Trazo de elipsesTrazo de elipsesEstas elipses se trazaron en el servidor:
      En los resultados de la Figura 14-6, aparecen las elipses.Trazo de arcosQu tal si trazamos arcos? La funcin imagearc traza arcos, que incluyen circunferencias y elip-ses parciales, adems de circunferencias y elipses completas:imagearc(image, cx, cy, w, h, s, e, color) 522. Captulo 14: Trazo de imgenes en el servidor515Esta funcin sirve para trazar arcos con centro en cx, cy en la imagen representada porimage. Los valores w y h especifican ancho y alto de la elipse, respectivamente; mientras lospuntos inicial y final se especifican en grados, indicados por los argumentos s y e (aqu, 0 selocaliza en la posicin de las 3 en punto). El arco mismo se traza en el sentido del reloj.As se puede trazar una cara sonriente usando arcos: imagearc($image, 150, 50, 50, 50, 30, 150, $drawing_color); imagearc($image, 150, 50, 70, 70, 0, 360, $drawing_color); imagearc($image, 135, 45, 20, 20, 190, -10, $drawing_color); imagearc($image, 165, 45, 20, 20, 190, -10, $drawing_color); imagearc($image, 135, 42, 10, 10, -10, 190, $drawing_color); imagearc($image, 165, 42, 10, 10, -10, 190, $drawing_color); As como se ve en phparc.php: 523. 516 PHP:Manual de referenciaFIGURA 14-7 Cmo mostrar arcos en una pgina WebEn la pgina HTML phparc.html se muestran estos arcos: Trazo de arcosTrazo de arcosEstos arcos se trazaron en el servidor:
      La cara sonriente aparece en la Figura 14-7. Muy bonito.Trazo de polgonosSi desea trazar sus propias figuras, puede entrelazarlas con lneas mltiples, pero hay una formams fcil; use la funcin imagepolygon para trazar un polgono con slo pasarle una matriz depuntos. As se utiliza esta funcin en general:imagepolygon(image, points, num_points, color) 524. Captulo 14: Trazo de imgenes en el servidor517 Esta funcin crea un polgono en una imagen. El parmetro points es una matriz conte-niendo los vrtices del polgono (points[0] = x0, points[1] = y0, points[2] = x1, points[3] = y1,etc.). El parmetro num_points aloja el nmero total de puntos en el polgono y color es el colorpara dibujar que desea usar. sta es una buena funcin para trazar figuras complejas (todo lo que debe hacer es propor-cionar los vrtices del polgono en una matriz, como una matriz llamada $points):$points = array(0 => 120, 1=> 60,2 => 130, 3=> 60,4 => 150, 5=> 80,6 => 170, 7=> 40,8 => 150, 9=> 40,10 => 110,11 => 20,12 => 110,13 => 90); As se ve esa matriz en phppolygon.php, usando imagepolygon: As se ve la pgina HTML phppolygon.html, mostrando este polgono: 525. 518 PHP:Manual de referenciaFIGURA 14-8 Cmo mostrar un polgono en una pgina WebTrazo de polgonosTrazo de polgonosEste polgono se traz en el servidor:
      El polgono trazado en este ejemplo se aprecia en la Figura 14-8.Relleno de figurasAdems de simplemente dibujar el contorno de figuras, tambin puede rellenarlas con colorusando diversas funciones que trazan figuras rellenas, como stas: imagefilledarc Traza una elipse parcial y la rellena imagefilledellipse Traza una elipse rellena imagefilledpolygon Traza un polgono relleno imagefilledrectangle Traza un rectngulo rellenoPor ejemplo, d un vistazo a imagefilledrectangle:imagefilledrectangle(image, x1, y1, x2, y2, color) 526. Captulo 14: Trazo de imgenes en el servidor 519Esta funcin crea un rectngulo relleno del color color, en la imagen image, a partir de lacoordenada superior izquierda x1, y1 y terminando en la coordenada inferior derecha x2, y2.Este ejemplo pone a trabajar imagefilledrectangle, que modifica nuestro ejemplo anteriorphprectangle.php en phpfilledrectangle.php. La diferencia radica en que esta versin rellena surectngulo con color (rojo en este caso). As se ve el cdigo: sta es la pgina HTML, phpfilledrectangle.html, mostrando dichos rectngulos rellenos: Trazo de rectngulos rellenosTrazo de rectngulos rellenosEstos rectngulos rellenos se trazaron en el servidor:
      Los rectngulos rellenos trazados para este ejemplo aparecen en la Figura 14-9. Aqu estnen blanco y negro, pero en la pantalla son rojos. Formidable. 527. 520 PHP: Manual de referenciaFIGURA 14-9 Cmo mostrar rectngulos rellenos en una pgina WebTrazo de pxeles individualesDesea mayor poder grfico? Puede establecer pxeles individuales usando imagesetpixel:imagesetpixel(image, x, y, color) Como sera de esperar, esta funcin traza un pxel en x, y en la imagen image, de color color. Este ejemplo, phppixel.php, traza una lnea punteada usando imagesetpixel. Para delinearla,el ejemplo simplemente usa un ciclo for:for($loop_index = 50; $loop_index < 270; $loop_index += 3){ imagesetpixel($image, $loop_index, $loop_index / 3, $drawing_color);} As se ve este ciclo for en phppixel.php: Y sta es la pgina HTML, phppixel.html, mostrando estos pxeles: Trazo de pxelesTrazo de pxelesEstos pxeles se trazaron en el servidor:
      Los pxeles que traza este ejemplo se muestran en la Figura 14-10.FIGURA 14-10 Cmo mostrar pxeles en una pgina Web 529. 522PHP: Manual de referenciaTrazo de textoQu tal si ahora trazamos texto? Existen varias funciones para trazar texto, como imagestring:imagestring(image, font, x, y, s, color)Esta funcin traza la cadena s especificada por la imagen image, con la esquina superiorizquierda en las coordenadas x, y en el color color. El paquete grfico incluye fuentes integradas(si font es 1, 2, 3, 4 o 5, se usa una fuente integrada). Tambin puede registrar sus propias fuentescon el paquete GD2, mediante la funcin imageloadfont. Observe que como trabajamos congrficos, el texto se traza como imagen, no como texto editable, mismo que aparecera en uncampo de texto.Suponga que quiere mostrar un texto centrado en una imagen, en el ejemplo phptext.php.Usara el nmero de fuente 4, mostrando el texto Sin problemas.: Cmo ajustar el tamao de la imagen para centrar este texto? Puede hacer la imagen dosveces ms ancha que el texto, con la funcin imagefontwidth, para determinar el ancho de cadacarcter de su fuente y multiplicando por 2 * strlen($text), para obtener el ancho que debe tenerla imagen:Asimismo, hacer la imagen tres veces ms alta que el texto con la funcin imagefon-theight): Despus, crear la imagen, as como colores de fondo y trazo:Luego, determinar las posiciones x y y en que iniciar el texto de modo que aparezca cen-trado en la imagen:Tras ello, trazar el texto, de la siguiente forma en phptext.php:Y sta es la pgina HTML, phptext.html, mostrando el texto nuevo: Trazo de textoTrazo de textoEste texto se traz en el servidor: 532. Captulo 14: Trazo de imgenes en el servidor 525 FIGURA 14-11 Cmo mostrar texto centrado en una pgina Web
      El texto centrado, que se traz en este ejemplo, aparece en la Figura 14-11.Trazo de texto vertical Puede trazar texto con imagestring horizontalmente, de cualquier forma). Qu le parece si tra- zamos texto verticalmente, como cuando desea rotular el eje y de una grfica? Puede usar la funcin imagestringup: imagestringup(image, font, x, y, s, color) Esta funcin traza la cadena s verticalmente en la imagen especificada por image, en las coordenadas x, y en el color color. Si font es 1, 2, 3, 4 o 5, se usa una fuente integrada. Tambin puede registrar sus propias fuentes con el paquete GD2 mediante la funcin imageloadfont. Este ejemplo, phpverticaltext.php, traza texto vertical. Comienza seleccionando un nmero de fuente y determinando el texto que se mostrar: 533. 526PHP: Manual de referenciaLuego debe determinar las dimensiones de la imagen en que mostrar el texto. Por ejemplo,hacer que el ancho de la imagen sea tres veces mayor que el alto de la fuente seleccionada y queel alto de la imagen sea dos veces mayor respecto al ancho del texto a mostrar, adems de selec-cionar un color de dibujo rojo: Eso crea la imagen y elige el color de dibujo. Puede crear la imagen con un poco de aritm-tica y trazar el texto usando la funcin imagestringup de esta forma: 534. Captulo 14: Trazo de imgenes en el servidor 527 Y enviar la nueva imagen al navegador como en phpverticaltext.php:Eso completa phpverticaltext.php; sta es la pgina HTML, phpverticaltext.html, presen-tando texto: Trazo de texto verticalTrazo de texto verticalEste texto se traz en el servidor:
      El texto vertical trazado en este ejemplo aparece en la Figura 14-12. Genial. 535. 528 PHP:Manual de referenciaFIGURA 14-12 Cmo mostrar texto vertical en una pgina WebTrabajo con archivos de imgenesPuede crear objetos grficos de imgenes a partir de archivos de imgenes usando estas funciones: imagecreatefromgif Crea una nueva imagen a partir de un archivo GIF o una URL imagecreatefromjpeg Crea una nueva imagen a partir de un archivo JPEG o una URL imagecreatefrompng Crea una nueva imagen a partir de un archivo PNG o una URL imagecreatefromwbmp Crea una nueva imagen a partir de un archivo WBMP o una URL imagecreatefromxbm Crea una nueva imagen a partir de un archivo XBM o una URL imagecreatefromxpm Crea una nueva imagen a partir de un archivo XPM o una URLEs sensacional cuando desea incorporar imgenes en pginas Web, pero tambin deseaagregarles algo de su cosecha, como un aviso de derechos de autor. Puede agregar una imagende su creacin, o un logotipo, dentro de otra imagen. Como ejemplo, usaremos la funcin ima-gecreatefromjpeg, cargando una imagen JPEG existente, image.jpg, a la que se aadir una carasonriente y un borde de imagen. As se usa esta funcin:imagecreatefromjpeg (string filename)sta devuelve un identificador de imagen representando la obtenida del nombre de archivodado, que devuelve una cadena vaca si falla.Vamos a modificar la imagen JPEG en la Figura 14-3, image.jpg, agregando la cara sonrienteque cre antes en el captulo, adems de un borde alrededor de la imagen completa. 536. Captulo 14: Trazo de imgenes en el servidor529FIGURA 14-13 Imagen JPEG que se modificar El archivo PHP, phpjpg.php, comienza como sera de esperar, creando una imagen en lamemoria a partir del archivo image.jpg:Eso carga la imagen, image.jpg, en el objeto $image (en la prctica, no olvide agregar cdigode manejo de errores, en caso de que PHP no encuentre su archivo de imagen). Puede trazar unborde dentro de esta imagen (pero sera de ayuda si conociera sus dimensiones).Puede hallarlas con las funciones imagesx e imagesy, que devuelven el tamao x y y de unaimagen. Y usar la funcin imagerectangle para crear el borde; as se traza ese borde, 10 pxelesdentro de la imagen: Y se agrega la cara sonriente a la imagen, tambin de esta forma en phpjpg.php:sta es la pgina HTML, phpjpg.html, mostrando la imagen modificada: Uso de imgenesUso de imgenesEsta imagen se modific en el servidor:
      Y el resultado se ve en la Figura 14-14, se modific la imagen JPEG original, como ustedquera. 538. Captulo 14: Trazo de imgenes en el servidor531 FIGURA 14-14 Cmo mostrar una imagen modificada en una pgina WebColocacin de imgenes en mosaico Tambin puede usar una imagen para colocarla en mosaico en otra imagen, apareciendo repeti- damente en el fondo, con la funcin imagesettile. As se usa esta funcin: imagesettile(image, tile)As se establece la imagen de mosaico que usarn todas las funciones para relleno de regiones (como imagefilledrectangle e imagefilledpolygon) cuando rellena con el color especial IMG_COLOR_TILED.Qu tal un ejemplo? Este script, phptile.php, comienza creando una imagen a colocarse en mosaico. Usaremos imagecreatetruecolor para dar a la imagen creada toda la gama de colo- res posibles, en vez de imagecreate, que podra restringir inadvertidamente el nmero de colores disponibles en los mosaicos (cuando tenga dudas respecto a la restriccin de colores, debe usar imagecreatetruecolor en lugar de la funcin ms simple imagecreate): 539. 532PHP: Manual de referenciaAhora crearemos el mosaico, $tile, dentro de la imagen almacenada en $image. En estecaso, colocaremos en mosaico la imagen de la cara sonriente, leyendo primero image.jpg conimagecreatefromjpeg:Puede agregar la cara sonriente a este mosaico con imagearc:Eso completa la creacin de la imagen en mosaico, luego se establecera $tile como mosaicopara $image con imagesettile: Ahora puede trazar un rectngulo relleno, que usar este mosaico si establece el estilo derelleno a IMG_COLOR_TILED: Todo lo que resta por hacer es mostrar la imagen y luego destruirla en phptile.php:Y sta es la pgina HTML, phptile.html, que muestra la imagen en mosaico: Colocacin de imgenes en mosaicoColocacin de imgenes en mosaicoEsta imagen se coloc en mosaico en el servidor:
      Y puede ver el resultado en la Figura 14-15, donde aparece la imagen en mosaico.FIGURA 14-15 Cmo mostrar una imagen en mosaico en una pgina Web 542. Captulo 14: Trazo de imgenes en el servidor 535Copia de imgenesDisponemos de ms poder para manipular grficos; por ejemplo, la funcin imagecopy le per-mite copiar toda, o parte de, una imagen:imagecopy (dest_image, src_image, dest_x, dest_y, src_x, src_y, src_w, src_h)Esta funcin copia una parte de src_image en dest_image comenzando en las coordenadas x,y src_x, src_y con un ancho de src_w y un alto de src_h. La porcin definida se copiar en lascoordenadas x, y, dest_x y dest_y. Copiar imgenes le permite realizar toda clase de trucos (por ejemplo, ste es un script,phpflip.php, que voltea una imagen horizontalmente). Comienza leyendo image.jpg, agre-gndole una cara sonriente y luego creando una imagen en blanco, $image_new, del mismotamao:Es aqu donde puede voltear la imagen, lo cual hace el cdigo encimando la imagen originaly voltendola, pxel por pxel, en la imagen volteada: for ($col = 0 ; $col < $image_width ; $col++) { for ($row = 0 ; $row < $image_height ; $row++) { imagecopy($image_new, $image_original, $image_width - $col - 1, $row, $col, $row, 1, 1); } } 543. 536 PHP:Manual de referenciasta es la pgina HTML, phpflip.html, que muestra la imagen volteada: Voltear imgenesVoltear imgenesEsta imagen se volte en el servidor: