Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Manual de Programacion PHP
Manual de Programacion PHP
com
Programacin en PHP
Principios bsicos para la programacin en PHP, el popular lenguaje del lado del servidor. Manual asequible para no programadores que sienta los fundamentos bsicos de este lenguaje. Continuacin lgica del manual de pginas dinmicas.
http://www.helloworldsolutions.com/ (! captulo
Daniel Lpez
http://pichongol.blogspot.com (! captulo
Jorge Ramos
(! captulo
Manu Gutierrez
http://www.tu"uncion.com (! captulo
Parte 1:
Qu es PHP
(aptulos introductorios donde hablaremos sobre los lengua)es de desarrollo del lado del ser*idor en general para e+plicar ,-, en particular % .ue se entienda cu/l es su modo de "uncionamiento % los tipos de cosas .ue se pueden hacer con este lengua)e.
PHP, aunque multi lata(orma, #a sido concebido inicialmente ara entornos 5N"6 % es en este sistema o erativo donde se ueden a rovec#ar mejor sus restaciones. /0P, siendo una tecnolog&a *icroso(t, esta orientado #acia sistemas 7indows, es ecialmente N). +as tareas (undamentales que uede reali!ar directamente el lenguaje son de(inidas en PHP como (unciones mientras que /0P invoca ms (recuentemente los objetos. Por su uesto, esto no es ms que una sim le cuestin de (orma %a que ambos lenguajes so ortan igualmente ambos rocedimientos. /0P reali!a numerosas tareas sirvi,ndose de com onentes 8objetos9 que deben ser com rados a determinadas em resas es eciali!adas 8o rogramados or nosotros mismos en otros lenguajes9. PHP resenta una (iloso(&a
2
Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com totalmente di(erente %, con un es &ritu ms generoso, es rogresivamente construido or colaboradores desinteresados que im lementan nuevas (unciones en nuevas versiones del lenguaje. $ste manual va destinado a aquellos que quieren comen!ar de cero el a rendi!aje de este lenguaje % que buscan en ,l la a licacin directa a su ro%ecto de sitio o a la mejora de su sitio H)*+. +os ca &tulos son extremadamente sim les, sino sim listas, buscando ser accesibles a la ma%or&a. $llos ueden ser com lementados osteriormente con otros artculos de mayor nivel destinados a gente ms ex erimentada. +a (orma en la que #emos redactado este manual lo #ace accesible a cualquier ersona no (amiliari!ada con la rogramacin. 0in embargo, es osible que en determinados momentos alguien que no #a%a rogramado nunca ueda verse un oco desorientado. Nuestro consejo es el de no querer entender todo antes de asar al siguiente ca &tulo sino intentar asimilar algunos conce tos % volver atrs en cuanto una duda surja o #a%amos olvidado alg:n detalle. Nunca viene mal leer varias veces lo mismo #asta que quede bien grabado % asimilado. /ntes de comen!ar a leer este manual es altamente aconsejable, sino im rescindible, #aber le&do reviamente el manual sobre manual sobre pginas dinmicas en el cual se ex lica a grandes rasgos qu, es el PHP, algunos conce tos :tiles sobre el modo de trabajar con ginas dinmicas al mismo tiem o que nos introduce algunos elementos bsicos de la rogramacin como ueden ser las variables % las (unciones. ;tra re(erencia a la cual #aremos alusin es el tutorial de SQL que nos ser de gran a%uda ara el tratamiento de bases de datos % a *%0<+, del que odremos a render muc#as cosas en el Taller de MySQL. Para todos los lectores, ero aun ms ara las ersonas ms inex ertas % con ms di(icultades de a rendi!aje, tenemos adems una recomendacin que uede a%udarles muc#o. 0e trata del Videotutorial de P P que estamos ublicando con diversos v&deos que ex lican con gran detalle la rogramacin en PHP. $s eramos que este manual resulte de vuestro agrado % que corres onda a nuestras ex ectativas1 $l oder acercar PHP a todos aquellos amantes del desarrollo de webs que quieren dar el aso #acia las webs = ro(esionales=. +os scri ts que usamos en estos rimeros ejem los ueden ser descargados a!u.
Artculo por
Rubn Alvarez
.r(ica del n:mero de dominios % direcciones "P que utili!an PHP. $stad&stica de Netcra(t. $n el :ltimo a'o, el n:mero de servidores que utili!an PHP se #a dis arado, logrando situarse cerca de los 3 millones de sitios % EFF.FFF direcciones "P, lo que le #a convertido a PHP en una tecnolog&a o ular. $sto es debido, entre otras ra!ones, a que PHP es el com lemento ideal ara que el tndem +inuxD/ ac#e sea com atible con la rogramacin del lado del servidor de sitios web. .racias a la ace tacin que #a logrado, % los grandes es(uer!os reali!ados or una creciente comunidad de colaboradores ara im lementarlo de la manera ms tima, odemos asegurar que el lenguaje se convertir en un estndar que com artir los ,xitos augurados al conjunto de sistemas desarrollados en cdigo abierto.
Artculo por
+a verdad es que uede resultar mu% tedioso uni(ormar en tama'o % (ormato miles de imgenes recibidas d&a tras d&a. )odo esto uede ser tambi,n automati!ado e(ica!mente mediante PHP. )ambi,n uede arecer :til el crear botones dinmicos, es decir, botones en los que utili!amos el mismo dise'o % solo cambiamos el texto. Podremos or ejem lo crear un botn #aciendo una :nica llamada a una (uncin en la que introducimos el estilo del botn % el texto a introducir obteniendo automticamente el botn deseado. / artir de la librer&a de (unciones gra(icas odemos #acer esto % muc#o ms. *uc#as otras (unciones ensadas para "nternet 8tratamiento de cooKies, accesos restringidos, comercio electrnico...9 o ara prop#sito general 8(unciones matemticas, ex lotacin de cadenas, de (ec#as, correccin ortogr(ica, com resin de arc#ivos...9 son reali!adas or este lenguaje. / esta inmensa librer&a cabe a#ora a'adir todas las (unciones ersonales que uno va creando or necesidades ro ias % que luego son reutili!adas en otros sitios % todas aquellas intercambiadas u obtenidas en (oros o sitios es eciali!ados. -omo uede verse, las osibilidades que se nos resentan son sor rendentemente vastas. +o :nico que se necesita es un oco de ganas de a render % algo de aciencia en nuestros rimeros asos. $l resultado uede ser mu% satis(actorio.
Artculo por
Rubn Alvarez
Parte 2:
Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com /s& ues, antes comen!ar a crear nuestros rogramas en PHP, es necesario1 D -onvertir nuestro ordenador en un servidor. $sto se #ace instalando uno de los varios servidores dis onibles ara el sistema o erativo de nuestra mquina. D "ntroducir en nuestro servidor los arc#ivos que le ermitirn la com rensin del PHP. $stos arc#ivos ueden ser descargados, en su versin ms actual, de la pgina o$icial de P P. Para conocer la (orma de instalar PHP sobre cada servidor de cada sistema o erativo odemos dirigirnos al a artado de documentaci#n de la pgina o$icial de P P donde dis onemos de un manual en H)*+ de r ida consulta % un enorme manual en P?@ de casi 1FFF ginas traducido al castellano donde ex lican minuciosamente % entre otras cosas, los asos a seguir ara cada caso articular. ?e todos modos, nosotros vamos a o(recer algunas a%udas ara con(igurar PHP en los sistemas ms #abituales. +a eleccin de vuestro rograma servidor tendr muc#o que ver con el sistema o erativo que tengis corriendo en vuestro ordenador. $stas ser&an algunas osibilidades de sistemas o ertativos % soluciones que (uncionan bien.
$.1.'. ,indo-s 5(6 ,indo-s $777 3 4" en sus versiones "ro8esional 3 9erver
Para estos sistemas tenemos dos osibilidades mu% interesantes, %a que odremos instalar PHP sobre "nternet "n(ormation 0erver o sobre / ac#e con todas las garant&as. 0i #ubiese que recomendar una de las dos o ciones, nos decantar&amos or / ac#e debido a que, como dec&amos, PHP est ensado ara trabajar sobre / ac#e. Podr&a ser interesante ""0 en el caso de que deseemos correr /0P % PHP sobre el mismo servidor, %a que, en rinci io, / ac#e no es com atible con /0P.
$.1./. Conclusin
$n cualquier caso, ara (ines de desarrollo en local, odemos contentarnos en un rinci io de trabajar con cualquier sistema. 0olamente en casos de rogramacin realmente avan!ada odremos con(rontarnos con roblemas relacionados con el sistema o erativo utili!ado o el servidor en el que #acemos correr nuestras ginas. Ha% que ensar tambi,n que, en casos untuales ara los que nuestro P- ueda quedarse corto, odemos #acer directamente nuestras ruebas en el servidor donde alojamos nuestro sitio el cual ser mu% robablemente, como #emos dic#o, un 5nix o +inux (uncionando con / ac#e.
&e$erencia: $n ?esarrollo7eb #emos ublicado diversos manuales % art&culos que ueden ser una buena re(erencia ara la instalacin de PHP. /lgunos se ueden ver a continuacin1 -on(iguracin de PHP con / ac#e en 7indows -on(iguracin de PHP como mdulo de / ac#e, tambi,n en 7indows "nstalacin del Personal 7eb 0erver "nstalacin de ""0 en 7indows 6P ro(esional ?irectorio de / ac#e 8Hemos ublicado un manual o estar en breve9 @/< sobre cmo instalar PHP en 7indows Mideotutorial de instalacin de PHP con 7am M&deo1 instalar PHP en una llave 50G
Artculo por
Rubn Alvarez
$xisten dos (ormas de con(igurar PHP ara trabajar con / ac#e, instalar como un mdulo o instalar como un -.". $n este art&culo vamos a ver cmo instalarlo com -.", aunque dis onemos de otro art&culo ara instalar PHP como mdulo en / ac#e.
$.$.1. "ara instalar "#" como un CG! &a3 <ue seguir los siguientes pasos=
$n rimer lugar, #a% que descargarse PHP desde la gina de # .net. $xisten dos versiones, una que tiene un instalador, % otra que es un (ic#ero C"P. Ha% que descargarse esta :ltima. 5na ve! descargado, #a% que descom rimirlo dentro de una car eta, esta no tiene que estar bajo el rbol de directorios de / ac#e. $l art&culo asumir que se descom rime dentro de la car eta -1PHP. -om robar que los contenidos del arc#ivo C"P no quedan en un subdirectorio de la car tea -1PHP, sino directamente en dic#a car eta. ?entro de la car eta c1PHP se encuentra un (ic#ero llamado PHP4ts.dll, #a% que mover el (ic#ero dentro de la car eta1
Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com c1windowss%stem c1winnts%stem $n este (ic#ero se encuentra toda la con(iguracin de PHP, % las modi(icaciones en la con(iguracin de PHP 8mostrar $rrores, variables globales etc...9 se encuentra dentro del mismo. $s mu% recomendable cambiar la directiva dis la%Nerrors que or de(ecto esta en ;@@, % ornerla en ;N, ara oder ver los errores que se roducen en las ginas durante el desarrollo. Para un servidor en roduccin en conveniente dejarla en ;@@. 5na ve! se #an #ec#o estos cambios, queda indicarle al / ac#e, donde se encuentra instalado el PHP, ara ello #a% que editar el (ic#ero #tt d.con( que se encuentra dentro de la car eta con(, en la car eta de instalacin del a ac#e 8 or de(ecto c1arc#ivos de rogramaa ac#e grou a ac#eLcon(9 /brir el (ic#ero, % situarse al (inal del mismo, % escribir las siguientes l&neas1
ScriptAlias /php/ "c:/php/" AddType application/x-httpd-php .php Action application/x-httpd-php "/php/php.exe"
$n ellas se indica donde se encuentra el ejecutable de # , % lo asocia a los (ic#eros . # que se encuentren dentro de a ac#e. / continuacin reiniciar el servidor / ac#e, % %a estaO Por :ltimo, indicar que ara robar la nueva instalacin, es recomendable crear un (ic#ero # con el siguiente contenido1
<? phpinfo();?>
+uego lo guardamosdentro de la car eta ra&! de documentos del / ac#e 8 or de(ecto c1arc#ivos de rogramaa ac#e grou a ac#eL#tdocs 9, con un nombre terminado en . # , or ejem lo in(o. # Para ejecutarlo, a trav,s de un navegador, escribir la direccin #tt 1AAlocal#ostAin(o. # . ?eber&a a arecer una antalla como la que se muestra a continuacin.
0i la vemos correctamente es que todo #a ido bien % que tenemos er(ectamente instalado PHP en nuestro servidor / ac#e.
)ota: $ste ti o de instalacin de PHP sobre / ac#e es oco recomendada or motivos de seguridad. Podemos seguirla ara con(igurar PHP en local, con intencin de desarrollar nuestras ginas web, ero nunca si vamos a utili!ar el servidor en un entorno de roduccin, es decir, en un servidor que se encuentre ermanentemente conectado a "nternet sirviendo ginas a todo ti o de usuarios. 0er&a necesario instalar PHP como un mdulo de / ac#e, en lugar de -.", ara dotar al sistema de una ma%or seguridad, % tambi,n ms otencia. &e$erencia: $n esta @/< damos otras o ciones ara la instalacin de PHP, utili!ando rogramas que ermiten instalar % con(igurar / ac#e P PHP P *%0<+ en un sencillo aso, accesible ara todos los usuarios1 -mo instalar PHP en 7indows.
Artculo por
Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com ara modi(icar la con(iguracin de PHP a nuestro gusto o necesidades. Para de(inir el # .ini debemos #acer una co ia del arc#ivo de con(iguracin escogido 8= # .iniDdist= o = # .iniD recommended=9 % renombrarlo como el = # .ini=. Posteriormente debemos co iarlo en nuestra car eta 7indows, que en sistemas 9xA*$A6P es =c1windows= % en sistemas N)ALFFF suele ser =c17"NN)=, o bien =c17"NN)4F=.
$l lugar adecuado ara a'adir esas l&neas es en el bloque de carga de mdulos, que odemos encontrar si buscamos or el texto =+oad*odule=. Podemos a'adir las l&neas de carga del mdulo PHP des u,s de la carga de los otros mdulos que vienen %a con(igurados en arc#ivo #tt d.con( de / ac#e. 0i no instalamos PHP en el directorio c1 # , debemos editar las l&neas a colocar en el #tt d.con( ara colocar la ruta correcta al directorio donde est la librer&a # 4a ac#eL.dll.
1%nta+ error on line !67 o" (:/4rchi*os de programa/4pache 8roup/4pache2/con"/httpd.con": (annot load (:/php/sapi/php4apache2.dll into ser*er: &o se puede encontrar el m'dulo especi"icado.
;tra con(iguracin que odemos a licar al arc#ivo #tt d.con( es de(inir tambi,n como documento or de(ecto el arc#ivo index. # en nuestro servidor / ac#e. $l documento or de(ecto es generalmente index.#tml, ero lo #abitual si vamos a rogramar con PHP es que tambi,n necesitemos de(inir index. # como documento a mostrar si no se indica otro documento del directorio al que se est accediendo. $l documento or de(ecto se de(ine con la variable ?irector%"ndex. Nos quedar una deninicin como esta1
(irectory)ndex index.ht%l index.ht%l.*ar index.php
$sta (uncin sim lemente crear una gina de muestra de las con(iguraciones de(inidas ara PHP en ese servidor.
10
Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com Para acceder al arc#ivo creado desde nuestro ex lorador, escribiremos en la barra de direcciones esta 5>+1 #tt 1AAlocal#ostA rueba. # ?eber&a a arecer un resultado como el de la siguiente imagen.
&e$erencia: $n esta @/< damos otras o ciones ara la instalacin de PHP, utili!ando rogramas que ermiten instalar % con(igurar / ac#e P PHP P *%0<+ en un sencillo aso, accesible ara todos los usuarios1 -mo instalar PHP en 7indows.
Artculo por
11
Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com encontramos dentro de la base de datos. / artir de a#& odemos reali!ar todo ti o de o eraciones or sentencias 0<+. No vamos a entrar en una ex licacin ormenori!ada del (uncionamiento de esta base de datos %a que esto nos dar&a ara un manual entero. ?aremos como re(erencia nuestro tutorial de SQL a artir del cual se uede tener una idea mu% rctica de las sentencias necesarias ara la creaci#n % edicin de las tablas. )ambi,n existe una documentacin extensa en ingl,s en el directorio Docs de *%0<+. / modo de resumen, aqu& os ro onemos adems las o eraciones ms bsicas que, combinadas nuestro tutorial de SQL ueden dar solucin a gran arte de los casos que se os resenten1
Descripcin 0uestra el con)unto de bases de datos presentes en el ser*idor Determina la base de datos sobre la .ue *amos a traba)ar (rea una nue*a bd con el nombre especi"icado Elimina la base de datos del nombre especi"icado 0uestra las tablas presentes en la base de datos actual Describe los campos .ue componen la tabla
:se nombre;de;la;base (reate Database nombre;de;la;base9 Drop Database nombre;de;la;base9 1how tables9 Describe nombre;de;la;tabla9 Drop <able nombre;de;la;tabla9 $oad Data $ocal 5n"ile >archi*o.t+t> 5nto <able nombre;de;la;tabla9 2uit
=orra la tabla de la base de datos (rea los registros de la tabla a partir de un "ichero de te+to en el .ue separamos por tabulaciones todos los campos de un mismo registro. 1alir de 0%12$
Para evitarnos el tener que editar nuestras tablas directamente sobre arc#ivos de texto, uede resultar mu% rctico usar cualquier otra base de datos con un editor % ex ortar a continuacin la tabla en un arc#ivo de texto con(igurado ara dejar tabulaciones entre cada cam o. $sto es osible en /ccess or ejem lo inc#ando con el botn derec#o sobre la tabla que queremos convertir % eligiendo la o cin ex ortar. 5na ventana de dialogo a arecer en la que elegiremos guardar el arc#ivo en ti o texto. $l aso siguiente ser elegir un (ormato delimitado or tabulaciones sin cuali(icador de texto. ;tra osibilidad que uede resultar mu% rctica % que nos evita trabajar continuamente tecleando rdenes al estilo de anta'o es servirse de rogramas en PHP o Perl %a existentes % descargables en la red. $l ms o ular sin duda es
12
Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com p%pMyAdmin. $ste ti o de scri ts son ejecutados desde un navegador % ueden ser or tanto albergados en nuestro servidor o em leados en local ara, a artir de ellos, administrar *%0<+ de una (orma menos su(rida. /simismo, dentro del directorio bin de *%0<+, odemos encontrar una eque'a a licacin llamada *%0ql*anager. 0e trata de una inter(ace windows, ms agradable a la vista % al uso que la que obtenemos ejecutando el arc#ivo mysql. $n este caso, las sentencias 0<+ deben reali!arse sin el unto % coma (inal.
Artculo por
Rubn Alvarez
13
B. -on(iguracin en ""0
14
15
16
9. Probando PHP -rear arc#ivo index. # en -1"net ubwwwroot -o iar el codigo siguiente en el arc#ivo
<<?php // testin+ sessions // chec, to see if files are -ein+ created // in the session.sa*e$path folder session$start(); ?> <ht%l> <head> <title>./. Test</title> </head> <-ody> <p> The -ro0ser yo"1re "sin+ is <?php echo 2$S3453461/TT.$7S34$A839T1:; ?> </p> <p> <;-- test the -ro0scap set"p --> <o"r -ro0ser1s capa-ilities are: <-r/> <pre> <?php print$r(+et$-ro0ser(n"ll= tr"e)); ?> </pre> </p> <?php phpinfo(); ?> </-ody> </ht%l>
L. /brir "$4 % oner la direccin #tt 1AAlocal#ostAindex. # , si le da error veri(icar los asos de la instalacin. 0i no da error saldra una antalla con in(ormacin sobre la versin de # .
Artculo por
Jorge Ramos
17
Parte 3:
$ste ultimo modo est rinci almente aconsejado a aquellos que tengan el valor de trabajar con @ront Page %a que, usando cualquier otro ti o de etiqueta, corremos el riesgo de que la a licacin nos la borre sin ms debido a que se trata de un cdigo incom rensible ara ella. $l modo de (uncionamiento de una gina PHP, a grandes rasgos, no di(iere del clsico ara una gina dinmica de lado servidor1 $l servidor va a reconocer la extensin corres ondiente a la gina PHP 8 #tml, # , # 4,...9 % antes de enviarla al navegador va a encargarse de inter retar % ejecutar todo aquello que se encuentre entre las etiquetas corres ondientes al lenguaje PHP. $l resto, lo enviara sin ms %a que, asumir que se trata de cdigo H)*+ absolutamente com rensible or el navegador. ;tra caracter&stica general de los scri ts en PHP es la (orma de se arar las distintas instrucciones. Para #acerlo, #a% que acabar cada instruccin con un unto % coma =V=. Para la ultima ex resin, la que va antes del cierre de etiqueta, este (ormalismo no es necesario. "ncluimos tambi,n en este ca itulo la sintaxis de comentarios. 5n comentario, ara aquellos que no lo se an, es una (rase o alabra que nosotros incluimos en el cdigo ara com renderlo ms (cilmente al volverlo a leer un tiem o des u,s % que, or su uesto, el ordenador tiene que ignorar %a que no va dirigido a ,l sino a nosotros mismos. +os comentarios tienen una gran utilidad %a que es mu% (cil olvidarse del (uncionamiento de un scri t rogramado un tiem o atrs % resulta mu% :til si queremos #acer r idamente com rensible nuestro cdigo a otra ersona.
18
Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com Pues bien, la (orma de incluir estos comentarios es variable de endiendo si queremos escribir una l&nea o ms. Meamos esto con un rimer ejem lo de scri t1
<? 2%ensa@e?"Ten+o ha%-re;;"; //&o%entario de "na linea echo 2%ensa@e; A3ste co%entario ta%-iBn es de "na linea /C3n este caso %i co%entario oc"pa *arias lineas= lo *es? C/ ?>
*+ecutar script 0i usamos doble barra 8AA9 o el s&mbolo Q odemos introducir comentarios de una l&nea. *ediante AW % WA creamos comentarios multil&nea. Por su uesto, nada nos im ide de usar estos :ltimos en una sola l&nea. No os reocu ,is si no com rend,is el texto entre las etiquetas, todo llegar. ;s adelantamos que las variables en PHP se de(inen ante oniendo un s&mbolo de dlar 8X9 % que la instruccin echo sirve ara sacar en antalla lo que #a% escrito a continuacin. >ecordamos que todo el texto insertado en (orma de comentario es com letamente ignorado or el servidor. >esulta im ortante acostumbrarse a dejar comentarios, es algo que se agradece con el tiem o.
Artculo por
Rubn Alvarez
Aariables numricas 4lmacenan ci"ras Enteros Real ?entero@2AA29 ?real@7.!4!BC9 &umeros sin decimales &umeros con o sin decimal
Aariables al8anumricas 4lmacenan te+tos compuestos de nDmeros %/o ci"ras (adenas 4lmacenan *ariables al"anumEricas ?cadena@>-ola amigo>9
19
(ablas 4lmacenan series de in"ormaciones numEricas %/o al"anumEricas ?sentidoF!G@>*er>9 ?sentidoF2G@>tocar>9 ?sentidoF7G@>oir>9 ?sentidoF4G@>gusto>9 ?sentidoFBG@>oler>9
BbCetos 1e trata de con)untos de *ariables % "unciones asociadas. ,resentan una comple)idad ma%or .ue las *ariables *istas hasta ahora pero su utilidad es m/s .ue interesante.
/ di(erencia de otros lenguajes, PHP osee una gran (lexibilidad a la #ora de o erar con variables. $n e(ecto, cuando de(inimos una variable asignndole un valor, el ordenador le atribu%e un ti o. 0i or ejem lo de(inimos una variable entre comillas, la variable ser considerada de ti o cadena1
2*aria-le?"D"; //esto es "na cadena
0in embargo si edimos en nuestro scri t reali!ar una o eracin matemtica con esta variable, no obtendremos un mensaje de error sino que la variable cadena ser asimilada a num,rica1
<? 2cadena?"D"; //esto es "na cadena 2entero?E; //esto es "n entero echo 2cadenaF2entero ?>
*+ecutar script $ste scri t dar como resultado =E=. +a variable cadena #a sido asimilada en entero 8aunque su ti o sigue siendo cadena9 ara oder reali!ar la o eracin matemtica. ?el mismo modo, odemos o erar entre variables ti o entero % real. No debemos reocu arnos de nada, PHP se encarga durante la ejecucin de inter retar el ti o de variable necesario ara el buen (uncionamiento del rograma. 0in embargo, en contraste, #a% que tener cuidado en no cambiar ma%:sculas or min:sculas %a que, en este sentido, PHP es sensible. -onviene or lo tanto trabajar %a sea siem re en ma%:sculas o siem re en min:sculas ara evitar este ti o de malentendidos a veces mu% di(&ciles de locali!ar. Variables asignadas por re$erencia $n PHP tambi,n odemos asignar variables or re(erencia. $n ese caso no se les asigna un valor, sino otra variable, de tal modo que las dos varialbles com arten es acio en memoria ara el mismo dato. +a notacin ara asignar or re(erencia es colocar un =Y= antes del nombre de la variable.
<?php 2foo ? 1Go-1; // Asi+na el *alor 1Go-1 a 2foo 2-ar ? H2foo; // 4eferencia 2foo *Ia 2-ar. 2-ar ? "!i no%-re es 2-ar"; // !odifica 2-ar... echo 2foo; // 2foo ta%-iBn se %odifica. echo 2-ar; ?>
$sto dar como resultado la visuali!acin dos veces del string =*i nombre es Gob=. /lgo como1 *i nombre es Gob*i nombre es Gob
20
Artculo por
Rubn Alvarez
Xa R =1=V AAXa es una cadena XaZF[ R =(=V AAH$stamos editando el &ndice de la cadena o (or!ando a arra%J
'.'.1. )orzado
$n cualquier caso, odemos (or!ar una variable ara que cambie de ti o con la (uncin set)% e89. set)% e8Xvariable,=nuevoNti o=9V la (uncin set)% e89 actuali!a el ti o de Xvariable a =nuevoNti o= % devuelve un boleano indicando si #ubo ,xito o no en la conversin. $ntre =nuevoNti o= tenemos1 \ =integer= \ =double= \ =string= \ =arra%= \ =object= )ambi,n odemos #acer que una variable se com orte como un ti o determinado (or!ndola, de la misma manera a como se #ace en el lenguaje -. Xvariable R =L2=V Xvariable R 8int9 XvariableV +os (or!ados ermitidos son1 \ 8int9, 8integer9 D (uer!a a entero 8integer9 \ 8real9, 8double9, 8(loat9 D (uer!a a doble 8double9 \ 8string9 D (uer!a a cadena 8string9
21
Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com \ 8arra%9 D (uer!a a arra% 8arra%9 8object9 D (uer!a a objeto 8object9
Artculo por
Aariable
Descripcin
&os in"orma principalmente sobre el sistema operati*o % tipo % *ersi'n de na*egador utilizado por el internauta. 1u principal utilidad radica en .ue3 a partir ?-<<,;:1ER;48E de esta in"ormaci'n3 podemos redireccionar nuestros &< usuarios hacia p/ginas optimizadas para su na*egador o realizar cual.uier otro tipo de acci'n en el conte+to de un na*egador determinado. &os de*uel*e la o las abre*iaciones de la lengua considerada como principal por el na*egador. Esta ?-<<,;4((E,<;$4 lengua o lenguas principales pueden ser elegidas en el &8:48E menD de opciones del na*egador. Esta *ariable resulta tambiEn e+tremadamente Dtil para en*iar al internauta a las p/ginas escritas en su lengua3 si es .ue e+isten. &os indica la :R$ desde la cual el internauta ha tenido acceso a la p/gina. 0u% interesante para generar ?-<<,;REHERER botones de >4tr/s> din/micos o para crear nuestros propios sistemas de estadsticas de *isitas. &os de*uel*e una cadena con la :R$ del script .ue est/ siendo e)ecutado. 0u% interesante para crear botones para recargar la p/gina.
?,-,;1E$H
?-<<,;8E<;I4R1 1e trata de un arra% .ue almacena los nombres % contenidos de las *ariables en*iadas al script por :R$ o
22
por "ormularios 8E< 1e trata de un arra% .ue almacena los nombres % ?-<<,;,J1<;I4R1 contenidos de las *ariables en*iadas al script por medio de un "ormulario ,J1< 1e trata de un arra% .ue almacena los nombres % ?-<<,;(JJK5E;I4 contenidos de las cooLies. Ieremos .uE son m/s R1 adelante. 4lmacena la *ariable usuario cuando se e"ectDa la entrada a p/ginas de acceso restringido. (ombinado ?,-,;4:<-;:1ER con ?,-,;4:<-;,W resulta ideal para controlar el acceso a las p/ginas internas del sitio. 4lmacena la *ariable password cuando se e"ectDa la entrada a p/ginas de acceso restringido. (ombinado ?,-,;4:<-;,W con ?,-,;4:<-;:1ER resulta ideal para controlar el acceso a las p/ginas internas del sitio. ?RE0J<E;4DDR 0uestra la direcci'n 5, del *isitante.
?DJ(:0E&<;RJJ &os de*uel*e el path "sico en el .ue se encuentra < alo)ada la p/gina en el ser*idor. ?,-,1E115D 8uarda el identi"icador de sesi'n del usuario. Ieremos m/s adelante en .uE consisten las sesiones.
No todas estas variables estn dis onibles en la totalidad de servidores o en determinadas versiones de un mismo servidor. adems, algunas de ellas #an de ser reviamente activadas o de(inidas or medio de alg:n acontecimiento. /s&, or ejem lo, la variable XH))PN>$@$>$> no estar de(inida a menos que el internauta acceda al scri t a artir de un enlace desde otra gina.
'.*.$. DGLB%AL9
-ontiene una re(erencia a cada variable dis onible en el es ectro de las variables del scri t. +as llaves de esta matri! son los nombres de las variables globales. X.+;G/+0 existe dese PHP 2.
23
,-S*&V*& Mariables de(inidas or el servidor web directamente relacionadas con el entorno en don el scri t se esta ejecutando. /nloga a la antigua matri! XH))PN0$>M$>NM/>0 8la cual est todav&a dis onible, aunque no se use9. ,-.*T Mariables ro orcionadas al scri t or medio de H))P .$). /nloga a la antigua matri! XH))PN.$)NM/>0 8la cual est todav&a dis onible, aunque no se use9. ,-P/ST Mariables ro orcionadas al scri t or medio de H))P P;0). /nloga a la antigua matri! XH))PNP;0)NM/>0 8la cual est todav&a dis onible, aunque no se use9. ,-0//1"* Mariables ro orcionadas al scri t or medio de H))P cooKies. /nloga a la antigua matri! XH))PN-;;^"$NM/>0 8la cual est todav&a dis onible, aunque no se use9. ,-2"L*S Mariables ro orcionadas al scri t or medio de la subida de (ic#eros via H))P . /nloga a la antigua matri! XH))PNP;0)N@"+$0 8la cual est todav&a dis onible, aunque no se use9. Mea tambi,n 0ubiendo (ic#eros or m,todo P;0) ara ms in(ormacin. ,-*)V Mariables ro orcionadas al scri t or medio del entorno. /nloga a la antigua matri! XH))PN$NMNM/>0 8la cual est todav&a dis onible, aunque no se use9. ,-&*Q3*ST Mariables ro orcionadas al scri t or medio de cuaquier mecanismo de entrada del usuario % or lo tanto no se uede con(iar en ellas. +a resencia % el orden en que a arecen las variables en esta matri! es de(inido or la directiva de con(iguracin variablesNorder. $sta matri! no tiene un anlogo en versiones anteriores a PHP 4.1.F. Mea tambi,n im ortNrequestNvariables89. ,-S*SS"/) Mariables registradas en la sesin del scri t. /nloga a la antigua matri! XH))PN0$00";NNM/>0 8la cual est todav&a dis onible, aunque no se use9. Mea tambi,n la seccin @unciones ara el manejo de sessiones ara ms in(ormacin.
Artculo por
Rubn Alvarez
24
Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com que no se tiene acceso a su valor. $sto es as& en PHP or motivos de claridad del cdigo, ara evitar que se ueda restar a con(usin el #ec#o de usar dentro de una (uncin una variable que no #a sido declarada or ning:n sitio cercano.
)ota: tal ve! resulten desconocidos los conce tos sobre (unciones, que se tratan ms adelante en este manual1 (unciones en PHP
$ntonces, si queremos utili!ar una variable global a la gina dentro de una (uncin, tenemos que es eci(icar de alguna manera que esa variable que vamos a utili!ar es una global. $xisten en PHP un ar de maneras de utili!ar variables globales a la gina dentro de una (uncin. 0on las siguientes1 Matriz .L/4ALS $xiste un arra% en PHP llamado X.+;G/+0, que guarda una re(erencia a todas las variables creadas de manera global a la gina. $s una matri! o arra% asociativo, de los que en lugar de &ndices num,ricos utili!an &ndices de texto, donde cada &ndice es el nombre que #emos dado a la variable % cada valor es el contenido de cada variable. 0u ongamos que tenemos esta declaracin de variables globales a la gina, es decir, (uera de cualquier (uncin1
2%i*aria-le ? "pepe"; 2otra*aria-le ? J'E#;
0i queremos acceder a esas variables dentro de una (uncin utili!ando el arra% X.+;G/+0 tendr&amos este cdigo1
f"nction %if"ncion()K //estoy dentro de la f"nciLn= para aceder a las *aria-les "tiliMo 28 NGA S echo 28 NGA S6"%i*aria-le":; echo 28 NGA S6"otra*aria-le":; O
-omo se uede ver, se accede al contenido de las variables globales con el arra% X.+;G/+0, utili!ando como &ndices de la matri! los nombres de variables que deseamos mostrar. $sto im rimir&a or antalla el texto = e e1L24=, el valor de las dos variables uno detrs del otro. 5eclaraci#n de uso de variables globales dentro de una $unci#n ;tra cosa que odemos #acer ara acceder a variables globales dentro de una (uncin es es eci(icar al comien!o de dic#a (uncin la lista de variables que vamos a utili!ar dentro. Para es eci(icar esas variables utili!amos la alabra =global= seguida de la lista de variables que se van a utili!ar del entorno global.
f"nction %if"ncion()K +lo-al 2%i*aria-le= 2otra*aria-le //con esa lInea dentro de la f"nciLn= declara%os el "so de *aria-les +lo-ales echo 2%i*aria-le; echo 2otra*aria-le; O
-omo vemos, con =global= se es eci(ica que vamos a utili!ar unas variables que (ueron declaradas como globales a la gina. 5na ve! #ec#o esto, %a odemos acceder a esas variables globales como si estuvieran declaradas dentro de la (uncin. -ualquier alteracin que #agamos a las variables dentro de la (uncin ermanecer cuando se #a%a salido de la (uncin, tanto si accedemos a trav,s del arra% X.+;G/+0 o declarando con =global= el uso de esas variables.
Artculo por
'.?. Bperadores
*ista descriptiva de los operadores ms frecuentemente utili+ados +as variables, como base de in(ormacin de un lenguaje, ueden ser creadas, modi(icadas % com aradas con otras or medio de los llamados o eradores. $n los ca &tulos anteriores #emos utili!ado en nuestros ejem los algunos de ellos. $n este ca &tulo retendemos listar los ms im ortantes % as& dar constancia de ellos ara (uturos ejem los.
25
1uma Resta
G 0
0ultiplicaci'n Di*isi'n
&e$erencia: $l o erador aritm,tico que uede resultar ms desconocido ara los lectores es el o erador T. $x licamos con ma%or detenimiento su (uncionamiento % un ejem lo en el que es :til en el taller1 +istas de elementos con colores alternos en PHP.
II 5gualdad JI Desigual K 0enor .ue KI 0enor igual .ue L 0a%or .ue LI 0a%or igual .ue
4nd Br
M J
26
&o
$ste ti o de ex resiones no son ms que abreviaciones de otras (ormas ms clsicas1 Xvariable PR 1F es lo mismo que1 Xvariable R XvariableP1F
Artculo por
Rubn Alvarez
27
Parte 4:
rrays y ca!enas
&os detenemos para *er c'mo son los arra%s en ,-,3 la estructura de datos m/s esencial .ue e+iste. 4dem/s aprenderemos a traba)ar con cadenas en ,-,.
$n este caso este arra% cataloga sus elementos, comunmente llamados valores, or n:meros. +os n:meros del 1 al 3 son or lo tanto las claves % los sentidos son los valores asociados. Nada nos im ide em lear nombres 8cadenas9 ara clasi(icarlos. +o :nico que deberemos #acer es entrecomillarlos1
<? 2%oneda6"espana":?".eseta"; 2%oneda6"francia":?"Pranco"; 2%oneda6""sa":?"(olar"; ?>
;tra (orma de de(inir id,nticamente este mismo arra% % que nos uede a%udar ara la creacin de arra%s ms com lejos es la siguiente sintaxis1
<? 2%oneda?array("espana"?> ".eseta"="francia" ?> "Pranco"=""sa" ?> "(olar"); ?>
5na (orma mu% ractica de almacenar datos es mediante la creacin de arra%s multidimensionales 8tablas9. Pongamos el ejem lo siguiente1 <ueremos almacenar dentro de una misma tabla el nombre, moneda % lengua #ablada en cada a&s. Para #acerlo odemos em lear un arra% llamado a&s que vendr de(inido or estas tres caracter&sticas 8claves9. Para crearlo, deber&amos escribir una ex resin del mismo ti o que la vista anteriormente en la que meteremos una arra% dentro del otro. $ste roceso de incluir una instruccion dentro de otra se llama anidar % es mu% corriente en rogramacin1
<? 2pais?array ( "espana" ?>array ( "no%-re"?>"3spaQa"= "len+"a"?>"&astellano"= "%oneda"?>".eseta" )=
28
*+ecutar script /ntes de entrar en el detalle de este eque'o scri t, comentemos algunos untos re(erentes a la sintaxis. -omo uede verse, en esta secuencia de scri t, no #emos introducido unto % coma =V= al (inal de cada l&nea. $sto es sim lemente debido a que lo que #emos escrito uede ser considerado como una sola instruccin. $n realidad, somos nosotros quienes decidimos cortarla en varias l&neas ara, as&, (acilitar su lectura. +a verdadera instruccin acabar&a una ve! de(inido com letamente el arra% % es recisamente a#& donde #emos colocado el :nico unto % coma. Por otra arte, od,is observar cmo #emos jugado con el tabulador ara se arar unas l&neas ms que otras del rinci io. $sto tambi,n lo #acemos or cuestiones de claridad, %a que nos ermite ver qu, artes del cdigo estn incluidas dentro de otras. $s im ortante acostumbrarse a escribir de esta (orma del mismo modo que a introducir los comentarios %a que la claridad de los scri ts es (undamental a la #ora de de urarlos. 5n oco de es(uer!o a la #ora de crearlos uede a#orrarnos muc#as #oras a la #ora de corregirlos o modi(icarlos meses ms tarde. Pasando %a al comentario del rograma, como od,is ver, ,ste nos ermite almacenar tablas %, a artir de una sim le eticin, visuali!arlas un determinado valor en antalla. +o que es interesante es que la utilidad de los arra%s no acaba aqu&, sino que tambi,n odemos utili!ar toda una serie de (unciones creadas ara ordenarlos or orden al(ab,tico directo o inverso, or claves, contar el numero de elementos que com onen el arra% adems de oder movernos or dentro de ,l #acia delante o atrs. *uc#as son las $unciones ro uestas or PHP ara el tratamiento de arra%s, no vamos a entrar aqu& en una descri cin de las mismas. 0lo incluiremos esta eque'a tabla que uede ser com lementada, si necesario, con la documentaci#n que %a #emos mencionado.
)uncin arra%;*alues (mi;arra% asort(mi;arra% % arsort(mi;arra% count(mi;arra% Lsort(mi;arra% % Lrsort(mi;arra% list (?*ariable!3 ?*ariable2... @mi;arra%
Descripcin $ista los *alores contenidos en mi;arra% Jrdena por orden al"abEtico directo o in*erso en "unci'n de los *alores &os da el numero de elementos de nuestro arra% Jrdena por orden al"abEtico directo o in*erso en "unci'n de las cla*es 4signa cada una *ariable a cada uno de los *alores del arra%
ne+t(mi;arra% 3 pre*(mi;arra% 3 &os permiten mo*ernos por dentro del arra% con un reset(mi;arra% % end(mi;arra% puntero hacia delante3 atras % al principio % al "inal. each(mi;arra% &os da el *alor % la cla*e del elemento en el .ue nos
29
Rubn Alvarez
30
Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com )endr como salida1 *iguel Pe e _uan Pe e _uan array-s%i$t78 $sta (uncin extrae el el rimer elemento del arra% % lo devuelve. /dems, acorta la longitud del arra% eliminando el elemento que estaba en la rimera casilla. 0iem re #ace lo mismo, or tanto, no recibir ms que el arra% al que se desea eliminar la rimera osicin. $n el cdigo siguiente se tiene el mismo vector con nombres ro ios % se ejecuta dos veces la (uncin arra%Ns#i(t89 eliminando un elemento en cada ocasin. 0e im rimen los valores que devuelve la (uncin % los elementos del arra% resultante de eliminar la rimera casilla.
<? 2entrada ? array ("!i+"el"= ".epe"= "R"an"= "R"lio"= ".a-lo"); //T"ito la pri%era casilla 2salida ? array$shift (2entrada); //%"estro el array echo " a f"nciLn de*"el*e: " . 2salida . "<-r>"; foreach (2entrada as 2act"al) echo 2act"al . "<-r>"; echo "<p>"; //T"ito la pri%era casilla= T"e ahora serIa la se+"nda del array ori+inal 2salida ? array$shift (2entrada); echo " a f"nciLn de*"el*e: " . 2salida . "<-r>"; //%"estro el array foreach (2entrada as 2act"al) echo 2act"al . "<-r>"; ?>
?a como resultado1 +a (uncin devuelve1 *iguel Pe e _uan _ulio Pablo +a (uncin devuelve1 Pe e _uan _ulio Pablo unset78 0e utili!a ara destruir una variable dada. $n el caso de los arreglos, se uede utili!ar ara eliminar una casilla de un arra% asociativo 8los que no tienen &ndices num,ricos sino que su &ndice es una cadena de caracteres9. Meamos el siguiente cdigo ara conocer cmo de(inir un arra% asociativo % eliminar luego una de sus casillas.
<? 2estadios$f"t-ol ? array("Garcelona"?> "9o" &a%p"="4eal !adrid" ?> "Santia+o Gerna-e""="5alencia" ?> "!estalla"="4eal Sociedad" ?> "Anoeta"); //%ostra%os los estadios foreach (2estadios$f"t-ol as 2indice?>2act"al) echo 2indice . " -- " . 2act"al . "<-r>"; echo "<p>"; //eli%ina%os el estadio asociado al real %adrid "nset (2estadios$f"t-ol6"4eal !adrid":);
31
+a salida ser la siguiente1 Garcelona DD Nou -am >eal *adrid DD 0antiago Gernabeu Malencia DD *estalla >eal 0ociedad DD /noeta Garcelona DD Nou -am Malencia DD *estalla >eal 0ociedad DD /noeta
?a como resultado esta salida1 +agartija /ra'a Perro .ato >atn .orrin Paloma ;so array-merge78 /#ora vamos a ver cmo unir dos arra%s utili!ando la (uncin arra%Nmerge89. / ,sta se le asan dos o ms arra%s or armetro % devuelve un arreglo con todos los cam os de los vectores asados. $n este cdigo de ejem lo creamos tres arra%s % luego los unimos con la (uncin arra%Nmerge89
<? 2ta-la ? array (" a+arti@a"= "AraQa"= ".erro"= "8ato"= "4atLn"); 2ta-la' ? array ("J'"="E#"="#D"="D'"="J'"); 2ta-laE ? array ("Sa"ce"=".ino"="9aran@o"="&hopo"=".erro"="E#"); //a"%enta%os el ta%aQo del array 2res"ltado ? array$%er+e(2ta-la= 2ta-la'= 2ta-laE); foreach (2res"ltado as 2act"al) echo 2act"al . "<-r>"; ?>
32
Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com ?a como resultado1 +agartija /ra'a Perro .ato >atn 1L 24 43 3L 1L 0auce Pino Naranjo -#o o Perro 24 5na :ltima cosa. )ambi,n ueden introducirse nuevas casillas en un arreglo or los m,todos #abituales de asignar las nuevas osiciones en el arra% a las casillas que necesitemos. $n arra%s normales se #ar&a as&1
2ta-la ? array ("Sa"ce"=".ino"="9aran@o"); 2ta-la6E:?"Al+arro-o";
$n arra%s asociativos1
2estadios$f"t-ol ? array("5alencia" ?> "!estalla"="4eal Sociedad" ?> "Anoeta"); 2estadios$f"t-ol6"Garcelona":? "9o" &a%p";
Meremos ms adelante otras osibilidades del trabajo con arra%s. Ponemos a vuestra dis osicin las ginas PHP que contienen los cdigos con los que #emos trabajado.
&e$erencia:en el taller de PHP tenemos art&culos sobre el trabajo con arra%s en PHP. -oncretamente tenemos uno que ex lica los distintos ti os de ordenacin de arra%s en PHP1 ;rdenar arra%s con PHP
Artculo por
*.'. Cadenas
'spectos relevantes de este tipo de variables. *ista de caracteres protegidos. 5na de las variables ms corrientes a las que tendremos que #acer (rente en la ma%or&a de nuestros scri ts son las cadenas, que no son ms que in(ormacin de carcter no num,rico 8textos, or ejem lo9. Para asignar a una variable un contenido de este ti o, lo escribiremos entre comillas dando lugar a declaraciones de este ti o1
2cadena?"3sta es la infor%aciLn de %i *aria-le"
0i queremos ver en antalla el valor de una variable o bien un mensaje cualquiera usaremos la instruccin echo como %a lo #emos visto anteriormente1
echo 2cadena //sacarIa "3sta es la infor%aciLn de %i *aria-le" echo "3sta es la infor%aciLn de %i *aria-le" //darIa el %is%o res"ltado
Podemos %uxta oner o concatenar varias cadenas oniendo ara ello un unto entre ellas1
33
*+ecutar script )ambi,n odemos introducir variables dentro de nuestra cadena lo cual nos uede a%udar muc#o en el desarrollo de nuestros scri ts. +o que veremos no es el nombre, sino el valor de la variable1
<? 2a?DD; 2%ensa@e?"Ten+o 2a aQos"; echo 2%ensa@e //3l res"ltado es: "Ten+o DD aQos" ?>
*+ecutar script +a regunta que nos odemos lantear a#ora es...H-mo #ago entonces ara que en ve! del valor =33= me salga el texto =Xa=J $n otras alabras, cmo se #ace ara que el s&mbolo X no de(ina una variable sino que sea tomado tal cual. $sta regunta es tanto ms interesante cuanto que en algunos de scri ts este s&mbolo debe ser utili!ado or una sim le ra!n comercial 8 ago en dlares or ejem lo9 % si lo escribimos tal cual, el ordenador va a ensar que lo que viene detrs es una variable siendo que no lo es. Pues bien, ara meter ,ste % otros caracteres utili!ados or el lenguaje dentro de las cadenas % no con(undirlos, lo que #a% que #acer es escribir una contrabarra delante1
28ecto en la cadena Escribe d'lar en la cadena Escribe comillas en la cadena Escribe contrabarra en la cadena Escribe R/2 % no 4 en la cadena
/dems, existen otras utilidades de esta contrabarra que nos ermiten introducir en nuestro documento H)*+ determinados eventos1
Car+c ter t n
34
Retorno de carro
$stos cambios de l&nea % tabulaciones tienen :nicamente e(ecto en el cdigo % no en el texto ejecutado or el navegador. $n otras alabras, si queremos que nuestro texto ejecutado cambie de l&nea #emos de introducir un echo "<br>" % no echo "n" %a que este ultimo slo cambia de l&nea en el arc#ivo H)*+ creado % enviado al navegador cuando la gina es ejecutada en el servidor. +a di(erencia entre estos dos elementos uede ser (cilmente com rendida mirando el cdigo (uente roducido al ejecutar este scri t1
</T! > </3A(> <T)T 3>ca%-iolinea.php</T)T 3> <//3A(> <GN(<> <? echo "/ola= n si+o en la %is%a lInea e@ec"tada pero no en cLdi+o f"ente.<-r>Ahora ca%-io de lInea e@ec"tada pero contin"o en la %is%a en el cLdi+o f"ente." ?> </GN(<> <//T! >
*+ecutar script
$c#ar un vista!o al codigo (uente del navegador
+as cadenas ueden asimismo ser tratadas or medio de (unciones de todo ti o. Meremos estas (unciones ms adelante con ms detalle. )an slo debemos retener que existen muc#as osibles acciones que odemos reali!ar sobre ellas1 ?ividirlas en alabras, eliminar es acios sobrantes, locali!ar secuencias, rem la!ar caracteres es eciales or su corres ondiente en H)*+ o incluso extraer las etiquetas *$)/ de una gina web.
Artculo por
Rubn Alvarez
35
Parte ":
#unciones en PHP
$as "unciones son esenciales para poder realizar c'digo de calidad3 tanto en ,-, como en muchos otros lengua)es de programaci'n. En estos captulos del 0anual de ,-, aprenderemos a de"inir "unciones3 traba)ar con par/metros % retornar *alores.
$sta (uncin odr&a ser llamada al rinci io de todas nuestras ginas de la siguiente (orma1
2tit"lo?"!i 0e-"; hacer$enca-eMado(2tit"lo);
?e esta (orma automati!amos el roceso de creacin de nuestro documento. Podr&amos or ejem lo incluir en la (uncin otras variables que nos a%udasen a construir la etiquetas meta % de esta (orma, con un es(uer!o m&nimo, crear&amos los encabe!ados ersonali!ados ara cada una de nuestras ginas. ?e este mismo modo nos es osible crear cierres de documento o (ormatos diversos ara nuestros textos como si se tratase de #ojas de estilo que tendr&an la ventaja de ser reconocidas or todos los navegadores. Por su uesto, la (uncin #a de ser de(inida dentro del scri t %a que no se encuentra integrada en PHP sino que la #emos creado nosotros. $sto en realidad no one ninguna ega %a que uede ser incluida desde un arc#ivo en el que iremos
36
Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com almacenando las de(iniciones de las (unciones que va%amos creando o reco ilando. $stos arc#ivos en los que se guardan las (unciones se llaman librer&as. +a (orma de incluirlos en nuestro scri t es a artir de la instruccin require o include1 require8=libreria. # =9 o include8=libreria. # =9 $n resumen, la cosa quedar&a as&1 )endr&amos un arc#ivo libreria. # como sigue
<? //f"nciLn de enca-eMado y colocaciLn del tit"lo f"nction hacer$enca-eMado(2tit"lo) K 2enca-eMado?"<ht%l>n<head>nt<title>2tit"lo</title>n</head>n"; echo 2enca-eMado; O ?>
Por otra arte tendr&amos nuestro scri t rinci al gina. # 8 or ejem lo91
<? incl"de("li-reria.php"); 2tit"lo?"!i Ue-"; hacer$enca-eMado(2tit"lo); ?> <-ody> 3l c"erpo de la pV+ina </-ody> </ht%l>
*+ecutar script
$c#ar un vista!o al codigo (uente del navegador
Podemos meter todas las (unciones que va%amos encontrando dentro de un mismo arc#ivo ero resulta muc#&simo ms ventajoso ir clasi(icndolas en distintos arc#ivos or temtica1 @unciones de conexin a bases de datos, (unciones comerciales, (unciones generales, etc. $sto nos a%udara a oder locali!arlas antes ara corregirlas o modi(icarlas, nos ermite tambi,n cargar :nicamente el ti o de (uncin que necesitamos ara el scri t sin recargar ,ste en exceso adems de ermitirnos utili!ar un determinado ti o de librer&a ara varios sitios webs distintos. )ambi,n uede resultar mu% rctico el utili!ar una nomenclatura sistemtica a la #ora de nombrarlas1 +as (unciones comerciales odr&an ser llamadas comNloquesea, las de bases de datos bdNloquesea, las de tratamiento de arc#ivos (ileNloquesea. $sto nos ermitir reconocerlas enseguida cuando leamos el scri t sin tener que recurrir a nuestra oxidada memoria ara descubrir su utilidad. No obstante, antes de lan!arnos a crear nuestra ro ia (uncin, merece la ena ec#ar un vista!o a la documentaci#n ara ver si dic#a (uncin %a existe o odemos a rovec#arnos de alguna de las existentes ara aligerar nuestro trabajo. /s&, or ejem lo, existe una (uncin llamada #eader que crea un encabe!ado H)*+ con(igurable lo cual nos evita tener que crearla nosotros mismos. -omo uede verse, la tarea del rogramador uede en algunos casos arecerse a la de un coleccionista. Ha% que ser aciente % metdico % al (inal, a base de trabajo ro io, intercambio % tiem o odemos llegar oseer nuestro eque'o tesoro.
)ota: 0i lo deseas uedes re asar todos los conce tos anteriores sobre las (unciones, as& como diversas otras cosas interesantes en el Mideotutorial sobre las (unciones en PHP.
37
Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com +a manera de reali!ar esta (uncin ser recorrer el string, caracter a caracter, ara im rimir cada uno de los caracteres, seguido de el signo =D=. >ecorreremos el string con un bucle (or, desde el carater F #asta el n:mero de caracteres total de la cadena. $l n:mero de caracteres de una cadena se obtiene con la (uncin rede(inida en PHP strlen89, que recibe el string entre ar,ntesis % devuelve el n:mero de los caracteres que tenga.
<ht%l> <head> <title>f"ncion J</title> </head> <-ody> <? f"nction escri-e$separa(2cadena)K for (2i?S;2i<strlen(2cadena);2iFF)K echo 2cadena62i:; if (2i<strlen(2cadena)-J) echo "-"; O O escri-e$separa ("hola"); echo "<p>"; escri-e$separa ("Texto %Vs lar+o= a *er lo T"e hace"); ?> </-ody> </ht%l>
+a (uncin que #emos creado se llama escribeNse ara % recibe como armetro la cadena que #a% que escribir con el se arador =D=. $l bucle (or nos sirve ara recorrer la cadena, desde el rimer al :ltimo carcter. +uego, dentro del bucle, se im rime cada carcter se arado del signo =D=. $l i( que #a% dentro del bucle (or com rueba que el actual no sea el :ltimo carcter, orque en ese caso no #abr&a que escribir el signo =D= 8queremos conseguir =#DoDlDa= % si no estuviera el i( obtendr&amos =#DoDlDaD=9. $n el cdigo mostrado se #acen un ar de llamadas a la (uncin ara ver el resultado obtenido con di(erentes cadenas como armetro. Podemos ver el scri t en marc#a.
Artculo por
Rubn Alvarez
/s& de(inimos una (uncin llamada (1 que recibe dos armetros. -omo se uede observar, no se tiene que de(inir el ti o de datos de cada armetro.
38
Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com +os armetros tienen valide! durante la ejecucin de la (uncin, es decir, tienen un mbito local a la (uncin donde se estn recibiendo. -uando la (uncin se termina, los armetros dejan de existir. Los parmetros se pasan por valor $l aso de armetros en PHP se reali!a or valor. =Por valor= es una manera t& ica de asar armetros en (unciones, quiere decir que el cambio de un dato de un armetro no actuali!a el dato de la variable que se as a la (uncin. Por ejem lo, cuando invocamos una (uncin asando una variable como armetro, a esar de que cambiemos el valor del armetro dentro de la (uncin, la variable original no se ve a(ectada or ese cambio. Puede que se vea mejor con un ejem lo1
f"nction por*alor (2para%etroJ)K 2para%etroJ?"hola"; echo "<-r>" . 2para%etroJ; //i%pri%e "hola" O 2%i*aria-le ? "esto no ca%-ia"; por*alor (2%i*aria-le); echo "<-r>" . 2%i*aria-le; //i%pri%e "esto no ca%-ia"
$sta gina tendr como resultado1 #ola esto no cambia Paso de parmetros por re$erencia $n contra osicin al aso de armetros or valor, est el aso de armetros or re(erencia. $n este :ltimo caso, el cambio del valor de un armetro dentro de una (uncin s& a(ecta al valor de la variable original. Podemos asar los armetros or re(erencia si, en la declaracin de la (uncin, colocamos un =Y= antes del armetro.
<? f"nction porreferencia(H2cadena) K 2cadena ? 1Si ca%-ia1; O 2str ? 13sto es "na cadena1; porreferencia (2str); echo 2str; // )%pri%e 1Si ca%-ia1 ?>
$ste scri t mostrar or antalla `0i cambia`. Parmetros por de$ecto Podemos de(inir valores or de(ecto ara los armetros. +os valores or de(ecto sirven ara que los armetros contengan un dato rede(inido, con el que se iniciali!arn si no se le asa ning:n valor en la llamada de la (uncin. +os valores or de(ecto se de(inen asignando un dato al armetro al declararlo en la (uncin.
f"nction pordefecto (2para%etroJ?"pepe";2para%etro'?E)
Para la de(inicin de (uncin anterior, X arametro1 tiene como valor or de(ecto = e e=, mientras que X arametroL tiene 2 como valor or de(ecto. 0i llamamos a la (uncin sin indicar valores a los armetros, estos tomarn los valores asignados or de(ecto1
pordefecto () // 2para%etroJ *ale "pepe" y 2para%etro' *ale E
39
Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com 0i llamamos a la (uncin indicando un valor, este ser tenido en cuenta ara el rimer armetro.
pordefecto ("hola") // 2para%etroJ *ale "hola" y 2para%etro' *ale E
/tencin, estamos obligados a declarar todos los armetros con valores or de(ecto al (inal.
Artculo por
0i se #an entendido bien los conce tos, este ejem lo no uede resultar di(&cil. +a (uncin recibe un armetro llamado X orcentaje con 14 como valor or de(ecto. ?evuelve el orcentaje dado a licado a la base tambi,n indicada or armetro. /s& ues, en la rimera ejecucin de la (uncin, como no se indica el orcentaje, se mostrar el 14T de 1FFF. $n la segunda, se muestra el BT de mil % en la tercera, el FT de 1F. Puede verse el resultado en una gina a arte. #tt 1AAwww.desarrolloweb.comAarticulosAejem losA # AejNiva. # &etornar m9ltiples valores 5na (uncin devuelve un :nico valor. 0i queremos #acer que se uedan devolver varios valores distintos tenemos que recurrir a un truco que consiste en devolver un arra%.
40
f"nction s%all$n"%-ers() K ret"rn array (S= J= '); O list (2Mero= 2one= 2t0o) ? s%all$n"%-ers();
list89 se usa ara asignar una lista de variables en una sola o eracin. ?es u,s de esa o eracin, X!ero valdr F, Xone valdr 1 % Xtwo valdr L.
Artculo por
Parte $:
41
J; ';
A; G;
+legados a este unto, el rograma veri(icar el cum limiento o no de la condicin. 0i la condicin es cierta las instrucciones 1 % L sern ejecutadas. ?e lo contrario 8else9, las instrucciones / % G sern llevadas a cabo. $sta estructura de base uede com licarse un oco ms si tenemos cuenta que no necesariamente todo es blanco o negro % que muc#as osibilidades ueden darse. $s or ello que otras condiciones ueden lantearse dentro de la condicin rinci al. Hablamos or lo tanto de condiciones anidadas que tendr&an una estructura del siguiente ti o1
if (condiciLnJ) K )nstr"cciLn J; )nstr"cciLn '; ... O else K if (condiciLn') K )nstr"cciLn A; )nstr"cciLn G; ... O else K )nstr"cciLn Y ... O O
?e este modo odr&amos introducir tantas condiciones como queramos dentro de una condicin rinci al. ?e gran a%uda es la instruccin elseif que ermite en una sola l&nea introducir una condicin adicional. $ste ti o de instruccin sim i(ica ligeramente la sintaxis que acabamos de ver1
if (condiciLnJ) K )nstr"cciLn J; )nstr"cciLn '; ... O elseif (condiciLn') K )nstr"cciLn A; )nstr"cciLn G; ... O else K )nstr"cciLn Y ... O
$l uso de esta #erramienta resultar claro con un oco de rctica. Pongamos un ejem lo sencillo de utili!acin de condiciones. $l siguiente rograma ermitir&a detectar la lengua em leada or el navegador % visuali!ar un mensaje en dic#a lengua.
</T! > </3A(>
42
*+ecutar script Para oder ver el (uncionamiento de este scri t es necesario cambiar el idioma re(erido lo cual uede ser reali!ado a artir del men: de o ciones del navegador. Para leer la lengua ace tada or el navegador lo que #acemos es de(inir una variable 8 $idioma9 %, mediante la (uncin substr, recogemos las dos rimeras letras del cdigo corres ondiente al idioma ace tado or el navegador 8XH))PN/--$P)N+/N.5/.$9. +a tercera arte de scri t se encarga de ver si el navegador est en es a'ol 8es9, (ranc,s 8(r9 o en cualquier otro idioma que no sea ninguno de estos dos % de im rimir el mensaje que roceda en cada caso. / notar que, cuando se trata de com arar variables, onemos un doble igual =RR= en lugar de un sim le =R=. $ste :ltimo queda reservado exclusivamente ara asignar valores a variables
&e$erencia: Hemos ublicado un v&deo ara mostrar la creacin % el (uncionamiento de las estructuras "@1 $structuras de control, M&deo 11 condicional i(
Artculo por
Rubn Alvarez
43
5n ejem lo sencillo es este bucle que aumenta el tama'o de la (uente en una unidad a cada nueva vuelta or el bucle1
<? 2siMe?J; Uhile (2siMe<?W) K echo"<font siMe?2siMe>Ta%aQo 2siMe</font><-r>n"; 2siMeFF; O ?>
*+ecutar script / modo de ex licacin, diremos que, antes de nada, #emos de de(inir el valor de la variable que vamos a evaluar en la condicin. /lgo absolutamente obvio ero (cil de olvidar. $n este caso le #emos atribuido un valor de 1 que corres onde a la letra ms eque'a. $l aso siguiente es crear el bucle en el que im onemos la condicin que la variable no exceda el valor de 4. +a instruccin a ejecutar ser im rimir en nuestro documento un cdigo H)*+ en el que la etiqueta font % el mensaje que contiene var&an a medida que $size cambia su valor. $l siguiente aso es incrementar en una unidad el valor de Xsi!e. $sto se uede #acer con una ex resin como la mostrada en el bucle 8Xsi!ePP9 que en realidad es sinnima de1 Xsi!eRXsi!eP1 Meremos otras de estas abreviaciones ms adelante.
$n este ejem lo se de(ine una cadena con el valor =#ola a todo el mundo=. Posteriormente se recorre esa cadena #asta el (inal de la cadena o #asta encontrar el caracter =m=, utili!ando una variable Xi que lleva la cuenta de los caracteres recorridos. /l (inal del bucle w#ile, si se sali orque se encontr el caracter =m=, la variable Xi valdr un n:mero menor que la longitud
44
Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com de la cadema. 0i se sali or llegar al (inal de la cadena, la variable Xi valdr lo mismo que la longitud en caracteres de esa cadena. $n el condicional sim lemente se com rueba si Xi vale o no lo mismo que la longitud de la cadena, mostrando los mensajes adecuados en cada caso. Podemos ver el ejem lo en (uncionamiento.
O 0hile (condiciLn)
+a di(erencia con res ecto a los bucles while es que este ti o de bucle eval:a la condicin al (inal con lo que, incluso siendo (alsa desde el rinci io, ,ste se ejecuta al menos una ve!.
&e$erencia: Para una a%uda rctica sobre estos bucles ver el siguiente videotutorial $structuras de control, M&deo L1 bucles (or, w#ile % doD w#ile. /dems, las ex licaciones sobre estructuras de control se com lementan con el videotutorial de 0witc# % las instrucciones breaK % continue.
Artculo por
Rubn Alvarez
*+ecutar script +as ex resiones dentro del ar,ntesis de(inen res ectivamente1 D"niciali!acin de la variable. Malida ara la rimera vuelta del bucle. D-ondicin de evaluacin a cada vuelta. 0i es cierta, el bucle continua.
45
Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com D/ccin a reali!ar al (inal de cada vuelta de bucle.
5n ejem lo rctico es la lectura de un arra% lo cual odr&a #acerse del siguiente modo1
<? 2%oneda?array("3spaQa"?> ".eseta"="Prancia" ?> "Pranco"="7SA" ?> "(olar"); Poreach (2%oneda as 2cla*e?>2*alor) K echo ".ais: 2cla*e !oneda: 2*alor<-r>"; O ?>
*+ecutar script $ste scri t se encargar&a de mostrarnos or antalla el contenido del arra% $moneda. No resultar&a mala idea crear una (uncin ro ia basada en este bucle que nos ermitiese visuali!ar arra%s monodimensionales % almacenarla en nuestra librer&a. $sta (uncin odr&a ser de(inida de esta (orma1
P"nction %ostrar$array (2array) K Poreach (2array as 2cla*e?>2*alor) Kecho "2cla*e?>2*alor<-r>";O O
Artculo por
Rubn Alvarez
46
Parte &:
Pod,is observar que estas variables no oseen el s&mbolo X delante. $sto es debido a que en realidad este modo de asar variables no es es ec&(ico de PHP sino que es utili!ado or otros lenguajes. /#ora nuestra variable ertenece tambi,n al entorno de la gina destino.php % est lista ara su ex lotacin.
)ota: No siem re se de(inen automticamente las variables recibidas or armetro en las ginas web, de ende de una variable de con(iguracin de PHP1 registerNglobals, que tiene que estar activada ara que as& sea. Mer comentarios del art&culo al (inal de la gina ara ms in(ormacin.
47
Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com Para aclarar osibles dudas, veamos esto en (orma de ejem lo. )endremos ues dos ginas, origen.html 8no es necesario darle extensin PHP uesto que no #a% ning:n ti o de cdigo9 % destino.php1
</T! > </3A(> <T)T 3>ori+en.ht%l</T)T 3> <//3A(> <GN(<> <a href?"destino.php?sal"do?holaHtexto?3sto es "na *aria-le texto">.aso *aria-les sal"do y texto a la pV+ina destino.php</a> </GN(<> <//T! > </T! > </3A(> <T)T 3>destino.php</T)T 3> <//3A(> <GN(<> <? echo "5aria-le 2sal"do: 2sal"do <-r>n"; echo "5aria-le 2texto: 2texto <-r>n" ?> </GN(<> <//T! >
*+ecutar e+emplo
O.1.$. D#(("PG2(PAAR9
>ecordamos que es osible reco ilar en una variable ti o arra% el conjunto de variables que #an sido enviadas al scri t or este m,todo a artir de la variable de sistema XH))PN.$)NM/>0, que es un arra% asociativo. 5tili!ndolo quedar&a as&1
<? echo "5aria-le 2sal"do: 2/TT.$83T$5A4S6"sal"do": <-r>n"; echo "5aria-le 2texto: 2/TT.$83T$5A4S6"texto": <-r>n" ?> )ota: /unque odamos recoger variables con este arra% asociativo o utili!ar directamente las variables que se de(inen en nuestra gina, resulta ms seguro utili!ar XH))PN.$)NM/>0 or dos ra!ones, la rimera que as& nos aseguramos que esa varible viene realmente de la 5>+ % la segunda, que as& nuestro cdigo ser ms claro cuando lo volvamos a leer, orque quedar es eci(icado que esa variable estamos recibi,ndola or la 5>+.
O.1.'. DPG2(
/ artir de la versin 4.1.F de PHP se #a introducido el arra% asociativo XN.$), que es id,ntico a XH))PN.$)NM/>0, aunque un oco ms corto de escribir.
48
Artculo por
Rubn Alvarez
*+ecutar e+emplo
O.$.1. D#(("P"B9(PAAR9
>ecordamos que es osible reco ilar en una variable ti o arra% el conjunto de variables que #an sido enviadas al scri t or este m,todo a artir de la variable de sistema XH))PNP;0)NM/>0.
echo "5aria-le 2no%-re: " . 2/TT.$.NST$5A4S6"no%-re": . "<-r>n"; )ota: /unque odamos recoger variables con este arra% asociativo o utili!ar directamente las variables que se de(inen en nuestra gina, resulta ms seguro utili!ar XH))PNP;0)NM/>0 or dos ra!ones, la rimera que as& nos aseguramos que esa varible viene realmente de un (ormulario % la segunda, que as& nuestro cdigo ser ms claro cuando lo volvamos a leer, orque quedar es eci(icado que esa variable estamos recibi,ndola or un (ormulario.
49
O.$.$. DP"B9(
/ artir de PHP 4.1.F se ueden recoger las variables de (ormulario utili!ando tambi,n el arra% asociativo XNP;0), que es el mismo que XH))PNP;0)NM/>0, ero ms corto de escribir.
$sta es una gina sin ning:n cdigo PHP, sim lemente tiene un (ormulario. @ij,monos en el action del (ormulario, que est dirigido #acia una gina llamada edadL. # , que es la que recibir el dato de la edad % mostrar un contenido u otro de endiendo de ese valor. 0u cdigo es el siguiente1
<ht%l> <head> <title>4estrin+ir por edad</title> </head> <-ody> <? 2edad ? 2$.NST6"edad":; echo "T" edad: 2edad<p>"; if (2edad < J[) K echo "9o p"edes entrar"; OelseK echo "Gien*enido"; O ?> </-ody> </ht%l>
$s eramos que este otro cdigo tam oco resulte extra'o. 0im lemente se recibe la edad, utili!ando el arra% XNP;0). +uego se muestra la edad % se ejecuta una ex resin condicional en (uncin de que la edad sea menor que 1E. $n caso ositivo 8edad menor que 1E9, se muestra un mensaje que in(orma de que no se deja acceder al gina. $n caso negativo 8ma%or o igual a 1E9 se muestra un mensaje de bienvenida. Podemos ver el ejem lo en (uncionamiento.
Artculo por
Rubn Alvarez
50
$n el ejem lo, el rimer aso es conocer si se estn recibiendo o no datos or un (ormulario. Para ello se com rueba con un
51
Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com enunciado i( si existe o no una variable XNP;0). $n concreto i( 8OXNP;0)9 querr&a decir algo como =0i no existen datos venidos de un (ormulario=. $n caso de que no existan, muestro el (ormulario. $n caso de que s& existan, recojo los datos % los im rimo en la gina. 0e uede ver el ejem lo en (uncionamiento en una gina a arte. Para paso de variables por 3&L +a idea es la misma. -om robar con un enunciado i( si se reciben o no datos desde una 5>+. Meamos el cdigo a continuacin. 0e trata de una gina que muestra una serie de enlaces ara ver las tablas de multi licar de el 1 #asta el 1F. -ada uno de los enlaces muestra una tabla de multi licar. Pulsando el rimer enlace odemos ver la tabla del 1, ulsando el segundo la tabla del L, etc. >ecordemos que la gina se llama a si misma. Para com renderla ms (cilmente ser interesante verla en (uncionamiento.
<ht%l> <head> </head> <title>Ta-las de %"ltiplicar</title>
<-ody> <? if (;2$83T)K for (2i?J;2i<?JS;2iFF)K echo "<-r><a href?1*er$ta-la.php?ta-la?2i1>5er la ta-la del 2i</a>\n"; O O else K 2ta-la?2$83T6"ta-la":; ?> <ta-le ali+n?center -order?J cellpaddin+?"J"> <? for (2i?S;2i<?JS;2iFF)K echo "<tr><td>2ta-la Y 2i</td><td>?</td><td>" . 2ta-la C 2i . "</td></tr>\n"; O ?> </ta-le> <? O ?> </-ody> </ht%l>
$ste cdigo es un oco ms com licado, orque #ace un oco ms de cosas que el anterior, ero ara el asunto que nos ocu a que es la autollamada de ginas, todo sigue igual de sim le. Ha% que (ijarse en el i( que com rueba si se reciben o no datos or 5>+1 i( 8OXN.$)9, que querr&a decir algo como =0i no se reciben variables or la 5>+=. $n caso ositivo 8no se reciben datos or 5>+9 se muestran los enlaces ara ver cada una de las tablas % en caso de que s& se reciban datos, se muestra la tabla de multi licar del n:mero que se est recibiendo en la 5>+. Para #acer ara mostrar los enlaces % las tablas de multi licar se utili!an bucles (or, que es eramos que no resulten desconocidos ara el lector. Puede conocerse algo ms sobre los bucles (or en -ontrol del (lujo en PHP1 Gucles "".
Artculo por
52
Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com su empleo ! utilidad. 0in duda este t,rmino resultara (amiliar ara muc#os. /lgunos lo #abrn le&do u o&do ero no saben de qu, se trata. ;tros sin embargo sabrn que las cooKies son unas in(ormaciones almacenadas or un sitio web en el disco duro del usuario. $sta in(ormacin es almacenada en un arc#ivo ti o texto que se guarda cuando el navegador accede al sitio web.
&e$erencia:5na ex licacin de las cooKies ms detallada se uede encontrar en el art&culo <u, son las cooKies, ublicado en ?esarrollo7eb.com.
$s osible, or su uesto, ver estos arc#ivos. Para abrirlos #a% que ir al directorio -17indows-ooKies ara los usuarios de "$ 4P o a -1...Netsca e5sersde(aultuser ara usuarios de Netsca e. -omo odr,is com robar, en la ma%or&a de los casos la in(ormacin que se uede obtener es indesci(rable. +a utilidad rinci al de las cooKies es la de oder identi(icar al navegador una ve! ,ste visita el sitio or segunda ve! % as&, en (uncin del er(il del cliente dado en su rimera visita, el sitio uede ada tarse dinmicamente a sus re(erencias 8lengua utili!ada, colores de antalla, (ormularios rellenados total o arcialmente, redireccin a determinadas ginas...9. Para crear coo:ies con P P, modi(icar o generar una nueva cooKie lo odemos #acer a artir de la (uncin 0et-ooKie1
setcoo,ie("no%-re$de$la$coo,ie"=*alor=expiracion);
Pongamos un ejem lo sencillo. "maginemos que queremos introducir en una variable cooKie el nombre del visitante. $l nombre #a odido ser reviamente recogido or un (ormulario tal % como #emos visto1
setcoo,ie("persona"=2no%-re=ti%e()F[W#SSCEWD);
?e este modo #emos creado una cooKie # llamada ersona que tiene como valor el contenido de la variable Xnombre % tendr una duracin de 1 a'o a artir de su creacin 8el tiem o time89 actual en segundos sumado a un a'o en segundos9. $s im ortante que la creacin de la cooKie sea revia a la a ertura del documento H)*+. $n otras alabras, las llamadas a la (uncin setcooKie89 deben ser colocadas antes de la etiqueta H)*+. Por otra arte, es interesante se'alar que el #ec#o de que de(inir una cooKie %a existente im lica el borrado de la antigua. ?el mismo modo, el crear una rimera cooKie conlleva la generacin automtica del arc#ivo texto. Para utili!ar el valor de la cooKie en nuestros scri ts tan slo tendremos que llamar la variable que de(ine la cooKie. b>ealmente sencilloO Ha% que tener cuidado sin embargo de no de(inir variables en nuestro scri t con el mismo nombre que las cooKies uesto que PHP rivilegiar el contenido de la variable local con res ecto a la cooKie % no dar un mensaje de error. $sto nos uede conducir a errores realmente di(&ciles de detectar. >ecordamos que es osible reco ilar en una variable ti o arra% el conjunto de cooKies almacenadas en el disco duro del internauta mediante la variable de servidor XH))PN-;;^"$NM/>0 +as cooKies son una #erramienta (antstica ara ersonali!ar nuestra gina ero #a% que ser cautos %a que, or una arte, no todos los navegadores las ace tan % or otra, se uede deliberadamente im edir al navegador la creacin de cooKies. $s or ello que resultan un com lemento % no una (uente de variables in(alible ara nuestro sitio. -omo #as odido ver, las 0oo:ies son muy sencillas de utilizar en P P. Puedes ro(undi!ar ms en la creacin de cooKies en el siguiente articulo1 -ooKies en PHP.
Artculo por
Rubn Alvarez
53
Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com $n este art&culo del *anual de PHP vamos a demostraros que las coo:ies en P P son mu% (ciles de utili!ar. Ia em e!amos a ex licar algunas claves interesantes sobre este asunto en el art&culo utilizaci#n de coo:ies, anterior entrega del temario de ?esarrollo7eb.com sobre la rogramacin en PHP. $n el resente art&culo vamos a mostrar otros detalles que conviene saber ara trabajar con las cooKies. )anto los rocesos de creacin como los de lectura, ero sobre todo vamos a reali!ar un estudio com leto sobre los di(erentes armetros que tenemos dis onibles a la #ora de llamar a la (uncin setcooKie89, que sirve ara dar de alta las galletitas en el navegador del usuario que visita nuestra web.
Pero atencin en un asunto1 Para enviar una cooKie al navegador se debe #acer antes de #aber enviado las cabeceras del #tt al cliente, es decir, antes de #aber escrito cualquier texto en la gina. 0i no, PHP odr lan!ar un error de #eaders alread% sent 8cabeceras %a enviadas9.
54
Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com &ecuperar coo:ies con P P Por otra arte, ara recibir las cooKies que el navegador del usuario ueda tener creadas en el sistema se utili!a el arra% asociativo XN-;;^"$. $n este arra% estn todas las cooKies que tiene dis onible la gina PHP en el dominio % el directorio donde est colocado. Por medio del nombre de la cooKie accedemos a su valor1
2$&NN])36"%i+alleta":; 2$&NN])36"coo,ie'":;
Para ver un ejem lo de uso de coo:ies P P acceder al taller de PHP $stilos -00 distintos a una gina con PHP % cooKies.
Artculo por
O.?. 9esiones !
@os introducimos al concepto de sesin ! aprendemos su manejo ! funcionamiento. $n los rogramas que #emos visto #asta a#ora, #emos utili!ado variables que slo exist&an en el arc#ivo que era ejecutado. -uando cargbamos otra gina distinta, los valores de estas variables se erd&an a menos que nos tomsemos la molestia de asarlos or la 5>+ o inscribirlos en las cooKies o en un (ormulario ara su osterior ex lotacin. $stos m,todos, aunque :tiles, no son todo lo rcticos que odr&an en determinados casos en los que la variable que queremos conservar #a de ser utili!ada en varios scri ts di(erentes % distantes los unos de los otros. Podr&amos ensar que ese roblema uede quedar resuelto con las cooKies %a que se trata de variables que ueden ser invocadas en cualquier momento. $l roblema, %a lo #emos dic#o, es que las cooKies no son ace tadas ni or la totalidad de los usuarios ni or la totalidad de los navegadores lo cual im lica que una a licacin que se sirviera de las cooKies ara asar variables de un arc#ivo a otro no ser&a 1FFT in(alible. $s im ortante a veces ensar en =la inmensa minor&a=, sobre todo en a licaciones de comercio electrnico donde debemos ca tar la ma%or cantidad de clientes osibles % nuestros scri ts deben estar re arados ante cualquier eventual de(iciencia del navegador del cliente. Nos resulta ues necesario el oder declarar ciertas variables que uedan ser reutili!adas tantas veces como queramos dentro de una misma sesin. "maginemos un sitio multilingce en el que cada ve! que queremos im rimir un mensaje en cualquier gina necesitamos saber en qu, idioma debe #acerse. Podr&amos introducir un scri t identi(icador de la lengua del navegador en cada uno de los arc#ivos o bien declarar una variable que (uese valida ara toda la sesin % que tuviese como valor el idioma reconocido en un rimer momento. Pensemos tambi,n en un carrito de la com ra de una tienda virtual donde el cliente va navegando or las ginas del sitio % a'adiendo los art&culos que quiere com rar a un carrito. $ste carrito odr&a ser er(ectamente una variable de ti o arra% 8tabla9 que almacena ara cada re(erencia la cantidad de art&culos contenidos en el carrito. $sta variable deber&a ser obviamente conservada continuamente a lo largo de todos los scri ts. $ste ti o de situaciones son solventadas a artir de las variables de sesin. 5na sesin es considerada como el intervalo de tiem o em leado or un usuario en recorrer nuestras ginas #asta que abandona nuestro sitio o deja de actuar sobre ,l durante un tiem o rolongado o bien, sencillamente, cierra el navegador. PHP nos ermite almacenar variables llamadas de sesin que, una ve! de(inidas, odrn ser utili!adas durante este la so de tiem o or cualquiera de los scri ts de nuestro sitio. $stas variables sern es eci(icas del usuario de modo que varias variables sesin del mismo ti o con distintos valores ueden estar coexistiendo ara cada una de las sesiones que estn teniendo lugar simultneamente. $stas sesiones tienen adems su ro io identi(icador de sesin que ser :nico % es ec&(ico. /lgunas mejoras re(erentes al em leo de sesiones #an sido introducidas con PHP4. $s a esta nueva versin a la que #aremos re(erencia a la #ora de ex licar las (unciones dis onibles % la (orma de o erar. Para los rogramadores de PHP2 la di(erencia ma%or es que estn obligados a gestionar ellos mismos las sesiones de(inir sus ro ios identi(icadores de sesin.
55
Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com Meamos en el siguiente ca &tulo la (orma de lasmar esta necesidad t,cnica en nuestros scri ts a artir de las (unciones que gestionan las sesiones en PHP.
Artculo por
Rubn Alvarez
5na ve! iniciali!ada la sesin con sessionNstart89 odemos a artir de a#ora utili!ar variables de sesin, es decir, almacenar datos ara ese usuario, que se conserven durante toda su visita o recu erar datos almacenados en ginas que #a%a odido visitar. +a sesin se tiene que iniciali!ar antes de escribir cualquier texto en la gina. $sto es im ortante % de no #acerlo as& corremos el riesgo de recibir un error, orque al iniciar la sesin se deben leer las cooKies del usuario, algo que no se uede #acer si %a se #an enviado las cabeceras del H))P.
)ota: si se intenta abrir una sesin des u,s de #aber enviado texto de la gina al cliente se obtendr el siguiente mensaje1 7arning1 sessionNstart891 -annot send session cac#e limiter D #eaders alread% sent 8out ut started at d9
5na ve! iniciada la sesin odemos utili!ar variables de sesin a trav,s de XN0$00";N, que es un arra% asociativo, donde se accede a cada variable a artir de su nombre, de este modo1
56
$xisten otras dos con(iguraciones del # .ini que a(ectan al trabajo con variables de sesin, que son tracKNvars % registerNglobals. Por de(ecto tracKNvars est activado % registerNglobals est desactivado. $ste es el caso normal % el que su onemos tendr el servidor donde rogrames, ero si esas variables cambian odr&a cambiar alguna cosita, como que las variables se tengan que registrar ex l&citamente con sessionNregister89. $jem lo de cdigo ara de(inir una variable de sesin1
<? session$start(); ?> <ht%l> <head> <title>8enerar *aria-le de sesiLn</title> </head> <-ody> <? 2$S3SS)N96"%i*aria-ledesesion": ? "/ola este es el *alor de la *aria-le de sesiLn"; ?> </-ody> </ht%l>
-omo se uede ver, es im ortante iniciali!ar la sesin antes de #acer otra cosa en la gina. +uego odremos de(inir variables de sesin en culquier lugar del cdigo PHP de la gina. Para leer una variable de sesin se #ace a trav,s del mismo arra% asociativo XN0$00";N. $s tan sencillo como #ar&amos ara utili!ar cualquier otra variable, lo :nico es que tenemos que #aber iniciali!ado la sesin reviamente. I or su uesto, que la variable que deseamos acceder exista reviamente.
<? session$start(); ?> <ht%l> <head> <title> eo *aria-le se sesiLn</title> </head> <-ody> !"estro esa *aria-le: <? echo 2$S3SS)N96"%i*aria-ledesesion":; ?> </-ody> </ht%l>
-omo se uede ver, al inicio del cdigo #emos iniciali!ado la sesin % luego en cualquier arte del cdigo odr&amos acceder a las variables de sesin que tuvi,semos creadas.
)ota: si intentamos acceder a una variable de sesin con XN0$00";N que no #a sido creada obtendremos otro mensaje de error1 Notice1 5nde(ined index1 mivariabledesesion, que es el mismo que si intentamos acceder a cualquier elemento de un arra% que no existe.
Ms sobre sesiones en P P +a siguiente in(ormacin sobre sesiones de PHP tambi,n uede ser de :til lectura. No obstante lo ex resado #asta aqu& es una in(ormacin muc#o ms actuali!ada. $n las rximas l&neas se ex lican mecanismos ara sesiones ero todos los que se comentan, aunque son vlidos, no son actuales or tratarse de ex licaciones ara versiones de PHP ms antiguas. Hemos dic#o en el ca &tulo anterior que la variables de sesin se di(erencian de las variables clsicas en que ,stas residen en el servidor, son es eci(icas de un solo usuario de(inido or un identi(icador % ueden ser utili!adas en la globalidad de nuestras ginas.
57
Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com Para iniciar una sesin odemos #acerlo de dos (ormas distintas1 D?eclaramos abiertamente la a ertura de sesin or medio de la (uncin session_start !. $sta (uncin crea una nueva sesin ara un nuevo visitante o bien recu era la que est siendo llevada a cabo. D?eclaramos una variable de sesin or medio de la (uncin session_register "#ariable"!. $sta (uncin, adems de crear o recu erar la sesin ara la gina en la que se inclu%e tambi,n sirve ara introducir una nueva variable de ti o sesin. +as sesiones #an de ser iniciadas al rinci io de nuestro scri t. /ntes de abrir cualquier etiqueta o de im rimir cualquier cosa. $n caso contrario recibiremos un error. -on lo visto, vamos a ro oner el ejem lo clsico de utili!acin de una sesin1 un contador. $ste contador deber aumentar de una unidad cada ve! que recargamos la gina o a retamos al enlace1
<? session$re+ister(1contador1); ?> </T! > </3A(> <T)T 3>contador.php</T)T 3> <//3A(> <GN(<> <? )f (isset(2contador)??S) K2contador?S;O FF2contador; echo "<a href?"contador.php">/as recar+ado esta pV+ina 2contador *eces</a>"; ?> </GN(<> <//T! >
*+ecutar script +a condicin if tiene en cuenta la osibilidad de que la variable $contador no #a%a sido todav&a iniciali!ada. +a (uncin isset se encarga de dar un valor cero cuando una variable no #a sido iniciali!ada. ;tras (unciones :tiles ara la gestin de sesiones son1
Descripcin &os de*uel*e el identi"icador de la sesi'n Da por abandonada la sesi'n eliminando *ariables e identi"icador. 4bandona una *ariable sesi'n
Para a render ms sobre las sesiones, concretamente ara ver una a licacin que gestiona un carrito de com ra or medio de variables sesin visita nuestro articulo del taller de P P. 0i buscas ms (unciones o in(ormacin adicional sobre las sesiones, consulta el manual o$icial de P P.
Artculo por
Rubn Alvarez
58
Parte *:
59
Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com /#ora %a dis onemos de nuestra tabla vac&a. 0lo queda comen!ar a llenarla con los datos que iremos insertando. $l conjunto de scri ts utili!ados ara el bloque de bases de datos uede ser descargado a!u. /dems contamos con un videotutorial sobre las bases de datos en PHP que te a%udar a entenderlo todo mejor.
Artculo por
Rubn Alvarez
+legados a la gina destino del (ormulario 8insertar.php9, lo rimero que #abr que #acer es establecer un v&nculo entre el rograma % la base de datos. $sta conexin se lleva a cabo con la (uncin mysql_connect. / continuacin, deberemos generar una orden de insercin del registro en lenguaje 0<+. $sta orden ser ejecutada or medio de la (uncin mysql_db_query. $n esta (uncin es eci(icaremos rimeramente la base de datos sobre la que queremos actuar % a continuacin introduciremos la sentencia 0<+1
</T! > </3A(> <T)T 3>)nsertar.php</T)T 3> <//3A(> <GN(<> <? //&onexion con la -ase %ysTl$connect("localhost"="t"$"ser"="t"$pass0ord"); //selecciLn de la -ase de datos con la T"e *a%os a tra-a@ar %ysTl$select$d-("%i$-ase$datos"); //3@ec"cion de la sentencia S^ %ysTl$T"ery("insert into clientes (no%-re=telefono) *al"es (12no%-re1=12telefono1)"); ?> <hJ><di* ali+n?"center">4e+istro )nsertado</di*></hJ> <di* ali+n?"center"><a href?"lect"ra.php">5is"aliMar el contenido de la -ase</a></di*> </GN(<>
60
*+ecutar e+emplo +os arametros user % assword son de(inidos or el creador de la base. $s conveniente en un rinci io, al crear nuestras bases, trabajar sin ellos con lo cual dejaremos las cadenas corres ondientes vacias1 ==. /dems de la ro ia insercin, el rograma avisa de la introduccin del registro % o(rece un enlace #acia una gina de lectura la cual ser comentada a continuacin. No entraremos en la descri cin de la orden 0<+, ara com render ms acerca de cmo introducir registros, re(ererirse al tutorial de SQL.
Artculo por
Rubn Alvarez
61
*+ecutar script +os asos a reali!ar son, en un rinci io, los vistos ara la insercin de un registro1 -onexin a la base % ejecucin de la sentencia. $sta ve!, la in(ormacin de dic#a ejecucin ser almacenada en una variable 8 $result9. $l siguiente aso ser lasmar en antalla la in(ormacin recogida en Xresult. $sto lo #aremos mediante la (uncin mysql_fetch_array que devuelve una variable arra% con los contenidos de un registro a la ve! que se osiciona sobre el siguiente. $l bucle while nos ermite leer e im rimir secuencialmente cada uno de los registros. +a (uncin mysql_free_result se encarga de liberar la memoria utili!ada ara llevar a cabo la consulta. /unque no es necesaria su utili!acin, resulta altamente aconsejable.
Artculo por
Rubn Alvarez
62
+a manera de o erar ara construir el men: des legable es la misma que ara visuali!ar la tabla. ?e nuevo em leamos un bucle while en combinacin con la (uncin mysql_fetch_array lo que nos ermite mostrar cada una de las o ciones. $l scri t de actuali!acin ser mu% arecido al de insercin1
</T! > </3A(> <T)T 3>Act"aliMar'.php</T)T 3> <//3A(> <GN(<> <? //&onexion con la -ase %ysTl$connect("localhost"="t"$"ser"="t"$pass0ord"); //selecciLn de la -ase de datos con la T"e *a%os a tra-a@ar %ysTl$select$d-("%i$-ase$datos"); //&rea%os la sentencia S^ y la e@ec"ta%os 2sS^ ?"7pdate &lientes Set telefono?12telefono1 Uhere no%-re?12no%-re1"; %ysTl$T"ery(2sS^ ); ?> <hJ><di* ali+n?"center">4e+istro Act"aliMado</di*></hJ> <di* ali+n?"center"><a href?"lect"ra.php">5is"aliMar el contenido de la -ase</a></di*> </GN(<> <//T! >
*+ecutar e+emplo
Artculo por
Rubn Alvarez
63
echo 1<PN4! !3T/N(?".NST" A&T)N9?"-orrar'.php">9o%-re<-r>1; //&rea%os la sentencia S^ y la e@ec"ta%os 2sS^ ?"Select no%-re Pro% clientes Nrder Gy no%-re"; 2res"lt?%ysTl$T"ery(2sS^ ); echo 1<select na%e?"no%-re">1; //!ostra%os los re+istros en for%a de %en_ desple+a-le 0hile (2ro0?%ysTl$fetch$array(2res"lt)) Kecho 1<option>1.2ro06"no%-re":;O %ysTl$free$res"lt(2res"lt) ?> </select> <-r> <)9.7T T<.3?"S7G!)T" *al"e?"Gorrar"> </PN4!> </di*> </GN(<> <//T! >
$l siguiente aso es #acer e(ectiva la o eracin a artir de la ejecucin de la sentencia 0<+ que construimos a artir de los datos del (ormulario1
</T! > </3A(> <T)T 3>Gorrar'.php</T)T 3> <//3A(> <GN(<> <? //&onexion con la -ase %ysTl$connect("localhost"="t"$"ser"="t"$pass0ord"); //selecciLn de la -ase de datos con la T"e *a%os a tra-a@ar %ysTl$select$d-("%i$-ase$datos"); //&rea%os la sentencia S^ y la e@ec"ta%os 2sS^ ?"(elete Pro% &lientes Uhere no%-re?12no%-re1"; %ysTl$T"ery(2sS^ ); ?> <hJ><di* ali+n?"center">4e+istro Gorrado</di*></hJ> <di* ali+n?"center"><a href?"lect"ra.php">5is"aliMar el contenido de la -ase</a></di*> </GN(<> <//T! >
*+ecutar e+emplo -on este ca &tulo cerramos el bloque de accesos a bases de datos con PHP. Para mas in(ormacin relacionada od,is re(eriros al taller de P P donde odr,is encontrar alg:n que otro art&culo interesante al res ecto.
Artculo por
Rubn Alvarez
64
Parte ,:
/l conectarnos al servidor con los datos del @)P, que deben ser ro orcionados or nuestro roveedor, accederemos a un directorio. $ste directorio odr&a ser el de ublicacin, aunque generalmente no es as&, sino que suele ser un subdirectorio llamado =H)*+= o =docs= o algo similar, que cuelga del directorio de inicio en nuestra conexin @)P. -omo dec&a, este directorio uede tener nombres distintos en roveedores distintos, aunque, en cualquier caso, con una sim le regunta a nuestro roveedor resolveremos esa duda. +os arc#ivos se deben subir al directorio de ublicacin, o a cualquier subdirectorio de este. $n de(initiva, los tendremos que alojar or a#& dentro % ara acceder a ellos bastar&a con escribir el nombre del dominio o 5>+ de nuestro alojamiento,
65
Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com seguido del nombre del arc#ivo. 0i tuvi,semos un arc#ivo llamado #ola. # % nuestro alojamiento se #a contratado ara el dominio www.midominio.com, deber&amos subir ese arc#ivo al directorio de ublicacin % acceder&amos al arc#ivo escribiendo1 #tt 1AAwww.midominio.comA#ola. # 0i creamos subdirectorios dentro del directorio de ublicacin odremos acceder a ellos escribiendo el nombre del dominio o 5>+ de nuestro alojamiento, seguido del nombre del directorio % el nombre del arc#ivo. Por ejem lo, si creamos un subdirectorio llamado aginas % tenemos dentro un arc#ivo llamado ag1. # , odr&amos acceder a ,l de la siguiente manera. #tt 1AAwww.midominio.comA aginasA ag1. #
&e$erencia:#a% otro conce to interesante que deber&amos conocer llegados a este unto, que es el =documento or de(ecto=. ]ste no es ms que el arc#ivo que se env&a al navegador si en la 5>+ accedida no se es eci(icaba ning:n arc#ivo. 0uele llamarse index.#tml o index. # 8o index.as si nuestro servidor so orta rogramacin en /0P9, aunque uede variar de un roveedor a otro. Hablamos ms sobre el documento or de(ecto en nuestro manual de Publicar en "nternet.
Artculo por
No ser&a osible salir del directorio de ublicacin con una 5>+ como esta, or muc#o que utilicemos el o erador .. 8que sirve ara acceder al directorio adre9. #tt 1AAwww.midominio.comA..A(uncionesN # Aarc#ivoNinalcan!able. # 0in embargo, colocar algunos contenidos (uera del directorio de ublicacin uede ser mu% :til. Por ejem lo, odr&amos colocar all& co ias de seguridad de algunos arc#ivos o documentos que sim lemente queremos guardar en el servidor ara acceder a ellos desde cualquier arte % con nuestro rograma de @)P. Ha% otra utilidad ms interesante sobre colocar arc#ivos (uera del directorio de ublicacin. 0e trata de que muc#as veces utili!amos en nuestros rogramas tro!os de cdigo re etidamente, or ejem lo, ara abrir % cerrar bases de datos, ara mostrar la cabecera de nuestro ortal, ara com robar que un email escrito en un (ormulario es correcto, etc. $s mu% :til se arar estos tro!os de cdigo en un arc#ivo a arte % llamar a este arc#ivo con las (unciones PHP include89 o require89. /s&, si un d&a modi(icamos la cabecera de nuestro ortal, slo lo tendremos que modi(icar en un arc#ivo, o, si cambia la base de datos que utili!amos slo tendr&amos que modi(icar el arc#ivo que #ace la conexin a la base de datos una ve!, en lugar de ir cambindolo en todas las ginas PHP que abr&an las bases de datos. $stos arc#ivos no son ginas inde endientes, sino tro!os. 0eguramente, si los ejecutamos or se arado no mostrar&an ning:n resultado vlido, incluso odr&an dar mensajes de error. Por esta ra!n merece la ena colocarlos en un lugar donde nadie ueda tener acceso1 (uera del directorio de ublicacin. -on PHP si que odremos acceder a ese directorio ara incluir esos arc#ivos. 0olamente deber&amos utili!ar las (unciones PHP include89 o require89 indicando la ruta ara acceder a los
66
Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com arc#ivos. $n el caso de que tengamos una gina llamada #ola. # en el directorio de ublicacin % un arc#ivo, que se llama abreNbaseNdatos. # , en el directorio (uncionesN # , que est (uera del directorio de ublicacin, si quisi,ramos acceder 8desde #ola. # 9 al arc#ivo que abre la base de datos lo #ar&amos as&.
incl"de("../f"nciones$php/a-re$-ase$datos.php")
?esde PHP s& que odemos acceder a los arc#ivos que se encuentran (uera del directorio de ublicacin. Para ello es eci(icamos la ruta adecuada, en la que utili!amos el o erador .. ara bajar al directorio adre. Nada ms que decir sobre la colocacin de los arc#ivos1 una ve! situados en el directorio de ublicacin se odr acceder a ellos con nuestro navegador % se deber&an ejecutar er(ectamente. /unque cabe se'alar que, tanto PHP como el servidor donde trabajemos, ueden tener con(iguraciones distintas % uede que alg:n detalle de la rogramacin de nuestras ginas no (uncione correctamente. Por ejem lo, nuestro PHP uede declarar o no automticamente las variables que llegan a trav,s de un (ormulario. 0i en local si que estaba con(igurado ara #acer esto % en remoto no, deber&amos locali!ar los lugares donde recogemos las variables % utili!ar las variables de entorno correctas 8mirar art&culo sobre Procesar variables de (ormularios % los comentarios al ie ara saber ms de esta osible (uente de errores9. /unque este no es un caso #abitual, odemos onernos en contacto con nuestro roveedor de alojamiento ara ver si ueden a%udarnos con(igurando el sistema o indicando los asos a seguir ara solventar en nuestros scri ts el asunto.
0omentario: el siguiente scri t calcula el nivel de directorio de los scri ts que queremos incluir en la gina actual. // /alla%os el ni*el de directorio en T"e estV "-icada la pV+ina J. Se hace "n rec"ento de los caracteres T"e contiene el no%-re del script act"al. 2&hars ? co"nt$chars(2./.$S3 P=J); '. 3xplora%os la ta-la de los caracteres de*"eltos -"scando el carVcter (1/1 &Ldi+o #X ) de directorio (carpeta) T"e de*"el*e Apache. foreach (2&hars as 2&har?>2n&hars)K if (2&har??#X) K2n?2n&hars;-rea,;O O E. 8enera%os "na cadena de n-J *eces con la s"-candena "../" T"e nos da el ni*el de directorio en T"e se enc"entra el script. if (2n??S) 2.athStrin+?""; else 2.athStrin+?str$pad(""=(2n-J)CE="../");
Artculo por
67
Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com $s mu% corriente que nuestro roveedor de #osting o(re!ca junto con PHP la base de datos *%0<+, as& que las notas ara subir esa base de datos al servidor de este art&culo van encaminadas a o(recer soluciones ara esa base de datos. +a base de datos *%0<+ no se uede subir or @)P, como que se #ac&a con los arc#ivos del cdigo PHP. Para subirla tendremos que utili!ar otros mecanismos. Mo% a distinguir entre tres casos distintos en los que nos odr&amos encontrar en este momento1 1. La base de datos !ue pretendemos subir est vaca. )an slo #emos creado las tablas, ero no #emos introducido datos en ellas o, a lo sumo, tienen alg:n dato que #emos introducido de ruebas. L. La base de datos !ue !ueremos subir est completa y es una base de datos MySQL . $n este caso tenemos creada la base de datos en local % con toda la in(ormacin dentro %, or su uesto, queremos que esa in(ormacin quede tambi,n en la base de datos remota. 2. +a base de datos est completa 8como el caso anterior9, ero no es una base de datos MySQL. $n este caso estar&amos #aciendo una migracin de la base de datos de un sistema gestor a otro. Meremos los tres casos or se arado en adelante, aunque, antes de ello, vamos a mostrar unas #erramientas que nos servirn de muc#a a%uda ara la administracin de cualquier base de datos remota. +as #erramientas en concreto se relatan en el manual )aller de *%0<+, son las siguientes1 P%pMyAdmin. 5na a licacin creada en PHP que odemos instalar en nuestro es acio de alojamiento ara administrar la base de datos. Mys!l 0ontrol 0enter 8en adelante *%--9. 5na a licacin 7indows que ermite contectarse a m:lti les bases de datos *%0<+, que se encuentren en local o en remoto. Access. )ambi,n ermite administrar una base de datos *%0<+ conectada en local o en remoto. $n este caso se utili!a una inter(a! que muc#os %a conocen, como es /ccess, ara administrar una base de datos que nada tiene que ver con dic#o rograma.
$n los tres casos lo que nos ermite reali!ar el so(tware de administracin son tareas sobre la base de datos de todo ti o, como ueden ser crear tablas, modi(icarlas, insertar datos, borrarlos, editarlos. *odi(icar o borrar tablas o cam os de las mismas, etc. +a eleccin de una #erramieta o de otra asa or los recursos que nos ermitan utili!ar en nuestro roveedor. Gsicamente, lo que nos uede decantar a una o cin u otra, es si ermiten o no conectar de manera remota la base de datos *%0<+. -ono!co alojamientos donde se ermite esa conexin remota % donde no. 0i no ermiten conectarnos remotamente nos decantaremos or P# *%/dmin, ues es una a licacin PHP que se conecta en local % a la que se accede desde una gina web % eso lo ermiten todos los roveedores, incluso #a% muc#os que tienen instalado %a este so(tware ara administrar las bases de datos. $n caso de que s& nos ermitan conectarnos remotamente con la base de datos, eligiremos *%-- o /ccess, que son a licaciones 7indows muc#o ms otentes % r idas que las que utili!an inter(a! web, como P# *%/dmin. $s re(erible utili!ar *%-- orque est es ecialmente desarrollado ara conectar % o erar con bases de datos *%0<+.
Artculo por
68
Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com ello tenemos dos osibilidades. a8 Si tenemos pocas tablas y bastante sencillas +as odemos crear en remoto con alguna #erramienta como P# *%/dmin o *%--. b8 Si tiene muc%as tablas y;o muy complicadas +a recomendacin ser&a #acer un bacKu de la estructura en local % restaurarla en remoto. $sto nos evitar tener que volver a crear todas las tablas % de(inir todos sus cam os % sus ti os. Puede ser un oco ms com licado ero sin duda nos a#orrar tiem o. Para #acer el bacKu de la estructura en local odemos utili!ar alguna #erramienta como P# *%/dmin, o bien utili!ar el comando m%sqldum desde l&nea de comandos de *0D?;0.
Herramienta de bacKu de P# *%/dmin. $st marcada la o cin de extraer solamente la estructura de las tablas. 0i marcamos adems la casilla =0end=, nuestro navegador se descargar el bacKu en un (ic#ero de texto. 0i no lo ulsamos sim lemente se visuali!ar.
+o que tenemos que #acer en este caso es un bacKu de la estructura de la base de datos, es decir, los =create tables= o sentencias 0<+ ara crear las tablas. 0er&a un montn de sentencias con esta (orma1
A -------------------------------------------------------A A Ta-le str"ct"re for ta-le 1co%entario1 A &43AT3 TAG 3 co%entario ( id$co%entario int(D) "nsi+ned 9NT 97 a"to$incre%ent= id$artic"lo int(#) (3PA7 T 1S1 9NT 97 = co%entario text 9NT 97 = fecha int(J#) "nsi+ned (3PA7 T 1S1 9NT 97 = re*isado tinyint(J) (3PA7 T 1S1 9NT 97 = no%-re$co%entario *archar(JSS) (3PA7 T 19o%-re no especificado1 9NT 97 = e%ail$co%entario *archar(JSS) (3PA7 T 13%ail sin especificar1 9NT 97 = tipo tinyint(J) "nsi+ned (3PA7 T 1J1 9NT 97 = .4)!A4< ]3< (id$co%entario) );
Para restaurar estas sentencias tenemos o ciones tanto dentro de P# *%/dmin como de *%--. $n ambos casos lo que tenemos que #acer es ejecutar estas sentencias en el servidor *%0<+ remoto. $n P# *%/dmin tenemos un cam o ara introducir sentencias 0<+ % tambi,n otro cam o ara seleccionar un arc#ivo de texto con todas las sentencias 0<+, ara ejecutarlas una detrs de otra. $n *%-- tenemos un botn que nos ermite abrir una consola donde introducir una o varias sentencias 0<+ % ejecutarlas. erramienta de bac:up y restauraci#n de P%pMyAdmin
69
>e etimos, esto slo nos servir ara subir la estructura de la base de datos % no los datos que contenga. 0i deseamos subir tambi,n la in(ormacin de la base de datos entonces debemos utili!ar otras estrategias, relatadas rximamente.
Artculo por
../. 9ubir una base de datos M39@L con la estructura 3 los datos
Como transferir una base de datos M!,-* que tenemos en local a nuestro servidor remoto, inclu!endo tanto la estructura de las tablas como sus datos. 0i la base de datos que deseamos subir est llena de in(ormacin % deseamos que se conserve una ve! subida la base de datos a remoto, tenemos que reali!ar un bacKu de la base de datos % restaurarlo en remoto.
)ota: $stas recomendaciones estn ensadas ara subir una base de datos *%0<+ que odamos tener en local a una base de datos *%0<+ que #a%amos contratado en remoto. 0i la base origen no es *%0<+ estar&amos #ablando de una migracin de bases de datos, ero esto lo veremos en un art&culo ms adelante.
$n este caso el rocedimiento ser&a mu% arecido al de subir una base de datos vac&a, relatado anteriormente, con la salvedad de que a#ora debemos extraer no solo la estructura de la base de datos, sino tambi,n los registros que contiene. Para ello odemos utili!ar m%sqldum , seg:n se relata en este art&culo, o bien P# *%/dmin, seleccionando la o cin que indica que el bacKu contenga la estructura % los datos 80tructure and data en versiones en ingl,s9. +a estructura % los datos vendrn en un (ic#ero de texto con una serie de sentencias 0<+ ara crear las tablas % los insert necesarios ara introducir cada uno de los datos.
70
Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com Para restaurar la base de datos lo #aremos tal como se #a relatado ara el caso de que la base de datos estuviera vac&a, con la a%uda de una instalacin de P# *%/dmin en remoto o un *%-- que se conecte a la base de datos contratada en el servidor de "nternet. 0i tenemos roblemas ara subir el (ic#ero de bacKu de la base de datos es osible que en nuestro roveedor de alojamiento nos ueda a%udar a subir el (ic#ero % restaurarlo. -omo el roveedor dis one de los servidores en sus ro ias instalaciones, tiene muc#as ms osibilidades que nosotros ara trabajar con las bases de datos, sin temor a que las lentas comunicaciones or "nternet arrojen errores en la restauracin de los datos. 0i nuestro roveedor no uede a%udarnos, seguramente dis onga % nos indique alg:n mecanismo ara reali!ar la tarea sin lugar a errores. Puede ocurrinos con alg:n roveedor que nos diga que se encarga de todo ero nos exija el ago de las #oras de trabajo del in(ormtico que va a restaurar el bacKu de la base de datos. 0i no one (acilidades ni siquiera en esto osiblemente sea mejor ir idi,ndoles que nos devuelvan el dinero invertido orque su servicio no ser&a mu% bueno.
Artculo por
71
/ccediendo a ese enlace odremos ver un (ormulario donde introducir las caracter&sticas del (ic#ero de texto, como el carcter utili!ado como se arador de cam os, o el terminador de l&neas, etc, junto con el ro io arc#ivo con los datos, % P# *%/dmin se encargar de todo el trabajo de incluir esos datos en la tabla.
-omo se #abr su uesto, es necesario tener creada la tabla en remoto ara que odamos introducirle los datos del (ic#ero de texto.
72
Parte 1-:
73
Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com objetos, %a que .N$) dis one de varios lenguajes ara rogramar % todos orientados a objetos. /s& ues, la rogramacin orientada a objetos es un tema de gran inter,s, ues es mu% utili!ada % cada ve! resulta ms esencial ara oder desarrollar en casi cualquier lenguaje moderno. $n este art&culo vamos ver algunas nociones sobre la rogramacin orientada a objetos en PHP. /unque es un tema bastante am lio, novedoso ara muc#os % en un rinci io, di(&cil de asimilar, vamos a tratar de ex licar la sintaxis bsica de PHP ara utili!ar objetos, sin meternos en muc#a teor&a de rogramacin orientada a objetos en general. >e(erencia1 0e uede acceder a una descri cin de la rogramacin orientada a objetos, ublicada en ?esarrollo7eb.com. #tt 1AAwww.desarrolloweb.comAarticulosA499. #
$n este ejem lo se #a creado la clase -aja, indicando como atributos el anc#o, alto % largo de la caja, as& como el color % el contenido. 0e #an creado, ara em e!ar, un ar de m,todos, uno ara introducir un elemento en la caja % otro ara mostrar el contenido. 0i nos (ijamos, los atributos se de(inen declarando unas variables al rinci io de la clase. +os m,todos se de(inen declarando (unciones dentro de la clase. +a variable Xt#is, utili!ada dentro de los m,todos la ex licaremos un oco ms abajo.
-on esto #emos creado, o mejor dic#o, instanciado, un objeto de la clase -aja llamado Xmicaja.
2%ica@a->introd"ce("al+o"); 2%ica@a->%"estra$contenido();
-on estas dos sentencias estamos introduciendo =algo= en la caja % luego estamos mostrando ese contendido en el texto de la gina. Nos (ijamos que los m,todos de un objeto se llaman utili!ando el cdigo =DU=.
no%-re$del$o-@eto->no%-re$de$%etodo()
74
Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com Para acceder a los atributos de una clase tambi,n se accede con el cdigo =DU=. ?e esta (orma1
no%-re$del$o-@eto->no%-re$del$atri-"to
$n este constructor recibimos or armetro todos los atributos que #a% que de(inir en una caja. $s mu% :til de(inir unos valores or de(ecto en los armetros que recibe el constructor, igualando el armetro a un valor dentro de la declaracin de armetros de la (uncin constructora, ues as&, aunque se llame al constructor sin ro orcionar armetros, se iniciali!ar con los valores or de(ecto que se #a%an de(inido. $s im ortante se'alar que en los constructores no se tienen or qu, recibir todos los valores ara iniciali!ar el objeto. Ha% algunos valores que ueden iniciali!arse a vac&o o a cualquier otro valor (ijo, como en este caso el contenido de la caja, que inicialmente #emos su uesto que estar vac&a.
Artculo por
75
Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com +a rogramacin orientada a objetos tiene un mecanismo llamado #erencia or el que se ueden de(inir clases a artir de otras clases. +as clases reali!adas a artir de otra clase o mejor dic#o, que extienden a otra clase, se llaman clases extendidas o clases derivadas. +as clases extendidas #eredan todos los atributos % m,todos de la clase base. /dems, ueden tener tantos atributos % m,todos nuevos como se desee. Para am liar el ejem lo que venimos desarrollando, la clase -aja, vamos a crear una clase extendida llamada -ajaNtematica. $sta clase #ereda de caja, ero adems tiene un =tema=, que es la descri cin del ti o de cosas que metemos en la caja. -on esto odemos tener varias cajas, cada una con cosas de un tema concreto.
class &a@a$te%atica extends &a@aK *ar 2te%a; f"nction define$te%a(2n"e*o$te%a)K 2this->te%a ? 2n"e*o$te%a; O
$n esta clase #eredamos de -aja, con lo que tenemos a nuestra dis osicin todos los atributos % m,todos de la clase base. /dems, se #a de(inido un nuevo atributo, llamado Xtema, % un m,todo, llamado de(ineNtema89, que recibe el tema con el que se desea etiquetar la caja. Podr&amos utili!ar la clase -ajaNtematica de manera similar a como lo #ac&amos con la clase -aja original.
2%ica@a$te%atica ? ne0 &a@a$te%atica(); 2%ica@a$te%atica->define$te%a("&a-les y contectores"); 2%ica@a$te%atica->introd"ce("&a-le de red"); 2%ica@a$te%atica->introd"ce("&onector 4R#D"); 2%ica@a$te%atica->%"estra$contenido();
$n este caso, el resultado que se obtiene es arecido al que se obtiene ara la clase base. 0in embargo, cuando se muestra el contenido de una caja, lo ms interesante ser&a que se indicara tambi,n el ti o de objetos que contiene la caja temtica. Para ello, tenemos que rede(inir el m,todo muestraNcontenido89.
$n este ejem lo #emos codi(icado de nuevo el m,todo entero ara mostrar los datos com letos. $n algunas ocasiones es mu% :til a o%arse en la de(inicin de un m,todo de la clase base ara reali!ar las acciones de la clase extendida. Por ejem lo, ara este ejem lo, tenemos que de(inir un constructor ara la clase -ajaNtematica, en el que tambi,n se inicialice el tema de la caja. -omo %a existe un m,todo constructor en la clase base, no merece la ena reescribir el cdigo de ,ste, lo mejor es llamar al constructor que #ab&a de(inido en la clase -aja original, con lo que se iniciali!arn todos los datos de la clase base, % luego reali!ar la iniciali!acin ara los atributos de la ro ia clase extendida. Para llamar a un m,todo de la clase adre dentro del cdigo de un m,todo que estamos rede(iniendo, utili!amos una sintaxis como esta1
f"nction &a@a$te%atica(2alto?J=2ancho?J=2lar+o?J=2color?"ne+ro"=2te%a?"Sin clasificaciLn")K parent::&a@a(2alto=2ancho=2lar+o=2color); 2this->te%a?2te%a; O
/qu& vemos la rede(inicin del constructor, de la clase -aja, ara la clase -ajaNtematica. $l constructor #ace rimero una llamada al constructor de la clase base, a trav,s de una re(erencia a = arent=. +uego iniciali!a el valor del atributo Xtema, que es es ec&(ico de la -ajaNtematica.
76
Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com $n la misma l&nea de trabajo, odemos rede(inir el m,todo muestraNcontenido89 a o%ndonos en el que (ue declarado en la clase base. $l cdigo quedar&a como sigue1
f"nction %"estra$contenido()K echo "&ontenido de la ca@a de <->" . 2this->te%a . "</->: "; parent::%"estra$contenido(); O
Artculo por
Parte 11:
77
+a variable Xcadena asada como argumento a la (uncin ejem lo, es co iada ara su uso local dentro de dic#a (uncin. $s lo que se conoce como aso de armetros or valor. $l Cend $ngine 1.F #ace exactamente esto ara todas las (unciones, inclusive ara las que estn dentro de una clase, las cuales en ese caso act:an como m,todos1
<? f"nction Al+o(2persona) K 2persona->set9o%-re("(aniel"); O ?>=
Molviendo al ejem lo inicial de la clase ersona, el m,todo /lgo recibe una co ia 8un clon9 del objeto Persona. +a segunda ra!n viene em arejada con la rimera, siendo consecuencia de esta. -ualquier modi(icacin del objeto Persona que se rodu!ca dentro del m,todo /lgo, solo tendr alcance local, % no se ver re(lejado cuando la (uncin retorne.
<? Al+o(2persona); echo 2persona->+et9o%-re(); ?>
$n ese caso la modi(icacin del nombre que #ace la (uncin /lgo al objeto Persona no se ve re(lejada cuando #acemos ec#o X ersonaDUgetNombre89. $n nuestro browser veremos =Pic#ongol=. $ste es solo un ejem lo del orque de la reestructuracin tan im ortante en el -ore de PHP. $s claro que toda
78
Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com reestructuracin barre con cuestiones de com atibilidad, ara ganar en otros sKillsV en este caso claramente estamos ganando en er(ormance, al liberarnos del over#ead que im lica la constante co ia de objetos que son argumentos de m,todos % (unciones. $n art&culos osteriores trataremos en ma%or detalle % ro(undidad los distintos as ectos que (ueron modi(icados, #aciendo una com arativa entre como se logran en PHP4 % como se logran en PHP3. /dems de ex licar ro(undamente las di(erencias en el modelo de objetos nos quedan temas endientes como ; ciones de con(iguracin 8 # .ini9, -onexin a *%0<+ 8m%sqli9, cambios en los mdulos, etc. Hec#a esta introduccin, estamos en condiciones de de(inir las distintas situaciones en las que se uede encontrar el desarrollador, % que as ectos juegan a su (avor o en contra seg:n la situacin en la que se encuentre.
11.1.*. 5e-bie
$n el lanteo de esta discusin, odr&amos decir que es la situacin ideal, o or lo menos la ms bene(iciosa. 0i eres una ersona que quiere arrancar en PHP, no lo dudes, PHP3 es ara ti. )us a licaciones go!aran de las nuevas ca acidades en ;;P, obtendrs el bene(icio de una mejor er(ormance de ejecucin 8esta com robado ex erimentalmente que PHP3 corre un L3T ms r ido que PHP49 % tu cdigo estar mu% bien acondicionado en cuanto a la com atibilidad con el nuevo #ijo que asoma1 PHP4. Por cierto, no todo es color de rosas. 5na de los ma%ores bene(icios a la #ora de elegir PHP ara trabajar en nuestro ro%ecto es la gran cantidad de cdigo que odemos encontrar en "nternet, % utili!arlo ara nuestros trabajos. )enemos una gran robabilidad de que ante alguna tarea que se nos lantea, odamos encontrar alg:n scri t que nos solucione la vida, obviamente ada tndolo a nuestras necesidades. /#ora bien, no todo el cdigo que vamos a encontrar es com atible con PHP3. ?e #ec#o la gran ma%or&a todav&a no se #a ada tado. $s cierto que con alg:n setting en nuestro # .ini odemos a%udar a darle ma%or com atibilidad, ero como contra artida muc#as de estas settings se eliminaran en PHP4. H<u, quedaJ Hacerlo com atible modi(icando el cdigo, una tarea que ara un desarrollador que se inicia no siem re es sencillo. ?e todas (ormas a no alarmarse, que los grandes ro%ectos 8PHPNuKe, PHPGG, etc.9 o(recen com atibilidad.
11.1./. 2;perimentado
$n este caso, el o tar or quedarse con PHP4 o asar a PHP3 de ende de nuestra a licacin. +as interrogantes que el desarrollador se uede lantear odr&an ser1 D H*i a licacin usa clases % objetosJ D H*i motor de Gase de datos es *%0<+J D H5tili!o un #osting externoJ D H*i a licacin su(re modi(icaciones en cuanto a los requerimientos % lgica de negociosJ Pasemos a discutir ventajas % desventajas en cada uno de los interrogantes1
79
11.1... SMi aplicacin su8re modi8icaciones en cuanto a los re<uerimientos 3 lgica de negociosR
-uando las a licaciones tienen requerimientos de cliente bastante cambiantes, % se em lean recursos ara su mantenimiento, o utili!amos una metodolog&a de desarrollo incremental 8so(tware versionado9, lo ideal es utili!ar lo :ltimo que nos ro orciona nuestra lata(orma de rogramacin. .eneralmente lo que se busca es un cambio gradual, modular, % sostenido. Por otro lado, si nuestras a licaciones residen en roduccin sin ma%ores modi(icaciones 8alg:n roceso batc#, alguna a licacin de urada, alg:n algoritmo estable9 % estamos con(ormes con su (uncionamiento, qui!s no sea de nuestro inter,s migrar #acia una nueva versin. Nos queda anali!ar que #a% de nuevo en PHP4 % que cosas deber&amos ir teniendo en cuenta si utili!amos PHP4 o PHP3.
Artculo por
Daniel Lpez
80
Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com gina no existe. 0i damos in(ormaciones ambiguas a los buscadores uede que redunde negativamente en la clasi(icacin de nuestro sitio. $l roblema que queremos comentar a#ora es el t& ico error =4F4 ;^=. $sto es una ambigcedad1 4F4 es gina no encontrada % ;^ quiere decir que todo #a ido bien. Pero si no encontr la gina H-mo es que decimos que ;^J $so es algo que se uede evitar enviando el error correctamente en la cabecera del H))P. Para enviar un cdigo de error 4F4 or las cabeceras del H))P con PHP tenemos que #acer lo siguiente1
<? header("/TT./J.S #S# 9ot Po"nd"); ?>
-on la (uncin #eader89 de PHP enviamos in(ormacin en la cabeceras del #tt . $n este caso #emos enviado una cabecera 4F4 Not @ound. /tencin, orque la (uncin #eader89 debe invocarse antes de #aber escrito nada en la gina, osea, antes de #aber enviado ninguna in(ormacin al navegador. Pero de endiendo de la con(iguracin de nuestro servidor esto uede (uncionar o no. +a mejor manera de saber qu, estamos enviando or las cabeceras del #tt es utili!ar un rograma que nos muestre las cabeceras que se generan tanto en el cliente como en el servidor. $xisten varios rogramas que nos odr&an servir, ero nosotros vamos a recomendar aqu& una extensin de @ire(ox que #emos comentado %a en otro art&culo1 Mer cabeceras H))P con +iveHtt Headers. Meremos que en algunas ocasiones enviando esta cabecera el navegador recibe un cdigo de error como este1 H))PA1.x 4F4 ;^ $so es algo que tenemos que evitar, orque es ambiguo. +a cabecera deseable ser&a1 H))PA1.x 4F4 Not @ound Pues bien, cuando la cabecera que generamos es H))PA1.x 4F4 ;^ tenemos que #acer lo siguiente ara conseguir el deseado H))PA1.x 4F4 Not @ound.
<? header("/TT./J.S #S# 9ot Po"nd"); header("Stat"s: #S# 9ot Po"nd"); ?>
Primero le indicamos la cabecera del #tt como 4F4 % luego lan!amos otra cabecera indicando que el estatus que tiene que enviar es =Not @ound=. $sto deber&a (uncionar en todos los casos. $s osible que con una sola de las dos cabeceras enviadas nos env&e %a el error 4F4 Not @ound, de ende de la con(iguracin de nuestro servidor que necesitemos una u otra. Pero si indicamos las dos en las ruebas que #e #ec#o con varios servidores siem re #e recibido el cdigo de error correcto. "nsisto en que lo bueno es que veamos qu, cabeceras del H))P estamos enviando con un roducto como +iveHtt Headers . /s& odremos estar seguros de qu, cabeceras tenemos que enviar % qu, cdigo PHP es el correcto en nuestro caso. Porque en algunos servidores PHP si enviamos slo esta cabecera1
<? header("Stat"s: #S# 9ot Po"nd"); ?>
81
Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com Por ejem lo, en este caso es todav&a eor, orque nosotros #ab&amos querido enviar un error 4F4 % en realidad lo que #a llegado al navegador es un LFF ;^ que quiere decir gina encontrada % correcta. $n de(initiva, cabe estudiar detalladamente este asunto ara asegurarnos que estamos enviando la cabecera correcta % el error 4F4 es claro.
Artculo por
+a meta de estos art&culos es demostrar cmo odemos #acer uso de <uicK@orm % 0*/>)I ara desarrollar una eque'a a licacin 7eb.
11.'.$. Re<uisitos
Ha% que destacar que H)*+N<5"-^@;>* no es standard en la instalacin de la librer&a P$/> or lo que #abr que descargrselo % colocarlo en el direcorio en el que tenemos P$/>. $s im ortante saber que es necesario el aquete ;bservar or (avor que el aquete H)*+N-;**;N. 0i la l&nea siguiente no devuelve un error entonces tienes instalado <uicK@orm en tu sistema.
reT"ire(?/T! /^"ic,Por%.php?);
82
Manu Gutierrez
83
Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com objeto PHP, o cualquier otro ti o de variable, a un string con notacin _0;N, as& como crear un objeto PHP a artir de un string codi(icado con _0;N. $n PHP, como dec&amos, es osible roducir % consumir datos cargados con notacin _0;N, or medio de unas (unciones de las que dis one el lenguaje, que existen de manera redeterminada en los servidores modernos de PHP % que se ueden utili!ar tambi,n en instalaciones antiguas de PHP, aunque con alg:n trabajo de instalacin adicional. / artir de PHP 3.L las (unciones _0;N estn dis onibles siem re, ero si utili!amos or ejem lo PHP 4 tendr&amos que instalarlas manualmente. Para ello existen varios aquetes de librer&as, que rovienen de diversas (uentes, que tienen (unciones ara tratar con _0;N desde PHP. < Pa!uete =S/) de P*0L $ste aquete, del re ositorio de librer&as PHP P$-+, es com atible con PHP 4.2.F o su erior. $n versiones su eriores a PHP 3.L est dis onible or de(ecto. $n versiones anteriores del lenguaje se tendr&a que instalar de manera se arada. < Librera =S/)<P P $s una librer&a de (unciones que se conoce tambi,n con el nombre de =0ervicesN_0;N=. ;riginariamente escrita or *ic#al *igursKi, en la actualidad se encuentra dis onible dentro del (rameworK PHP P$/>1 #tt 1AA ear. # .netA acKageA0ervicesN_0;N < =S/) Lib en >end 2rame(or: $s una librer&a de (unciones ara tratamiento con _0;N que (orma arte del (rameworK PHP Cend. < ?ML<&P0 para P P Por medio de una extensin ara la librer&a # Dxmlr c, tambi,n se uede tratar con notacin de objetos _0;N. +as articularidades de cada sistema son ligeramente distintas. -abe decir que la ms interesante ser&a la rimera, que (orma arte de P$-+, uesto que est escrita en - % or tanto ser ms r ida de ejecutarse, al (ormar arte de los com onentes nativos de PHP. -omo decimos slo odremos dis oner de ella a artir de PHP 3.L, ero en servidores antiguos tendr&amos que instalarla a arte, lo que a menudo ser com licado, o incluso im osible ara sitios web en roduccin % en un alojamiento com artido. /s& que, si nuestro servidor PHP no dis one de las (unciones _0;N or estar oco actuali!ado, nos costar muc#o menos es(uer!o % dolores de cabe!a utili!ar otra librer&a distinta a la bsica de P$-+. $n este caso, or la (acilidad de instalacin, se recomendar&a la utili!acin de la librer&a que viene en P$/>, que se uede descargar del ro io sitio de P$/>, en la 5>+ #tt 1AA ear. # .netA acKageA0ervicesN_0;N
)ota: Hemos ublicado en ?esarrollo7eb.com en asados art&culos algunas re(erencias :tiles ara instalar P$/> % utili!ar algunos com onentes de este (rameworK PHP.este (rameworK PHP.
$xiste un art&culo mu% interesante, aunque en ingl,s, que com ara las diversas librer&as existentes ara usar _0;N desde PHP, que contiene diversas in(ormaciones t,cnicas, requisitos % un anlisis del desem e'o de cada una. $n el rximo art&culo ex licaremos cmo utili!ar las (unciones _0;N en PHP or medio de las (unciones nativas del lenguaje.
Artculo por
11./. Code!gniter
Code&gniter es un frame"or8 PHP para la creacin rpida de aplicaciones "eb. Presentacin general del frame"or8 ! primeras notas para empe+ar a usarlo. Probablemente %a se amos que un (rameworK es un rograma ara desarrollar otros rogramas, -ode"gniter, or tanto, es un rograma o a licacin web desarrollada en PHP ara la creacin de cualquier ti o de a licacin web bajo PHP. $s un roducto de cdigo libre, libre de uso ara cualquier a licacin.
84
Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com -omo cualquier otro (rameworK, -odeigniter contiene una serie de librer&as que sirven ara el desarrollo de a licaciones web % adems ro one una manera de desarrollarlas que debemos seguir ara obtener rovec#o de la a licacin. $sto es, marca una manera es ec&(ica de codi(icar las ginas web % clasi(icar sus di(erentes scri ts, que sirve ara que el cdigo est, organi!ado % sea ms (cil de crear % mantener. -ode"gniter im lementa el roceso de desarrollo llamado *odel Miew -ontroller 8*M-9, que es un estndar de rogramacin de a licaciones, utili!ado tanto ara #acer sitios web como rogramas tradicionales. $ste sistema tiene sus caracter&sticas, que veremos en art&culos siguientes. -ode"gniter no es magia, ero contiene muc#as a%udas ara la creacin de a licaciones PHP avan!adas, que #acen que el roceso de desarrollo ms r ido. / la ve!, de(ine una arquitectura de desarrollo que #ar que rogramemos de una manera ms ordenada % contiene diversas #erramientas que a%udan a #acer a licaciones ms verstiles % seguras. -ode"gniter % otros (rameworKs PHP ueden a%udarte a dar el salto de(initivo como desarrollador PHP, creando a licaciones web ms ro(esionales % con cdigo ms reutili!able, con la di(erencia que -ode "gniter est creado ara que sea (cil de instalar en cualquier servidor % de em e!ar a usar que cualquier otro (rameworK. /dems muc#as de sus utilidades % modos de (uncionamiento son o cionales, lo que #ace que goces de ma%or libertad a la #ora de desarrollar sitios web.
85