Vous êtes sur la page 1sur 103

Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.

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.

Autores del manual


Este manual ha sido realizado por los siguientes colaboradores de DesarrolloWeb.com:
Rubn Alvarez Miguel Angel Alvarez Carlos Luis Cuenca

Redactor de DesarrolloWeb.com http://www.desarrolloweb.com (24 captulos

Director de DesarrolloWeb.com ! Escuela"# http://www.helloworldsolutions.com/ http://www.desarrolloweb.com (% captulo (2$ captulos

Daniel Lpez

http://pichongol.blogspot.com (% captulo

Jorge Ramos
(% captulo

Brian Hernndez

Desarrollador de apps multiplata&orma. http://brianhernandezg.blogspot.com (% captulo

Programacin en PHP: http://www.desarrolloweb.com/manuales/12/


' (os manuales de DesarrolloWeb.com tienen el cop!right de sus autores. )o reproducir sin autorizaci*n.

Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com

or !u aprender H
Enumeracin y e plicacin de las ra!ones por las que debes invertir tu tiempo en aprender a desarrollar sitios "eb con PHP . "El bien ms preciado que tenemos en la vida es el tiempo"

Me he permitido comenzar con una frase que dudo haber sido el primero en pronunciar, y por la que muchos de vosotros pensaris que me he puesto "mstico" innecesariamente. Pero tiene su razn de ser. Cuando te pones a estudiar un nuevo len ua!e de pro ramacin est"s invirtiendo tu tiempo, ese bien tan preciado que tienes y, por supuesto, debemos esco er correctamente a qu len ua!e apostar nuestras cartas. P#P es el len ua!e que hoy puede resultar m"s interesante de aprender por muchas razones, y de ello trata este artculo, que sirve de resumen del contenido ofrecido durante el pro rama $php%& del '( de enero de )*'+. , continuacin te ofrecemos el listado de razones destacadas por los distintos ponentes que participaron en este evento, animando a todos los espectadores a aprender P#P"PHP es la evolucin lgica en el aprendizaje de todo desarrollador web" .os /imas 0u!"n 1!osedlu!an ,prender P#P es idneo porque es el len ua!e m"s indicado para cualquier persona que haya e2plorado previamente otros len ua!es 3eb m"s b"sicos, como pueden ser #4M0, C55 o .avascript. 4odo desarrollador 3eb que se precie ha pasado por P#P, por diversas razones, entre las que destaca su facilidad de aprendiza!e y las capacidades de P#P de realizar tareas clave que necesitan implementar la mayora de las aplicaciones o sitios 3eb. 4al como nos indic .os, de los $android%&, P#P es sencillo porque se desprende de muchas de las dificultades o ri ideces de los len ua!es de pro ramacin. Podemos hacer un uso sencillo de P#P, pero tambin tiene frmulas para un uso avanzado. 6s un trmino medio entre un len ua!e "marciano" y un len ua!e "humano". "5i t7 desarrollas 3eb, pero no pasaste por P#P, te perdiste un aprendiza!e muy bonito, muy divertido y la posibilidad de hacer las cosas sencillas". "La comunidad hace grandes a los lenguajes de programacin" Claudio Morales 1pronuer 8a!o la e2periencia de Claudio, fundador de 1pro ramasP#P, la comunidad de P#Peros de M2ico, la comunidad es uno de los puntos que hacen fuertes a P#P. 62iste mucho traba!o bien hecho por las personas que hacen o traba!an con P#P y que provoca que este len ua!e ten a una lar a vida. 6n pocas horas una persona puede empezar a pro ramar en P#P y eso facilita que la comunidad no pare de crecer y cada vez P#P sea m"s utilizado. Por otra parte, destac Claudio, la mayora de soluciones de hospeda!e incluyen P#P como opcin principal y m"s econmica. 6sto provoca que las personas al final quieran usar m"s el len ua!e y las tecnolo as que lo rodean. P#P es un len ua!e de la comunidad, hecho por una enorme comunidad y utilizado por decenas de millones de desarrolladores en todo el mundo. 4antos millones de profesionales no pueden estar equivocados al mismo tiempo. ",prender P#P es como remar contra corriente, si no se hace, se retrocede". "Puedes desarrollar muy rpido aplicaciones web utilizando frameworks" 9einaldo , uilera 1reia uilera 0a curva de aprendiza!e de P#P es sencilla, y ests en el sistema operativo que ests, puedes instalar P#P y empezar a pro ramar. P#P es muy poderoso y est" presente en la mayora de los servidores p7blicos de %nternet. 4odas esas son razones suficientes para esco er P#P como len ua!e de pro ramacin del lado del servidor, pero hay un motivo que todava ana m"s fuerza en la actualidad, los frame3or:s.

Programacin en PHP: http://www.desarrolloweb.com/manuales/12/


' (os manuales de DesarrolloWeb.com tienen el cop!right de sus autores. )o reproducir sin autorizaci*n.

Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com 6s muy f"cil encontrar un pro ramador de P#P, pero no lo es tanto encontrar un pro ramador de P#P que adem"s desarrolle atendiendo a un modelo o patrn de dise;o, con buenas pr"cticas que eneren un cdi o de calidad y f"cilmente mantenible. Para todo ello tenemos los frameworks. 6n P#P disponemos de infinidad de variantes, unas m"s sencillas que otras, entre las que destacan Codei niter, 5ymfony, <end, =ii. 5on productos que han lle ado a un estado de madurez muy interesante y que nos ayudar"n enormemente a ser me!ores desarrolladores y m"s productivos. Pero adem"s de los propios frame3or:s, hay multitud de aplicaciones que nos pueden ayudar a cumplir ob!etivos en un abrir y cerrar de o!os, con calidad y altas prestaciones en todos los sentidos. 4enemos CM5s como >ordpress, .oomla? o /rupal, los m"s populares, que son una maravilla, y que forman parte del corazn de miles de millones de sitios 3eb. = no solo eso, si necesitamos un soft3are para comercio electrnico, las me!ores soluciones tambin est"n en P#P, como Ma ento, &sCommerce o Prestashop, etc. 0os e!emplos de herramientas basadas en P#P son inacabables. 9einaldo, de los $dev%&, invit a todos los espectadores a tuitear al creador de P#P y a radecerle su traba!o, que nos ha dado de comer a millones de desarrolladores en todo el mundo. "@racias 1rasmus por P#P $php%&" "Por u! estudiar PHP" para trabajar" Pablo 8ernardo 1voylinu2 Pablo 8ernardo, director de $0inu2%&, nos di una apro2imacin a su e2periencia como desarrollador incorporado al mundo 3eb desde hace menos tiempo que otros compa;eros de este evento. ,ntes de decidirse por P#P pre unt a un e2perto en el que confiaba qu len ua!e esco era para aprender y ste le respondi con otra pre unta Aqu es lo que deseas hacer con ese len ua!eB Pablo di!o "encontrar traba!o". 0a respuesta que recibi fue rotunda- ",prende P#P". 6l hecho es que P#P le funcion, encontr traba!o y desde hace relativamente poco tiempo se dedica profesionalmente a la pro ramacin y ha tenido el enorme placer de acceder a una de las me!ores comunidades, la del soft3are libre y la pro ramacin en P#P. Pero m"s all" de la e2periencia personal, son datos ob!etivos que cualquiera de nosotros puede comprobar accediendo a cualquier 3eb de empleo y comprobando las ofertas laborales que hay en cada len ua!e. "Co puedo andar coqueteando con tantos len ua!es, necesito acceder directamente a uno que me abra las puertas del mercado laboral" "PHP es el lenguaje mejor documentado y donde ms ayudas encontrars" Mi uel ,n el ,lvarez 1mides3eb 6ntre los motivos que deberan llevarte a aprender P#P no es nada despreciable el hecho de P#P de ser el len ua!e en el que encontrar"s la mayor cantidad de informacin, manuales, talleres, tutoriales, etc. 6s muy difcil que lle ues a toparte con un problema, o enfrentarte a una necesidad, que no haya sido resuelta por un desarrollador antes que t7. "@u lea" y encontrar"s respuesta a cualquier duda en forma de artculo, script, manual, etc. 62isten decenas de sitios donde puedes aprender de manera autodidacta, y est"s en uno de ellos. 5implemente tienes que ir a nuestra seccin P#P a fondo para encontrar manuales y tutoriales de P#P a todos los niveles, talleres, videoturoriales, etc. 6ntonces APor qu debera estudiar en un curso de P#PB Porque queremos ofreceros nuestro compromiso para formaros como profesionales de este len ua!e, porque queremos que puedas estar en clase con un profesor que pueda llevarte paso por paso en el aprendiza!e, al uien que te ense;e todas esas tcnicas de primera mano y que, si no has comprendido al o, que puedas pre untar para que te lo e2plique de nuevo. Due ten as la posibilidad de acceder a tutoras con los docentes y puedas realizar todo tipo de pre untas y beneficiarte de las respuestas que se ofrezcan a otros compa;eros. 6n definitiva, porque estamos convencidos que podemos hacer del aprendiza!e una e2periencia realizadora, amena y altamente aprovechable. ",prende P#P, pero no te quedes en los ob!etivos inmediatos"

"uestra #iloso#$a para ense%ar H


6ntendemos que para pro ramar en P#P con las me!ores pr"cticas necesitas aprender un frame3or:, o una plataforma de desarrollo como las que aportan los CM5, y por ello pensamos que la formacin P#P debe ser entendida a lar o plazo.

Programacin en PHP: http://www.desarrolloweb.com/manuales/12/


' (os manuales de DesarrolloWeb.com tienen el cop!right de sus autores. )o reproducir sin autorizaci*n.

Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com /ebes conocer las bases de P#P para lue o poder adentrarte en aquellas tcnicas que te ayudar"n a producir sitios m"s profesionales en menos tiempo. Por ello desde /esarrollo>eb.com vamos a impartir el Curso de P#P 8"sico de 6scuela%4, la plataforma para la formacin tutorizada de /esarrollo>eb.com. 6n 6scuela%4 estamos montando un curso de P#P b"sico, y no porque lue o vayamos a hacer un curso avanzado, sino porque queremos primero divul ar las bases que todo desarrollador debe conocer de P#P, para poder lue o enfrentarse a otros ob!etivos. Con este curso b"sico comienza un ciclo, que daremos continuidad con otros cursos como pro ramacin orientada a ob!etos, pro ramacin de mdulos en >ordpress o /rupal, frame3or:s como 5ymfony o Codei niter, etc. 5i quieres aprender P#P no ha as la carrera de los '** metros, sino tmatelo con nosotros a un plazo un poco mayor y aprende las herramientas que te convertir"n en un profesional cotizado. ,l final del han out $php%& "Por qu aprender P#P" tendr"s una descripcin m"s detallada de nuestro pro rama formativo, as como de la filosofa de este curso y las mec"nicas para la formacin que implementamos en 6scuela%4, siempre con clases en directo y en las que podr"s disponer del profesor para realizar tus dudas y recibir respuestas en el instante. 0os profesionales que intervinieron en este hangout son los mismos profesores del curso, y el que os escribe, el docente titular. 4ambin puedes acceder a la p" ina del curso de P#P para encontrar mucha m"s informacin detallada. E@racias por confiar en nosotros?
Artculo por

Miguel Angel Alvarez

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 /0/ en particular ! 1ue se entienda cu2l es su modo de &uncionamiento ! los tipos de cosas 1ue se pueden hacer con este lengua,e.

&'&'( )ntroduccin a la programacin en H


E plicamos someramente qu# es el PHP y lo comparamos a otros lenguajes para el desarrollo de "ebs dinmicas P#P es el len ua!e de lado servidor m"s e2tendido en la 3eb. Cacido en 'FFG, se trata de un len ua!e de creacin relativamente reciente, aunque con la rapidez con la que evoluciona %nternet parezca que ha e2istido toda la vida. 6s un len ua!e que ha tenido una ran aceptacin en la comunidad de desarrolladores, debido a la potencia y simplicidad que lo caracterizan, as como al soporte eneralizado en la mayora de los servidores de hostin . P#P nos permite embeber su peque;os fra mentos de cdi o dentro de la p" ina #4M0 y realizar determinadas acciones de una forma f"cil y eficaz, combinando lo que ya sabemos del desarrollo #4M0. 6s decir, con P#P escribimos scripts dentro del cdi o #4M0, con el que se supone que ya estamos familiarizados. Por otra parte, y es aqu donde reside su mayor inters con respecto a los len ua!es pensados para los C@%, P#P ofrece un sinfn de

Programacin en PHP: http://www.desarrolloweb.com/manuales/12/


' (os manuales de DesarrolloWeb.com tienen el cop!right de sus autores. )o reproducir sin autorizaci*n.

Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com funciones para la e2plotacin de bases de datos de una manera llana, sin complicaciones. Podramos efectuar la quiz"s odiosa comparacin de decir que P#P y ,5P son len ua!es parecidos en cuanto a potencia y dificultad si bien su sinta2is puede diferir sensiblemente. ,l unas diferencias principales pueden, no obstante, mencionarse#ctualizado" 6n estos momentos ya no es tan polmica la comparacin de P#P con ,5P, puesto que son dos len ua!es que han evolucionado de maneras distintas. Mientras que ,5P se ha estancado y han salido productos nuevos como .C64 para sustituirlo, P#P ha ido me!orando mucho con los a;os y actualmente su potencia y posibilidades son totalmente distintas, con lo que ha de!ado muy atr"s la competencia con ,5P. 6ste manual lo comenzamos con la versin + de P#P y hoy ya van por la ( y est"n cerca de sacar la versin H. ,s pues ya no tiene mucho sentido comparar P#P con ,5P, aunque las lneas si uientes a esta nota, que distin uen ,5P de P#P, pueden ser de utilidad y una referencia v"lida, puesto que estas diferencias no han cambiado a da de hoy. ,s mismo, queremos informar que a pesar del manual tener ya cierto tiempo publicado, siempre lo estamos actualizando cuando sur en cambios en los modos de traba!o con P#P.

P#P, aunque multiplataforma, ha sido concebido inicialmente para entornos IC%J y es en este sistema operativo donde se pueden aprovechar me!or sus prestaciones. ,5P, siendo una tecnolo a Microsoft, esta orientado hacia sistemas >indo3s, especialmente C4. 0as tareas fundamentales que puede realizar directamente el len ua!e son definidas en P#P como funciones mientras que ,5P invoca m"s frecuentemente los ob!etos. Por supuesto, esto no es m"s que una simple cuestin de forma ya que ambos len ua!es soportan i ualmente ambos procedimientos. ,5P realiza numerosas tareas sirvindose de componentes Kob!etosL que deben ser comprados a determinadas empresas especializadas Ko pro ramados por nosotros mismos en otros len ua!esL. P#P presenta una filosofa totalmente diferente y, con un espritu m"s eneroso, es pro resivamente construido por colaboradores desinteresados que implementan nuevas funciones en nuevas versiones del len ua!e.

6ste manual va destinado a aquellos que quieren comenzar de cero el aprendiza!e de este len ua!e y que buscan en l la aplicacin directa a su proyecto de sitio o a la me!ora de su sitio #4M0. 0os captulos son e2tremadamente simples, sino simplistas, buscando ser accesibles a la mayora. 6llos pueden ser complementados posteriormente con otros art$culos de mayor nivel destinados a ente m"s e2perimentada. 0a forma en la que hemos redactado este manual lo hace accesible a cualquier persona no familiarizada con la pro ramacin. 5in embar o, es posible que en determinados momentos al uien que no haya pro ramado nunca pueda verse un poco desorientado. Cuestro conse!o es el de no querer entender todo antes de pasar al si uiente captulo sino intentar asimilar al unos conceptos y volver atr"s en cuanto una duda sur!a o hayamos olvidado al 7n detalle. Cunca viene mal leer varias veces lo mismo hasta que quede bien rabado y asimilado. ,ntes de comenzar a leer este manual es altamente aconse!able, sino imprescindible, haber ledo previamente el manual sobre manual sobre pginas dinmicas en el cual se e2plica a randes ras os qu es el P#P, al unos conceptos 7tiles sobre el modo de traba!ar con p" inas din"micas al mismo tiempo que nos introduce al unos elementos b"sicos de la pro ramacin como pueden ser las variables y las funciones. &tra referencia a la cual haremos alusin es el tutorial de %&L que nos ser" de ran ayuda para el tratamiento de bases de datos y a My5D0, del que podremos aprender muchas cosas en el 'aller de (y%&L. Para todos los lectores, pero aun m"s para las personas m"s ine2pertas y con m"s dificultades de aprendiza!e, tenemos adem"s una recomendacin que puede ayudarles mucho. 5e trata del )ideotutorial de PHP que estamos publicando con diversos vdeos que e2plican con ran detalle la pro ramacin en P#P. 6speramos que este manual resulte de vuestro a rado y que corresponda a nuestras e2pectativas- 6l poder acercar P#P a todos aquellos amantes del desarrollo de 3ebs que quieren dar el paso hacia las 3ebs "profesionales". 0os scripts que usamos en estos primeros e!emplos pueden ser descar ados a u$.
Artculo por

Rubn Alvarez

Programacin en PHP: http://www.desarrolloweb.com/manuales/12/


' (os manuales de DesarrolloWeb.com tienen el cop!right de sus autores. )o reproducir sin autorizaci*n.

Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com

&'*'( Breve +istoria de H


$esde sus inicios %asta la versin & %a sido desarrollado por muc%as personas. P#P es un len ua!e creado por una ran comunidad de personas. 6l sistema fue desarrollado ori inalmente en el a;o 'FFG por 9asmus 0erdorf como un C@% escrito en C que permita la interpretacin de un n7mero limitado de comandos. 6l sistema fue denominado Personal #ome Pa e 4ools y adquiri relativo 2ito racias a que otras personas pidieron a 9asmus que les permitiese utilizar sus pro ramas en sus propias p" inas. /ada la aceptacin del primer P#P y de manera adicional, su creador dise; un sistema para procesar formularios al que le atribuy el nombre de M% KMorm %nterpreterL y el con!unto de estas dos herramientas, sera la primera versin compacta del len ua!e- P#PNM%. 0a si uiente ran contribucin al len ua!e se realiz a mediados del FO cuando se volvi a pro ramar el analizador sint"ctico, se incluyeron nuevas funcionalidades como el soporte a nuevos protocolos de %nternet y el soporte a la ran mayora de las bases de datos comerciales. 4odas estas me!oras sentaron las bases de P#P versin +. ,ctualmente P#P se encuentra en su versin G, que utiliza el motor <end, desarrollado con mayor meditacin para cubrir las necesidades actuales y solucionar al unos inconvenientes de la anterior versin. ,l unas me!oras de esta nueva versin son su rapidez P racias a que primero se compila y lue o se e!ecuta, mientras que antes se e!ecutaba mientras se interpretaba el cdi oP, su mayor independencia del servidor 3eb Pcreando versiones de P#P nativas para m"s plataformasP y un ,P% m"s elaborado y con m"s funciones.

@r"fica del n7mero de dominios y direcciones %P que utilizan P#P. 6stadstica de Cetcraft. 6n el 7ltimo a;o, el n7mero de servidores que utilizan P#P se ha disparado, lo rando situarse cerca de los ( millones de sitios y Q**.*** direcciones %P, lo que le ha convertido a P#P en una tecnolo a popular. 6sto es debido, entre otras razones, a que P#P es el complemento ideal para que el t"ndem 0inu2P,pache sea compatible con la pro ramacin del lado del servidor de sitios 3eb. @racias a la aceptacin que ha lo rado, y los randes esfuerzos realizados por una creciente comunidad de colaboradores para implementarlo de la manera m"s ptima, podemos ase urar que el len ua!e se convertir" en un est"ndar que compartir" los 2itos au urados al con!unto de sistemas desarrollados en cdi o abierto.
Artculo por

Miguel Angel Alvarez

&','( -areas principales del H


Mencionamos los principales grupos de funciones integradas en el lenguaje y lo que ellas nos ofrecen. Poco a poco el P#P se va convirtiendo en un len ua!e que nos permite hacer de todo. 6n un principio dise;ado para realizar poco m"s que un contador y un libro de visitas, P#P ha e2perimentado en poco tiempo una verdadera revolucin y, a partir de sus funciones, en estos momentos se pueden realizar una multitud de tareas 7tiles para el desarrollo del 3eb-

Programacin en PHP: http://www.desarrolloweb.com/manuales/12/


' (os manuales de DesarrolloWeb.com tienen el cop!right de sus autores. )o reproducir sin autorizaci*n.

Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com

&','&'( .unciones de correo electrnico


Podemos con una facilidad asombrosa enviar un ePmail a una persona o lista parametrizando toda una serie de aspectos tales como el ePmail de procedencia, asunto, persona a responder... &tras funciones menos frecuentes pero de indudable utilidad para estionar correos electrnicos son incluidas en su librera.

&','*'( /estin de bases de datos


9esulta difcil concebir un sitio actual, potente y rico en contenido que no es estionado por una base de datos. 6l len ua!e P#P ofrece interfaces para el acceso a la mayora de las bases de datos comerciales y por &/8C a todas las bases de datos posibles en sistemas Microsoft, a partir de las cuales podremos editar el contenido de nuestro sitio con absoluta sencillez.

&',','( /estin de arc+ivos


Crear, borrar, mover, modificar...cualquier tipo de operacin m"s o menos razonable que se nos pueda ocurrir puede ser realizada a partir de una amplia librera de funciones para la estin de archivos por P#P. 4ambin podemos transferir archivos por M4P a partir de sentencias en nuestro cdi o, protocolo para el cual P#P ha previsto tambin ran cantidad de funciones.

&','0'( -ratamiento de imgenes


6videntemente resulta mucho m"s sencillo utilizar Photoshop para una el tratamiento de im" enes pero...A= si tenemos que tratar miles de im" enes enviadas por nuestros internautasB 0a verdad es que puede resultar muy tedioso uniformar en tama;o y formato miles de im" enes recibidas da tras da. 4odo esto puede ser tambin automatizado eficazmente mediante P#P. 4ambin puede parecer 7til el crear botones din"micos, es decir, botones en los que utilizamos el mismo dise;o y solo cambiamos el te2to. Podremos por e!emplo crear un botn haciendo una 7nica llamada a una funcin en la que introducimos el estilo del botn y el te2to a introducir obteniendo autom"ticamente el botn deseado. , partir de la librera de funciones raficas podemos hacer esto y mucho m"s. Muchas otras funciones pensadas para *nternet Ktratamiento de coo:ies, accesos restrin idos, comercio electrnico...L o para propsito general Kfunciones matem"ticas, e2plotacin de cadenas, de fechas, correccin orto r"fica, compresin de archivos...L son realizadas por este len ua!e. , esta inmensa librera cabe ahora a;adir todas las funciones personales que uno va creando por necesidades propias y que lue o son reutilizadas en otros sitios y todas aquellas intercambiadas u obtenidas en foros o sitios especializados. Como puede verse, las posibilidades que se nos presentan son sorprendentemente vastas. 0o 7nico que se necesita es un poco de anas de aprender y al o de paciencia en nuestros primeros pasos. 6l resultado puede ser muy satisfactorio.
Artculo por

Rubn Alvarez

Programacin en PHP: http://www.desarrolloweb.com/manuales/12/


' (os manuales de DesarrolloWeb.com tienen el cop!right de sus autores. )o reproducir sin autorizaci*n.

Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com

Parte 2:

Cmo instalar PHP y MySQL


E.plicaremos di-ersos modos 1ue e.isten para instalar /0/ ! la base de datos 3!45(6 1ue es todo lo 1ue necesitamos para empezar a traba,ar. /ara ello -eremos c*mo instalar /0/ sobre los ser-idores web 7pache o ""4. 7dem2s presentaremos di-ersos pa1uetes 1ue nos permiten tener una instalaci*n de todas las aplicaciones necesarias sin necesidad de ninguna con&iguraci*n6 lo 1ue puede &acilitarnos mucho la -ida.

*'&'( )nstalacin de H en nuestro servidor


Pasos previos a la programacin. 'nstalacin del modulo PHP en distintos servidores "eb. Como todo len ua!e de lado servidor, P#P, requiere de la instalacin de un servidor en nuestro PC para poder traba!ar en local. 6ste modo de traba!o resulta a todas luces m"s pr"ctico que col ar los archivos por M4P en el servidor y e!ecutarlos desde %nternet. ,s pues, antes comenzar a crear nuestros pro ramas en P#P, es necesarioP Convertir nuestro ordenador en un servidor. 6sto se hace instalando uno de los varios servidores disponibles para el sistema operativo de nuestra m"quina. P %ntroducir en nuestro servidor los archivos que le permitir"n la comprensin del P#P. 6stos archivos pueden ser descar ados, en su versin m"s actual, de la pgina oficial de PHP. Para conocer la forma de instalar P#P sobre cada servidor de cada sistema operativo podemos diri irnos al apartado de documentacin de la pgina oficial de PHP donde disponemos de un manual en #4M0 de r"pida consulta y un enorme manual en P/M de casi '*** p" inas traducido al castellano donde e2plican minuciosamente y entre otras cosas, los pasos a se uir para cada caso particular. /e todos modos, nosotros vamos a ofrecer al unas ayudas para confi urar P#P en los sistemas m"s habituales. 0a eleccin de vuestro pro rama servidor tendr" mucho que ver con el sistema operativo que ten "is corriendo en vuestro ordenador. 6stas seran al unas posibilidades de sistemas opertativos y soluciones que funcionan bien.

*'&'&'( 1indo2s 34536


5i est"is traba!ando en >indo3s F( o >indo3s FQ y para desarrolladores principiantes, podra ser recomendable utilizar el servidor Personal >eb 5er. 6n este caso necesitaraisP Personal >eb 5erver de Microsoft como servidor el cual os sirve adem"s para el aprendiza!e en ,5P. 4enis una gu$a de instalacin y configuracin en esta misma 3eb.

Programacin en PHP: http://www.desarrolloweb.com/manuales/12/


' (os manuales de DesarrolloWeb.com tienen el cop!right de sus autores. )o reproducir sin autorizaci*n.

Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com P Ina instalacin autoe2traible de la versin m"s reciente de P#P que, adem"s de tardar menos en descar arse, os uiar" paso a paso en el proceso de instalacin. 6sta versin no incluye todas las funcionalidades de P#P, pero os servir" para aprender hasta un buen nivel. #ay que se;alar que, para el caso de P#P en P>5, adem"s de todo lo dicho en captulo de instalacin, es importante al crear el directorio virtual permitir la e!ecucin de scripts validando la ca!a correspondiente. 6n >indo3s F(NFQ tambin podremos utilizar el servidor ,pache y puede que sea una opcin todava m"s completa que la de utilizar P>5. , continuacin e2plicamos m"s sobre ello.

*'&'*'( 1indo2s M7 8 9 Home edition


Co hemos probado P#P en estas plataformas, pero en principio no tienen compatibilidad con Personal >eb 5erver, por lo que deberamos decantarnos por otro servidor. &tra posibilidad para los usuarios de >indo3s en eneral es instalar #pache como servidor 3eb lo cual puede resultar venta!oso con respecto al uso del P>5 ya que P#P est" principalmente dise;ado para correr en este servidor. 6sto quiere decir que, aunque en principio todo debera funcionar correctamente sobre ambos servidores, es posible que al 7n bu no corre ido ha a fallar uno de nuestros scripts si traba!amos para con un servidor cuyas actualizaciones son menos frecuentes y detalladas. ,pache ha sido especialmente pensado para plataformas Ini2P0inu2, aunque recientemente, con la ,pache ).*, han desarrollado una versin especfica para >indo3s. /isponemos de un artculo para aprender a confi urar P#P sobre ,pache en >indo3s, como C@% y tambin como mdulo de ,pache.

*'&','( 1indo2s "-: 1indo2s *;;; 8 9 en sus versiones ro#esional 8 <erver


Para estos sistemas tenemos dos posibilidades muy interesantes, ya que podremos instalar P#P sobre %nternet %nformation 5erver o sobre ,pache con todas las arantas. 5i hubiese que recomendar una de las dos opciones, nos decantaramos por ,pache debido a que, como decamos, P#P est" pensado para traba!ar sobre ,pache. Podra ser interesante %%5 en el caso de que deseemos correr ,5P y P#P sobre el mismo servidor, ya que, en principio, ,pache no es compatible con ,5P.

*'&'0'( =ni> ( Linu>


#ay que decir, no obstante, que las me!ores prestaciones de este len ua!e son obtenidas traba!ando en entorno Ini2 o 0inu2 y con un servidor ,pache, la combinacin m"s corriente en la mayora de los servidores de %nternet que traba!an con P#P. 4enemos un artculo en /esarrollo3eb.com que nos ua paso a paso en la instalacin de 0amp en un sistema 0inu2.

*'&'4'( Conclusin
6n cualquier caso, para fines de desarrollo en local, podemos contentarnos en un principio de traba!ar con cualquier sistema. 5olamente en casos de pro ramacin realmente avanzada podremos confrontarnos con problemas relacionados con el sistema operativo utilizado o el servidor en el que hacemos correr nuestras p" inas. #ay que pensar tambin que, en casos puntuales para los que nuestro PC pueda quedarse corto, podemos hacer directamente nuestras pruebas en el servidor donde alo!amos nuestro sitio el cual ser" muy probablemente, como hemos dicho, un Ini2 o 0inu2 funcionando con ,pache.
+eferencia" 6n /esarrollo>eb hemos publicado diversos manuales y artculos que pueden ser una buena referencia para la instalacin de P#P. ,l unos se pueden ver a continuacin-

Programacin en PHP: http://www.desarrolloweb.com/manuales/12/


' (os manuales de DesarrolloWeb.com tienen el cop!right de sus autores. )o reproducir sin autorizaci*n.

Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com

Confi uracin de P#P con ,pache en >indo3s Confi uracin de P#P como mdulo de ,pache, tambin en >indo3s %nstalacin del Personal >eb 5erver %nstalacin de %%5 en >indo3s JP profesional /irectorio de ,pache K#emos publicado un manual o estar" en breveL M,D sobre cmo instalar P#P en >indo3s Rideotutorial de instalacin de P#P con >amp Rdeo- instalar P#P en una llave I58

Artculo por

Rubn Alvarez

*'*'( Con#iguracin de H con Apac+e en 1indo2s: como C/)


(prende cmo configurar PHP y (pac%e para que trabajen conjuntamente en un sistema )indo"s. 'nstalacin como C*'. 6l presente artculo trata de cmo configurar PHP y #pache para que traba!en con!untamente en un sistema ,indows. ,dem"s, este articulo asume que hay un servidor ,pache confi urado en el >indo3s, y que funciona correctamente.
-ota" 5i deseamos conocer las distintas posibilidades para la instalacin de P#P en los distintos sistemas operativos y servidores, puede ser de utilidad la lectura del artculo %nstalacin de P#P en nuestro servidor.

62isten dos formas de confi urar P#P para traba!ar con ,pache, instalar como un mdulo o instalar como un C@%. 6n este artculo vamos a ver cmo instalarlo com C@%, aunque disponemos de otro artculo para instalar P#P como mdulo en ,pache.

*'*'&'( ara instalar H como un C/) +a8 !ue seguir los siguientes pasos?
6n primer lu ar, hay que descar arse P#P desde la p" ina de php.net. 62isten dos versiones, una que tiene un instalador, y otra que es un fichero <%P. #ay que descar arse esta 7ltima. Ina vez descar ado, hay que descomprimirlo dentro de una carpeta, esta no tiene que estar ba!o el "rbol de directorios de ,pache. 6l artculo asumir" que se descomprime dentro de la carpeta C-P#P. Comprobar que los contenidos del archivo <%P no quedan en un subdirectorio de la carptea C-P#P, sino directamente en dicha carpeta. /entro de la carpeta c-P#P se encuentra un fichero llamado P#PGts.dll, hay que mover el fichero dentro de la carpetac-3indo3ssystem c-3inntsystem 6n este fichero se encuentra toda la confi uracin de P#P, y las modificaciones en la confi uracin de P#P Kmostrar 6rrores, variables lobales etc...L se encuentra dentro del mismo. 6s muy recomendable cambiar la directiva displaySerrors que por defecto esta en &MM, y pornerla en &C, para poder ver los errores que se producen en las p" inas durante el desarrollo. Para un servidor en produccin en conveniente de!arla en &MM. Ina vez se han hecho estos cambios, queda indicarle al ,pache, donde se encuentra instalado el P#P, para ello hay que editar el fichero httpd.conf que se encuentra dentro de la carpeta conf, en la carpeta de instalacin del apache Kpor defecto c-archivos de pro ramaapache roupapache)confL ,brir el fichero, y situarse al final del mismo, y escribir las si uientes lneasScriptAlias /php/ "c:/php/" AddType application/x-httpd-php .php Action application/x-httpd-php "/php/php.exe"

6n ellas se indica donde se encuentra el e!ecutable de php, y lo asocia a los ficheros .php que se encuentren dentro de apache.

Programacin en PHP: http://www.desarrolloweb.com/manuales/12/


' (os manuales de DesarrolloWeb.com tienen el cop!right de sus autores. )o reproducir sin autorizaci*n.

10

Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com , continuacin reiniciar el servidor ,pache, y ya esta? Por 7ltimo, indicar que para probar la nueva instalacin, es recomendable crear un fichero php con el si uiente contenido<? phpinfo();?>

0ue o lo uardamosdentro de la carpeta raz de documentos del ,pache Kpor defecto c-archivos de pro ramaapache roupapache)htdocs L, con un nombre terminado en .php, por e!emplo info.php Para e!ecutarlo, a travs de un nave ador, escribir la direccin http-NNlocalhostNinfo.php. /ebera aparecer una pantalla como la que se muestra a continuacin.

5i la vemos correctamente es que todo ha ido bien y que tenemos perfectamente instalado P#P en nuestro servidor ,pache.
-ota" 6ste tipo de instalacin de P#P sobre ,pache es poco recomendada por motivos de se uridad. Podemos se uirla para confi urar P#P en local, con intencin de desarrollar nuestras p" inas 3eb, pero nunca si vamos a utilizar el servidor en un entorno de produccin, es decir, en un servidor que se encuentre permanentemente conectado a %nternet sirviendo p" inas a todo tipo de usuarios. 5era necesario instalar P#P como un mdulo de ,pache, en lu ar de C@%, para dotar al sistema de una mayor se uridad, y tambin m"s potencia. +eferencia" 6n esta M,D damos otras opciones para la instalacin de P#P, utilizando pro ramas que permiten instalar y confi urar ,pache T P#P T My5D0 en un sencillo paso, accesible para todos los usuarios- Cmo instalar P#P en >indo3s.

Artculo por

Carlos Luis Cuenca

*','( Con#iguracin de H como modulo de Apac+e en 1indo2s


E plicamos el proceso completo para instalar PHP en una mquina )indo"s y un servidor (pac%e. +a instalacin se reali!a como mdulo que es lo ms seguro y rpido. 6n este artculo vamos a e2plicar cmo instalar P#P como mdulo de ,pache ).* en un sistema >indo3s. Para las

Programacin en PHP: http://www.desarrolloweb.com/manuales/12/


' (os manuales de DesarrolloWeb.com tienen el cop!right de sus autores. )o reproducir sin autorizaci*n.

11

Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com pruebas hemos utilizado >indo3s JP, pero se uro que con otros sistemas el proceso ser" muy parecido, aunque, en todo caso, indicaremos las diferencias documentadas en el sitio de P#P. ,nteriormente habamos e2plicado la instalacin de P#P como un C@%, aunque en la p" ina de P#P desaconse!an esta opcin, puesto que adolece de raves problemas de se uridad. ,dem"s, P#P instalado como mdulo de ,pache resulta mucho m"s r"pido que como C@%.
+eferencia" Ramos a suponer que el servidor de p" inas 3eb ,pache ).* est" instalado en nuestro sistema. Co obstante, para los que no lo ten an, les referimos a nuestro manual de instalacin y confi uracin de ,pache.

*','&'( Descargar 8 descomprimir H


6l primer paso consiste en descar ar la 7ltima versin de P#P. Podremos hacerlo desde la p" ina oficial de P#P, en la seccin de descar as. http-NN333.php.netNdo3nloads.php /ebemos ele ir la versin "zip pac:a e" que contiene todas las funcionalidades de P#P y el mdulo necesario para instalarlo en ,pache. Ina vez descar ado el paquete comprimido en .zip de P#P necesitamos descomprimirlo en nuestro disco duro. Podemos utilizar el directorio raz del disco duro para descomprimir los archivos. 6n ese caso, se crear" un directorio llamado al o como "phpPG.+.'P>in+)" que col ar" de nuestro directorio raz. 5e recomienda cambiar el nombre del directorio creado a al o como "c-php". 6n todo caso, nos advierten en la p" ina de P#P sobre no colocar nin 7n nombre de directorio que conten a espacios, pues al 7n servidor 3eb puede dar problemas. Por e!emplo, cuidado con instalar P#P en un directorio como este "c-archivos de pro ramaphp", pues en la ruta tenemos directorios con espacios.

*','*'( Copia de las DLL


, continuacin nos informan sobre la necesidad de copiar en nuestro directorio de sistema una serie de libreras K.dllL, que encontraremos en el directorio sapi de nuestra instalacin de P#P, supuestamente al o como "c-phpsapi", 6l mencionado directorio de sistema puede variar de unas versiones a otras de >indo3s. 6n >indo3s JP, el directorio de sistema donde debemos copiar las dll, es "C->%C/&>5system+)". 6n >indo3s F2NM6, el directorio sera "C->indo3s5ystem" y en >indo3s C4N)*** sera el directorio "C->%CC45ystem+)" o bien, "C->%CC4G*5ystem+)".
-ota" no se deben mezclar las /00 de diversas versiones de P#P, porque de lo contrario, podra causarnos problemas.

*',','( De#inir un arc+ivo p+p'ini


&tro archivo que debemos copiar, esta vez en nuestro directorio >indo3s, es el php.ini, que uarda las opciones de confi uracin definidas para P#P. 6n la distribucin de P#P se incluyen dos archivos php.ini que podemos utilizar directamente en nuestro sistema. 6stos dos archivos se llaman "php.iniPdist" y "php.iniPrecommended" y contienen unas opciones tpicas de confi uracin de P#P. 5e recomienda utilizar "php.iniPrecommended", porque viene optimizado para obtener los me!ores niveles de se uridad. 6n cualquier caso, podemos editar en cualquier momento el contenido del archivo para modificar la confi uracin de P#P a nuestro usto o necesidades. Para definir el php.ini debemos hacer una copia del archivo de confi uracin esco ido K"php.iniPdist" o "php.iniP recommended"L y renombrarlo como el "php.ini". Posteriormente debemos copiarlo en nuestra carpeta >indo3s, que en sistemas F2NM6NJP es "c-3indo3s" y en sistemas C4N)*** suele ser "c->%CC4", o bien "c->%CC4G*".

*','0'( 7ditar +ttpd'con#


Posteriormente deberemos editar nuestro archivo de confi uracin de ,pache, llamado "httpd.conf" que est" en el directorio "conf" de nuestra instalacin de ,pache. 4ambin podemos encontrar un acceso directo para editar este archivo accediendo a %nicio P Pro ramas P ,pache #44P 5erver P Confi ure ,pache #44P 5erver P 6dit httpd.conf confi uration file.

Programacin en PHP: http://www.desarrolloweb.com/manuales/12/


' (os manuales de DesarrolloWeb.com tienen el cop!right de sus autores. )o reproducir sin autorizaci*n.

12

Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com /ebemos a;adir un par de lneas de confi uracin del mdulo de ,pache.
oad!od"le php#$%od"le &:phpsapiphp#apache'.dll AddType application/x-httpd-php .php

6l lu ar adecuado para a;adir esas lneas es en el bloque de car a de mdulos, que podemos encontrar si buscamos por el te2to "0oadModule". Podemos a;adir las lneas de car a del mdulo P#P despus de la car a de los otros mdulos que vienen ya confi urados en archivo httpd.conf de ,pache. 5i no instalamos P#P en el directorio c-php, debemos editar las lneas a colocar en el httpd.conf para colocar la ruta correcta al directorio donde est" la librera phpGapache).dll.

*','4'( =n @ltimo paso


,ntes de acabar y probar si P#P se ha instalado correctamente, necesitamos copiar una dll en el directorio sapi. Concretamente, la dll "phpGts.dll", que podemos encontrar en nuestro directorio de instalacin de P#P es la que debemos copiar al directorio sapi, al o como "c-phpsapi".
-ota" 6sta accin no viene documentada en el manual de P#P, aunque s no la llevamos a cabo no funcionar". 6l error que obtenemos al tratar de arrancar el ,pache es al o como-

Syntax error on line 173 of C !Arc"ivos #e progra$a!Apac"e %roup!Apac"e&!conf!"ttp#'conf Cannot loa# C !p"p!sapi!p"p(apac"e&'#ll into server )o se pue#e encontrar el $*#ulo especifica#o'

&tra confi uracin que podemos aplicar al archivo httpd.conf es definir tambin como documento por defecto el archivo inde2.php en nuestro servidor ,pache. 6l documento por defecto es eneralmente inde2.html, pero lo habitual si vamos a pro ramar con P#P es que tambin necesitemos definir inde2.php como documento a mostrar si no se indica otro documento del directorio al que se est" accediendo. 6l documento por defecto se define con la variable /irectory%nde2. Cos quedar" una deninicin como esta(irectory)ndex index.ht%l index.ht%l.*ar index.php

*','A'( robar si H est #uncionando correctamente


Para terminar, podemos crear una p" ina de prueba de P#P, que colocaremos en nuestro directorio de publicacin de ,pache, eneralmente llamado htdocs, que se alo!a dentro del directorio donde se ha instalado ,pache, al o como "C-,rchivos de pro rama,pache @roup,pache)htdocs" Podemos crear un archivo llamado, por e!emplo, "prueba.php", en el que colocaremos dentro el si uiente cdi o<? phpinfo() ?>

6sta funcin simplemente crear" una p" ina de muestra de las confi uraciones definidas para P#P en ese servidor. Para acceder al archivo creado desde nuestro e2plorador, escribiremos en la barra de direcciones esta I90http-NNlocalhostNprueba.php

Programacin en PHP: http://www.desarrolloweb.com/manuales/12/


' (os manuales de DesarrolloWeb.com tienen el cop!right de sus autores. )o reproducir sin autorizaci*n.

13

Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com /ebera aparecer un resultado como el de la si uiente ima en.

+eferencia" 6n esta M,D damos otras opciones para la instalacin de P#P, utilizando pro ramas que permiten instalar y confi urar ,pache T P#P T My5D0 en un sencillo paso, accesible para todos los usuarios- Cmo instalar P#P en >indo3s.

Artculo por

Miguel Angel Alvarez

*'0'( )nstalar Lamp: Apac+e ( M8<BL ( H : en Linu>


Cmo instalar todos los programas que necesitas para comen!ar a desarrollar con PHP en entornos +inu , (pac%e, PHP y My-.+, lo que se conoce como +amp. Para $istribuciones basadas en $ebian como /buntu o +inu Mint. 6n /esarrollo>eb.com hemos e2plicado en diversos artculos el modo de instalar todos los pro ramas necesarios para empezar a traba!ar con P#P en local sobre sistemas >indo3s, pues tradicionalmente hemos orientado nuestros tutoriales a los usuarios de dicho sistema. 5in embar o, no debemos de olvidarnos de los usuarios de cualquiera de los otros sistemas operativos y en este artculo le toca a @CIN0inu2. /e hecho, si se me permite la apreciacin, aunque P#P es multiplataforma, su entorno m"s natural para e!ecucin es 0inu2, ya que la mayora de los servidores P#P corren ba!o ese sistema operativo. Por ello, para los que somos desarrolladores y que adem"s nos interesa aprender un poco de administracin de servidores, no nos vendra nada mal tener nuestro P#P e!ecutando ba!o una instalacin de 0inu2. ,dem"s, se trata de al o realmente sencillo.
-ota" 62isten otros tutoriales diversos en /esarrollo>eb.com que pueden interesarte si lo que quieres es instalar P#P en otros sistemas operativos.

/ebe haber decenas de maneras de instalar ,pache, P#P y My5D0 sobre @CIN0inu2 y en %nternet encontraremos una ran cantidad de informacin a este respecto. Cosotros vamos a destacar una a continuacin que nos ha funcionado siempre bien, con al unos detalles adicionales que nos pueden facilitar diversas labores de desarrollo en nuestros sistemas. ,dem"s, complementaremos la informacin comentando los pasos para instalar otra herramienta fundamental, como es el PhpMy,dmin.

Programacin en PHP: http://www.desarrolloweb.com/manuales/12/


' (os manuales de DesarrolloWeb.com tienen el cop!right de sus autores. )o reproducir sin autorizaci*n.

14

Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com

*'0'&'( )nstalar los pa!uetes por l$nea de comandos con apt(get


Ramos a instalar todos los paquetes necesarios para poder traba!ar con P#P y lo haremos sobre lnea de comandos, que es un mtodo que difcilmente podr" fallarnos. Para ello utilizaremos el comando aptP et de sistemas basados en /ebian.
-ota" =o estoy traba!ando sobre Ibuntu, por ello voy a utilizar un comando que viene de sistemas /ebian para la descar a de paquetes que es el aptP et. 6se comando, como deca, est" disponible en las distros /ebian, pero tambin en aquellas basadas en /ebian, como Ibuntu o 0inu2 Mint. Ibuntu es el tercer sistema operativo m"s utilizado, creado por Canonical, y Mint sera el cuarto en importancia a nivel mundial. 5i utilizas otro sistema @CIN0inu2 que no est basado en /ebian, esta informacin quiz"s no te servir" de mucho.

Conviene decir que esta receta la hemos obtenido del sitio 3eb #o3toMor e. =o la he traducido libremente y la he complementado con e2plicaciones adicionales y al unos pasos e2tra que he considerado de inters. Como un primer paso, podemos lanzar un comando para obtener los privile ios de root para la administracin a travs de la lnea de comandos.
s"do s"

Cos pedir" la clave de nuestro usuario, que es la misma clave que usamos al arrancar el equipo.

*'0'*'( aso &? )nstalacin de M8<BL


,hora instalaremos My5D0, para lo que e!ecutamos el si uiente comandoapt-+et install %ys,l-ser*er %ys,l-client

/urante el proceso de instalacin tendr"s que introducir la clave que deseas confi urar al usuario root de My5D0.

*'0','( aso *? )nstalar Apac+e


,hora toca instalar el servidor 3eb ,pache, en su versin ). Para instalar ,pache) lanzamos el si uiente comandoapt-+et install apache'

6n este punto, una vez instalado ,pache, puedes hacer una primera comprobacin, que nos permitir" saber si el servidor 3eb est" funcionado correctamente. Para ello abre un nave ador cualquiera e introduce la I90 de localhost o la %P local de tu ordenadorhttp://localhost

& bienhttp://-.'.-/0.1.22 (s"stit"ye esa )3 por la )3 de t" %4,"ina) -ota" 5i no sabes cu"l es tu %P de red local, tienes a tu disposicin en 0inu2 el comando ifconfi .

,l acceder a cualquiera de esas dos I90 debera salirte el mensa!e de ,pache diciendo que est" funcionado K%t 3or:s?L Para tu informacin, el directorio predeterminado donde se uardan los documentos del servidor 3eb en ,pache es NvarN333 y el fichero de confi uracin del servidor est" en NetcNapache)Napache).conf. &tras confi uraciones est"n almacenadas en otros subdirectorios de NetcNapache) como NetcNapache)NmodsPenabled para los mdulos habilitados, NetcNapache)NsitesPenabled para los "virtual hosts" y NetcNapache)Nconf.d para las confi uraciones lobales que afectar"n a todos los virtual host.
-ota" 62iste en /esarrollo>eb.com un manual sobre la instalacin de ,pache en >indo3s, que no te ayudar" mucho si est"s en 0inu2, pero que tiene mucha informacin sobre la confi uracin de ,pache. 4e servir" de ayuda puesto que la mayora de los archivos de confi uracin funcionan e2actamente i ual y las variables de confi uracin son e2actamente las mismas.

Programacin en PHP: http://www.desarrolloweb.com/manuales/12/


' (os manuales de DesarrolloWeb.com tienen el cop!right de sus autores. )o reproducir sin autorizaci*n.

15

Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com

*'0'0'( aso ,? )nstalar H


6l si uiente paso es %nstalar P#P. 0a versin actual en el momento de escribir este artculo es la (, que se instalara con el si uiente comando.
apt-+et install php2 li5apache'-%od-php2

/espus de la instalacin de P#P( como mdulo de ,pache, debemos reiniciar el servidor 3eb y para ello lanzamos este otro comando.
/etc/init.d/apache' restart

Como puedes ver, hacemos un "restart", pero tambin podras hacer primero un "stop" y lue o un "start". 0le ado este punto, podemos crear ya un documento 3eb que nos sirva para comprobar si P#P est" correctamente instalado en nuestro sistema y para ello podemos utilizar la lnea de comandos y el editor que prefieras. , al unas personas les usta el editor llamado Ri, pero yo soy de los que prefiere otros m"s sencillos como el .oe.
-ota" Para conocer m"s acerca del pro rama .oe, puedes visitar la M,D- A5abis de una alternativa a RiB

6n cualquier caso, tendr"s que crear un archivo en la ruta por defecto de publicacin del ,pache, que ya di!imos es NvarN333. Puedes llamarle como desees, por e!emplo info.php, en el que colocar"s las si uientes lneas de cdi o.
<?php phpinfo(); ?>

6sa funcin de P#P phpinfoKL te mostrar" mucha informacin 7til sobre la instalacin de P#P que tienes en tu m"quina, como mdulos incluidos y diferentes confi uraciones en funcionamiento.
-ota" para crear el archivo P#P tambin puedes utilizar el editor r"fico que desees, que te ser" incluso m"s cmodo que cualquier pro rama que traba!e con el terminal. 6l 7nico detalle es aplicarle los permisos necesarios a la carpeta NvarN333 para que sea propiedad de tu usuario y puedas ciertas cosas con ella. 4en en cuenta que ponerse como usuario due;o de la carpeta se recomienda solo sitios que no estn en produccin. 0o haras con el comandos"do cho6n -7 89S:7:89S:7 /*ar/666 5i lo deseas, tambin puedes hacer el comando echo 89S:7 Para ver el nombre del usuario en el que est"s y el que vas a poner como duelo de la carpeta NvarN333 .

Ina vez creado el archivo de te2to info.php con el cdi o indicado, podemos acceder a l desde un nave ador con una I90 como estahttp://localhost/info.php

4ambin puedes sustituir "localhost" por tu direccin %P de red local.

5i ves toda una serie de informacin de tu instalacin P#P, como en la ima en anterior, es que has podido instalar P#P en correctas condiciones.

*'0'4'( aso 0? )nstalar mdulo H 4(m8s!l 8 otras e>tensiones H necesarias


5i haces scroll hacia aba!o en la p" ina del phpinfoKL podr"s ver el listado de mdulos P#P que tienes disponibles.

Programacin en PHP: http://www.desarrolloweb.com/manuales/12/


' (os manuales de DesarrolloWeb.com tienen el cop!right de sus autores. )o reproducir sin autorizaci*n.

16

Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com Puede que no ten as todos los que necesitas y en concreto podr"s observar que no tienes habilitado el mdulo de My5D0, por lo que podr"s instalarlo. 5i haces el comandoapt-cache search php2

Podr"s encontrar el listado de e2tensiones de P#P disponibles en los repositorios, puedes ele ir aquellos que desees e instalarlos con la lneaapt-+et install php2-%ys,l php2-c"rl php2-+d php-pear php2-i%a+ic; php2-s,lite php2-tidy php2-x%lrpc php2-xsl

, continuacin debes reiniciar el servidor para que los cambios ten an efecto.
/etc/init.d/apache' restart

5i refrescas la p" ina del phpinfoKL podr"s encontrar los nuevos mdulos instalados.

*'0'A'( aso 4 opcional? )nstalar +pM8Admin


5e uramente a radecer"s contar con una copia de PhpMy,dmin para estionar tus bases de datos My5D0. Para ello puedes invocar el comandoapt-+et install php%yad%in

Rer"s a continuacin una serie de pre untas, como tu servidor 3eb. Ina vez instalado puedes acceder al estor por medio de una I90 como estahttp://localhost/php%yad%in/

*'0'C'( Conclusin
Con este proceso tendr"s a tu disposicin todos los materiales para comenzar a desarrollar con P#P en tu 0inu2. 5implemente se;alar un detalle importante, que ya se apunt de refiln, pero que quiero remarcar. 6s posible que en esta instalacin de ,pache y P#P quieras desarrollar sitios 3eb y utilizar para pro ramar dichos sitios un editor para pro ramadores con interfaz r"fica como Uomodo 6dit o 6clipse. 6n este caso recuerda que, para editar o crear archivos en la carpeta NvarN333 desde esos pro ramas, tendr"s que poner tu usuario como due;o de la carpeta, con cho3n. 6so se e2plic en una nota anterior.
+eferencia" Para optimizar la confi uracin de tu ,pache en 0inu2 de una manera muy pr"ctica para tu servidor de desarrollo, te aconse!amos la lectura del artculo Confi uracin de ,pache en 0inu2 con carpetas e2ternas.

/e momento es todo? 6spero que te sirva?


Artculo por

Miguel Angel Alvarez

*'4'( )nstalacin de M8<BL en 1indo2s


Pasos a seguir para la instalacin de la base de datos My-.+ y algunas ayudas bsicas para comen!ar con buen pie. Ino de los puntos fuertes de las p" inas en P#P es la posibilidad de e2plotar bases de datos mediante funciones de una simplicidad y potencia muy a radecidas. 6stas bases de datos pueden servir a nuestro sitio para almacenar contenidos de una forma sistem"tica que nos permita clasificarlos, buscarlos y editarlos r"pida y f"cilmente. Ina base de datos es sencillamente un con!unto de tablas en las que almacenamos distintos re istros Kartculos de una

Programacin en PHP: http://www.desarrolloweb.com/manuales/12/


' (os manuales de DesarrolloWeb.com tienen el cop!right de sus autores. )o reproducir sin autorizaci*n.

17

Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com tienda virtual, proveedores o clientes de una empresa, pelculas en cartelera en el cine...L. 6stos re istros son catalo ados en funcin de distintos par"metros que los caracterizan y que presentan una utilidad a la hora de clasificarlos. ,s, por e!emplo, los artculos de una tienda virtual podran catalo arse a partir de distintos campos como puede ser un n7mero de referencia, nombre del artculo, descripcin, precio, proveedor... 0a base de datos m"s difundida con el tandem IC%JP,pache es sin duda My5D0. Como para el caso de ,pache, una versin para >indo3s est" disponible y puede ser descargada ratis. 5u puesta a punto no entra;a mucha dificultad. Ina vez instalado el pro rama podemos e!ecutar nuestras ordenes en modo M5P/&5. Para ello abrimos una ventana M5P/&5 y nos colocamos en el directorio bin de mysql. 6n este directorio se encuentran los archivos e!ecutables. ,qu habr" que encontrar un archivo llamado mysqld. 6n el caso de la versin m"s actual durante la redaccin de este articulo este archivo es llamado mysqldPshare3are. Ina vez e!ecutado este archivo podemos e!ecutar el si uiente- mysql. 0le ados a este punto veremos cmo un mensa!e de bienvenida aparece en nuestra pantalla. 6n estos momentos nos encontramos dentro de la base de datos. , partir de ah podemos realizar todo tipo de operaciones por sentencias 5D0. Co vamos a entrar en una e2plicacin pormenorizada del funcionamiento de esta base de datos ya que esto nos dara para un manual entero. /aremos como referencia nuestro tutorial de %&L a partir del cual se puede tener una idea muy pr"ctica de las sentencias necesarias para la creacin y edicin de las tablas. 4ambin e2iste una documentacin e2tensa en in ls en el directorio Docs de My5D0. , modo de resumen, aqu os proponemos adem"s las operaciones m"s b"sicas que, combinadas nuestro tutorial de %&L pueden dar solucin a ran parte de los casos que se os presenten-

)nstruccin 4how databases8

Descripcin 3uestra el con,unto de bases de datos presentes en el ser-idor Determina la base de datos sobre la 1ue -amos a traba,ar +rea una nue-a bd con el nombre especi&icado Elimina la base de datos del nombre especi&icado 3uestra las tablas presentes en la base de datos actual Describe los campos 1ue componen la tabla

9se nombre:de:la:base +reate Database nombre:de:la:base8 Drop Database nombre:de:la:base8 4how tables8 Describe nombre:de:la:tabla8 Drop #able nombre:de:la:tabla8 (oad Data (ocal "n&ile <archi-o.t.t< "nto #able

;orra la tabla de la base de datos +rea los registros de la tabla a partir de un &ichero de te.to en el 1ue separamos por

Programacin en PHP: http://www.desarrolloweb.com/manuales/12/


' (os manuales de DesarrolloWeb.com tienen el cop!right de sus autores. )o reproducir sin autorizaci*n.

18

Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com

nombre:de:la:tabla8 5uit

tabulaciones todos los campos de un mismo registro. 4alir de 3!45(

Para evitarnos el tener que editar nuestras tablas directamente sobre archivos de te2to, puede resultar muy pr"ctico usar cualquier otra base de datos con un editor y e2portar a continuacin la tabla en un archivo de te2to confi urado para de!ar tabulaciones entre cada campo. 6sto es posible en ,ccess por e!emplo pinchando con el botn derecho sobre la tabla que queremos convertir y eli iendo la opcin e2portar. Ina ventana de dialo o aparecer" en la que ele iremos uardar el archivo en tipo te2to. 6l paso si uiente ser" ele ir un formato delimitado por tabulaciones sin cualificador de te2to. &tra posibilidad que puede resultar muy pr"ctica y que nos evita traba!ar continuamente tecleando rdenes al estilo de anta;o es servirse de pro ramas en P#P o Perl ya e2istentes y descar ables en la red. 6l m"s popular sin duda es php(y#dmin. 6ste tipo de scripts son e!ecutados desde un nave ador y pueden ser por tanto alber ados en nuestro servidor o empleados en local para, a partir de ellos, administrar My5D0 de una forma menos sufrida. ,simismo, dentro del directorio bin de My5D0, podemos encontrar una peque;a aplicacin llamada My5qlMana er. 5e trata de una interface 3indo3s, m"s a radable a la vista y al uso que la que obtenemos e!ecutando el archivo mysql. 6n este caso, las sentencias 5D0 deben realizarse sin el punto y coma final.
Artculo por

Rubn Alvarez

*'A'( )nstalando H con ))<


Cmo instalar paso a paso PHP con ''-. /escar ar archivos de http-NN333.php.netNdo3nloads.php$v( 5e recomienda ba!ar los archivos P#P (.).' zip pac:a e y las e2tensiones adicionales P6C0 P6C0 (.).' >in+) binaries '. Crear directorio en C-P#P y e2traer los archivos de ph (.)'zip pac:a e y e2traer los archivos de P6C0 (.).' >%C+) binaries en el directorio C-P#P6J4. ). 9enombrar el archivio php.iniPrecommended como php.ini +. Modificar archivo php.ini en las si uientes variables shortSopenSta V &n e2tensionSdir V "c-phpe2t" c i.forceSredirect V * G. Copiar php.ini a c-3indo3s o c-3innt (. 9e istrar la /00 re svr+) php(activescript.dll H. , re ar ruta de del directorio php y las e2tenciones en la opcion de 6nvironment Rariable de 3indo3s)**+

Programacin en PHP: http://www.desarrolloweb.com/manuales/12/


' (os manuales de DesarrolloWeb.com tienen el cop!right de sus autores. )o reproducir sin autorizaci*n.

19

Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com

O.

Confi uracin en %%5

Programacin en PHP: http://www.desarrolloweb.com/manuales/12/


' (os manuales de DesarrolloWeb.com tienen el cop!right de sus autores. )o reproducir sin autorizaci*n.

20

Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com

Programacin en PHP: http://www.desarrolloweb.com/manuales/12/


' (os manuales de DesarrolloWeb.com tienen el cop!right de sus autores. )o reproducir sin autorizaci*n.

21

Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com

Q. Confi urando e2tensiones en %%5

Programacin en PHP: http://www.desarrolloweb.com/manuales/12/


' (os manuales de DesarrolloWeb.com tienen el cop!right de sus autores. )o reproducir sin autorizaci*n.

22

Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com

F. Probando P#P Crear archivo inde2.php en C-%netpub333root

Programacin en PHP: http://www.desarrolloweb.com/manuales/12/


' (os manuales de DesarrolloWeb.com tienen el cop!right de sus autores. )o reproducir sin autorizaci*n.

23

Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com Copiar el codi o si uiente en el archivo
<<?php // testin+ sessions // chec; to see if files are 5ein+ created // in the session.sa*e$path folder session$start(); ?> <ht%l> <head> <title>3<3 Test</title> </head> <5ody> <p> The 5ro6ser yo"=re "sin+ is <?php echo 8$S:7>:7?=<TT3$9S:7$A@:AT=B; ?> </p> <p> <C-- test the 5ro6scap set"p --> Do"r 5ro6ser=s capa5ilities are: <5r/> <pre> <?php print$r(+et$5ro6ser(n"llE tr"e)); ?> </pre> </p> <?php phpinfo(); ?> </5ody> </ht%l>

). ,brir %6H y poner la direccin http-NNlocalhostNinde2.php, si le da error verificar los pasos de la instalacin. 5i no da error saldra una pantalla con informacin sobre la versin de php.
Artculo por

+orge Ra$os

Programacin en PHP: http://www.desarrolloweb.com/manuales/12/


' (os manuales de DesarrolloWeb.com tienen el cop!right de sus autores. )o reproducir sin autorizaci*n.

24

Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com

Parte 3:

Primeros pasos con el lenguaje PHP


Empezamos a traba,ar con el lengua,e de programaci*n. En los siguientes captulos del 3anual de /0/ e.plicaremos las generalidades sobre el lengua,e6 como su sinta.is6 las -ariables 1ue podemos crear ! sus tipos de datos6 las -ariables del sistema 1ue est2n disponibles sobre el ser-idor6 operadores6 etc.

,'&'( )ntroduccin a la sinta>is H


E plicamos las pautas principales a seguir para incluir PHP en el cdigo de nuestra pgina, la forma de introducir comentarios. P#P se escribe dentro de la propia p" ina 3eb, !unto con el cdi o #4M0 y, como para cualquier otro tipo de len ua!e incluido en un cdi o #4M0, en P#P necesitamos especificar cu"les son las partes constitutivas del cdi o escritas en este len ua!e. 6sto se hace, como en otros casos, delimitando nuestro cdi o por etiquetas. Podemos utilizar distintos modelos de etiquetas en funcin de nuestras preferencias y costumbres. #ay que tener sin embar o en cuenta que no necesariamente todas est"n confi uradas inicialmente y que otras, como es el caso de WX y XY slo est"n disponibles a partir de una determinada versin K+.*.G.L. 6stos modos de abrir y cerrar las etiquetas son<? y ?> <F y F> <?php y ?> <script lan+"a+eG"php">

6ste ultimo modo est" principalmente aconse!ado a aquellos que ten an el valor de traba!ar con Mront Pa e ya que, usando cualquier otro tipo de etiqueta, corremos el ries o de que la aplicacin nos la borre sin m"s debido a que se trata de un cdi o incomprensible para ella. 6l modo de funcionamiento de una p" ina P#P, a randes ras os, no difiere del cl"sico para una p" ina din"mica de lado servidor- 6l servidor va a reconocer la e2tensin correspondiente a la p" ina P#P Kphtml, php, phpG,...L y antes de enviarla al nave ador va a encar arse de interpretar y e!ecutar todo aquello que se encuentre entre las etiquetas correspondientes al len ua!e P#P. 6l resto, lo enviara sin m"s ya que, asumir" que se trata de cdi o #4M0 absolutamente comprensible por el nave ador. &tra caracterstica eneral de los scripts en P#P es la forma de separar las distintas instrucciones. Para hacerlo, hay que acabar cada instruccin con un punto y coma "Z". Para la ultima e2presin, la que va antes del cierre de etiqueta, este formalismo no es necesario. %ncluimos tambin en este capitulo la sinta2is de comentarios. In comentario, para aquellos que no lo sepan, es una frase o palabra que nosotros incluimos en el cdi o para comprenderlo m"s f"cilmente al volverlo a leer un tiempo

Programacin en PHP: http://www.desarrolloweb.com/manuales/12/


' (os manuales de DesarrolloWeb.com tienen el cop!right de sus autores. )o reproducir sin autorizaci*n.

25

Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com despus y que, por supuesto, el ordenador tiene que i norar ya que no va diri ido a l sino a nosotros mismos. 0os comentarios tienen una ran utilidad ya que es muy f"cil olvidarse del funcionamiento de un script pro ramado un tiempo atr"s y resulta muy 7til si queremos hacer r"pidamente comprensible nuestro cdi o a otra persona. Pues bien, la forma de incluir estos comentarios es variable dependiendo si queremos escribir una lnea o m"s. Reamos esto con un primer e!emplo de script<? 8%ensaHeG"Ten+o ha%5reCC"; //&o%entario de "na linea echo 8%ensaHe; I:ste co%entario ta%5iJn es de "na linea /K:n este caso %i co%entario oc"pa *arias lineasE lo *es? K/ ?>

.jecutar script 5i usamos doble barra KNNL o el smbolo $ podemos introducir comentarios de una lnea. Mediante N[ y [N creamos comentarios multilnea. Por supuesto, nada nos impide de usar estos 7ltimos en una sola lnea. Co os preocupis si no comprendis el te2to entre las etiquetas, todo lle ar". &s adelantamos que las variables en P#P se definen anteponiendo un smbolo de dlar K\L y que la instruccin echo sirve para sacar en pantalla lo que hay escrito a continuacin. 9ecordamos que todo el te2to insertado en forma de comentario es completamente i norado por el servidor. 9esulta importante acostumbrarse a de!ar comentarios, es al o que se a radece con el tiempo.
Artculo por

Rubn Alvarez

,'*'( Dariables en H
0ipos de variables, caracter1sticas generales y aspectos espec1ficos de PHP de estos elementos bsicos de la programacin. 0as variables son uno de los primeros temas que tenemos que conocer en P#P y en la mayora de los len ua!es de pro ramacin. ,s que a continuacin vamos a tratar este tema dentro del Manual de P#P, e2plicando los tipos de variables que podremos encontrar. ,nteriormente en /esarrollo>eb.com, en el manual de p" inas din"micas, ya habamos introducido el concepto de variable. 6n el captulo anterior coment"bamos que, para P#P, las variables eran definidas anteponiendo el smbolo dlar K\L al nombre de la variable que est"bamos definiendo. /ependiendo de la informacin que conten a, una variable puede ser considerada de uno u otro tipo-

Dariables numricas 7lmacenan ci&ras Enteros Real =entero>2??28 =real>@.%4%$A8 )umeros sin decimales )umeros con o sin decimal

Dariables al#anumricas 7lmacenan te.tos compuestos de nBmeros !/o ci&ras

Programacin en PHP: http://www.desarrolloweb.com/manuales/12/


' (os manuales de DesarrolloWeb.com tienen el cop!right de sus autores. )o reproducir sin autorizaci*n.

26

Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com

+adenas 7lmacenan -ariables al&anumCricas

=cadena><0ola amigo<8

-ablas 7lmacenan series de in&ormaciones numCricas !/o al&anumCricas =sentidoD%E><-er<8 =sentidoD2E><tocar<8 =sentidoD@E><oir<8 =sentidoD4E><gusto<8 =sentidoD$E><oler<8

7rra!s 4on las -ariables 1ue guardan las tablas

EbFetos 4e trata de con,untos de -ariables ! &unciones asociadas. /resentan una comple,idad ma!or 1ue las -ariables -istas hasta ahora pero su utilidad es m2s 1ue interesante.
, diferencia de otros len ua!es, P#P posee una ran fle2ibilidad a la hora de operar con variables. 6n efecto, cuando definimos una variable asi n"ndole un valor, el ordenador le atribuye un tipo. 5i por e!emplo definimos una variable entre comillas, la variable ser" considerada de tipo cadena8*aria5leG"2"; //esto es "na cadena

5in embar o si pedimos en nuestro script realizar una operacin matem"tica con esta variable, no obtendremos un mensa!e de error sino que la variable cadena ser" asimilada a numrica<? 8cadenaG"2"; //esto es "na cadena 8enteroGL; //esto es "n entero echo 8cadenaM8entero ?>

.jecutar script 6ste script dar" como resultado "Q". 0a variable cadena ha sido asimilada en entero Kaunque su tipo si ue siendo cadenaL para poder realizar la operacin matem"tica. /el mismo modo, podemos operar entre variables tipo entero y real. Co debemos preocuparnos de nada, P#P se encar a durante la e!ecucin de interpretar el tipo de variable necesario para el buen funcionamiento del pro rama. 5in embar o, en contraste, hay que tener cuidado en no cambiar may7sculas por min7sculas ya que, en este sentido, P#P es sensible. Conviene por lo tanto traba!ar ya sea siempre en may7sculas o siempre en min7sculas para evitar este tipo de malentendidos a veces muy difciles de localizar. )ariables asignadas por referencia 6n P#P tambin podemos asi nar variables por referencia. 6n ese caso no se les asi na un valor, sino otra variable, de tal modo que las dos varialbles comparten espacio en memoria para el mismo dato. 0a notacin para asi nar por referencia es colocar un "]" antes del nombre de la variable.
<?php 8foo G =No5=; // Asi+na el *alor =No5= a 8foo 85ar G O8foo; // 7eferencia 8foo *Pa 85ar. 85ar G "!i no%5re es 85ar"; // !odifica 85ar... echo 8foo; // 8foo ta%5iJn se %odifica. echo 85ar; ?>

6sto dar" como resultado la visualizacin dos veces del strin "Mi nombre es 8ob". ,l o como-

Programacin en PHP: http://www.desarrolloweb.com/manuales/12/


' (os manuales de DesarrolloWeb.com tienen el cop!right de sus autores. )o reproducir sin autorizaci*n.

27

Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com Mi nombre es 8obMi nombre es 8ob
-ota" 4enemos un videotutorial que nos habla de las variables P#P

Artculo por

Rubn Alvarez

,','( Cambio del tipo de las variables en H


2ormas en que una variable de PHP puede ver variado su tipo. P#P no requiere que indiquemos el tipo que va a contener una variable, sino que lo deduce del valor que asi nemos a la variable. ,simismo, se encar a de actualizar autom"ticamente el tipo de la variable cada vez que le asi namos un nuevo valor. Por ello, para cambiar el tipo de una variable simplemente le asi namos un valor con un nuevo tipo.
-ota" 5e e2cluyen en este caso el cambio de variables a tipo ,rray porque la sinta2is puede resultar ambi ua al e2presar ese cdi o, es decir, puede darse el caso de que una lnea de cdi o pueda si nificar dos cosas.

\a V "'"Z NN\a es una cadena \a^*_ V "f"Z NNA6stamos editando el ndice de la cadena o forzando a arrayB

,','&'( .orzado
6n cualquier caso, podemos forzar una variable para que cambie de tipo con la funcin set4ypeKL. set4ypeK\variable,"nuevoStipo"LZ la funcin set4ypeKL actualiza el tipo de \variable a "nuevoStipo" y devuelve un boleano indicando si hubo 2ito o no en la conversin. 6ntre "nuevoStipo" tenemos` "inte er" ` "double" ` "strin " ` "array" ` "ob!ect" 4ambin podemos hacer que una variable se comporte como un tipo determinado forz"ndola, de la misma manera a como se hace en el len ua!e C. \variable V ")+"Z \variable V KintL \variableZ 0os forzados permitidos son-

Programacin en PHP: http://www.desarrolloweb.com/manuales/12/


' (os manuales de DesarrolloWeb.com tienen el cop!right de sus autores. )o reproducir sin autorizaci*n.

28

Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com ` KintL, Kinte erL P fuerza a entero Kinte erL ` KrealL, KdoubleL, KfloatL P fuerza a doble KdoubleL ` Kstrin L P fuerza a cadena Kstrin L ` KarrayL P fuerza a array KarrayL Kob!ectL P fuerza a ob!eto Kob!ectL
Artculo por

Miguel Angel Alvarez

,'0'( Dariables de sistema en H


.u# son y para qu# sirven estas variables del servidor. Comentamos algunas de las ms 3tiles. /ada su naturaleza de len ua!e de lado servidor, P#P es capaz de darnos acceso a toda una serie de variables que nos informan sobre nuestro servidor y sobre el cliente. 0a informacin de estas variables es atribuida por el servidor y en nin 7n caso nos es posible modificar sus valores directamente mediante el script. Para hacerlo es necesario influir directamente sobre la propiedad que definen. 62isten multitud de variables de este tipo, al unas sin utilidad aparente y otras realmente interesantes y con una aplicacin directa para nuestro sitio 3eb. ,qu os enumeramos al unas de estas variables y la informacin que nos aportan-

Dariable

Descripcin

)os in&orma principalmente sobre el sistema operati-o ! tipo ! -ersi*n de na-egador utilizado por el internauta. 4u principal utilidad radica en 1ue6 a partir =0##/:94ER:7FE de esta in&ormaci*n6 podemos redireccionar nuestros )# usuarios hacia p2ginas optimizadas para su na-egador o realizar cual1uier 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 =0##/:7++E/#:( lengua o lenguas principales pueden ser elegidas en el 7)F97FE menB de opciones del na-egador. Esta -ariable resulta tambiCn e.tremadamente Btil para en-iar al internauta a las p2ginas escritas en su lengua6 si es 1ue e.isten. )os indica la 9R( desde la cual el internauta ha tenido acceso a la p2gina. 3u! interesante para generar =0##/:REGERER botones de <7tr2s< din2micos o para crear nuestros propios sistemas de estadsticas de -isitas. =/0/:4E(G )os de-uel-e una cadena con la 9R( del script 1ue est2 siendo e,ecutado. 3u! interesante para crear botones

Programacin en PHP: http://www.desarrolloweb.com/manuales/12/


' (os manuales de DesarrolloWeb.com tienen el cop!right de sus autores. )o reproducir sin autorizaci*n.

29

Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com

para recargar la p2gina. 4e trata de un arra! 1ue almacena los nombres ! =0##/:FE#:H7R4 contenidos de las -ariables en-iadas al script por 9R( o por &ormularios FE# 4e trata de un arra! 1ue almacena los nombres ! =0##/:/I4#:H7R4 contenidos de las -ariables en-iadas al script por medio de un &ormulario /I4# 4e trata de un arra! 1ue almacena los nombres ! =0##/:+IIJ"E:H7 contenidos de las cooKies. Heremos 1uC son m2s R4 adelante. 7lmacena la -ariable usuario cuando se e&ectBa la entrada a p2ginas de acceso restringido. +ombinado =/0/:79#0:94ER con =/0/:79#0:/W resulta ideal para controlar el acceso a las p2ginas internas del sitio. 7lmacena la -ariable password cuando se e&ectBa la entrada a p2ginas de acceso restringido. +ombinado =/0/:79#0:/W con =/0/:79#0:94ER resulta ideal para controlar el acceso a las p2ginas internas del sitio. =RE3I#E:7DDR 3uestra la direcci*n "/ del -isitante. =DI+93E)#:RII )os de-uel-e el path &sico en el 1ue se encuentra # alo,ada la p2gina en el ser-idor. =/0/4E44"D Fuarda el identi&icador de sesi*n del usuario. Heremos m2s adelante en 1uC consisten las sesiones.

Co todas estas variables est"n disponibles en la totalidad de servidores o en determinadas versiones de un mismo servidor. adem"s, al unas de ellas han de ser previamente activadas o definidas por medio de al 7n acontecimiento. ,s, por e!emplo, la variable \#44PS96M6969 no estar" definida a menos que el internauta acceda al script a partir de un enlace desde otra p" ina.

,'0'&'( Dariables superglobales


, partir de P#P G.'.*, se dispone de un con!unto de varibles de tipo array que mantienen informacin del sistema, llamadas super lobales porque se definen autom"ticamente en un "mbito lobal. 6stas variables hacen referencia a las mismas que se accedan antes por medio de los arrays del tipo \#44PS[SR,95. astas todava e2isten, aunque a partir de P#P (.*.* se pueden desactivar con la directiva re isterSlon Sarrays. 0a lista de estas variables, e2trada directamente de la documentacin de P#P es la si uiente-

Programacin en PHP: http://www.desarrolloweb.com/manuales/12/


' (os manuales de DesarrolloWeb.com tienen el cop!right de sus autores. )o reproducir sin autorizaci*n.

30

Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com

,'0'*'( G/LEBAL<
Contiene una referencia a cada variable disponible en el espectro de las variables del script. 0as llaves de esta matriz son los nombres de las variables lobales. \@0&8,05 e2iste dese P#P +. /0%.+).+ Rariables definidas por el servidor 3eb directamente relacionadas con el entorno en don el script se esta e!ecutando. ,n"lo a a la anti ua matriz \#44PS569R69SR,95 Kla cual est" todava disponible, aunque no se useL. /01.' Rariables proporcionadas al script por medio de #44P @64. ,n"lo a a la anti ua matriz \#44PS@64SR,95 Kla cual est" todava disponible, aunque no se useL. /0P2%' Rariables proporcionadas al script por medio de #44P P&54. ,n"lo a a la anti ua matriz \#44PSP&54SR,95 Kla cual est" todava disponible, aunque no se useL. /03224*. Rariables proporcionadas al script por medio de #44P coo:ies. ,n"lo a a la anti ua matriz \#44PSC&&U%6SR,95 Kla cual est" todava disponible, aunque no se useL. /05*L.% Rariables proporcionadas al script por medio de la subida de ficheros via #44P . ,n"lo a a la anti ua matriz \#44PSP&54SM%065 Kla cual est" todava disponible, aunque no se useL. Rea tambin 5ubiendo ficheros por mtodo P&54 para m"s informacin. /0.-) Rariables proporcionadas al script por medio del entorno. ,n"lo a a la anti ua matriz \#44PS6CRSR,95 Kla cual est" todava disponible, aunque no se useL. /0+.&6.%' Rariables proporcionadas al script por medio de cuaquier mecanismo de entrada del usuario y por lo tanto no se puede confiar en ellas. 0a presencia y el orden en que aparecen las variables en esta matriz es definido por la directiva de confi uracin variablesSorder. 6sta matriz no tiene un an"lo o en versiones anteriores a P#P G.'.*. Rea tambin importSrequestSvariablesKL. /0%.%%*2Rariables re istradas en la sesin del script. ,n"lo a a la anti ua matriz \#44PS5655%&CSR,95 Kla cual est" todava disponible, aunque no se useL. Rea tambin la seccin Munciones para el mane!o de sessiones para m"s informacin.
Artculo por

Rubn Alvarez

,'4'( Hmbito de las variables en H


E plicamos con detalle el mbito de e istencia de una variable en PHP y distinguimos entre variables globales y locales. 6n cualquier len ua!e de pro ramacin las variables tienen un "mbito, que es el lu ar o lu ares donde tienen validez. 6l "mbito vara en funcin de donde se hayan creado esas variables, pudiendo ser lobales o locales. 6n P#P, todas las variables creadas en la p" ina, fuera de funciones, son variables lobales a la p" ina. Por su parte, las variables creadas dentro de una funcin son variables locales a esa funcin.

Programacin en PHP: http://www.desarrolloweb.com/manuales/12/


' (os manuales de DesarrolloWeb.com tienen el cop!right de sus autores. )o reproducir sin autorizaci*n.

31

Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com 0as variables lobales se pueden acceder en cualquier lu ar de la p" ina, mientras que las variables locales slo tienen validez dentro de la funcin donde han sido creadas. /e modo que una variable lobal la podemos acceder dentro de cualquier parte del cdi o, mientras que si intentamos acceder a una variable local fuera de la funcin donde fue creada, nos encontraremos con que esa variable no tiene contenido al uno. ,hora bien, si intentamos acceder a una variable lobal dentro de una funcin, en principio tambin nos encontraremos con que no se tiene acceso a su valor. 6sto es as en P#P por motivos de claridad del cdi o, para evitar que se pueda prestar a confusin el hecho de usar dentro de una funcin una variable que no ha sido declarada por nin 7n sitio cercano.
-ota" tal vez resulten desconocidos los conceptos sobre funciones, que se tratan m"s adelante en este manual- funciones en P#P

6ntonces, si queremos utilizar una variable lobal a la p" ina dentro de una funcin, tenemos que especificar de al una manera que esa variable que vamos a utilizar es una lobal. 62isten en P#P un par de maneras de utilizar variables lobales a la p" ina dentro de una funcin. 5on las si uientes(atriz 1L27#L% 62iste un array en P#P llamado \@0&8,05, que uarda una referencia a todas las variables creadas de manera lobal a la p" ina. 6s una matriz o array asociativo, de los que en lu ar de ndices numricos utilizan ndices de te2to, donde cada ndice es el nombre que hemos dado a la variable y cada valor es el contenido de cada variable. 5upon amos que tenemos esta declaracin de variables lobales a la p" ina, es decir, fuera de cualquier funcin8%i*aria5le G "pepe"; 8otra*aria5le G -'L#;

5i queremos acceder a esas variables dentro de una funcin utilizando el array \@0&8,05 tendramos este cdi of"nction %if"ncion()Q //estoy dentro de la f"nciRnE para aceder a las *aria5les "tiliSo 8@ TNA S echo 8@ TNA S?"%i*aria5le"B; echo 8@ TNA S?"otra*aria5le"B; U

Como se puede ver, se accede al contenido de las variables lobales con el array \@0&8,05, utilizando como ndices de la matriz los nombres de variables que deseamos mostrar. 6sto imprimira por pantalla el te2to "pepe')+G", el valor de las dos variables uno detr"s del otro. 8eclaracin de uso de variables globales dentro de una funcin &tra cosa que podemos hacer para acceder a variables lobales dentro de una funcin es especificar al comienzo de dicha funcin la lista de variables que vamos a utilizar dentro. Para especificar esas variables utilizamos la palabra " lobal" se uida de la lista de variables que se van a utilizar del entorno lobal.
f"nction %if"ncion()Q +lo5al 8%i*aria5leE 8otra*aria5le //con esa lPnea dentro de la f"nciRnE declara%os el "so de *aria5les +lo5ales echo 8%i*aria5le; echo 8otra*aria5le; U

Como vemos, con " lobal" se especifica que vamos a utilizar unas variables que fueron declaradas como lobales a la p" ina. Ina vez hecho esto, ya podemos acceder a esas variables lobales como si estuvieran declaradas dentro de la funcin. Cualquier alteracin que ha amos a las variables dentro de la funcin permanecer" cuando se haya salido de la funcin, tanto si accedemos a travs del array \@0&8,05 o declarando con " lobal" el uso de esas variables.
Artculo por

Miguel Angel Alvarez

Programacin en PHP: http://www.desarrolloweb.com/manuales/12/


' (os manuales de DesarrolloWeb.com tienen el cop!right de sus autores. )o reproducir sin autorizaci*n.

32

Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com

,'A'( Eperadores
+ista descriptiva de los operadores ms frecuentemente utili!ados 0as variables, como base de informacin de un len ua!e, pueden ser creadas, modificadas y comparadas con otras por medio de los llamados operadores. 6n los captulos anteriores hemos utilizado en nuestros e!emplos al unos de ellos. 6n este captulo pretendemos listar los m"s importantes y as dar constancia de ellos para futuros e!emplos.

,'A'&'( Eperadores aritmticos


Cos permiten realizar operaciones numricas con nuestras variables

I ( J 5 K

4uma Resta 3ultiplicaci*n Di-isi*n De-uel-e el resto de la di-isi*n

+eferencia" 6l operador aritmtico que puede resultar m"s desconocido para los lectores es el operador X. 62plicamos con mayor detenimiento su funcionamiento y un e!emplo en el que es 7til en el taller- 0istas de elementos con colores alternos en P#P.

,'A'*'( Eperadores de comparacin


5e utilizan principalmente en nuestras condiciones para comparar dos variables y verificar si cumple o no la propiedad del operador.

LL "gualdad ML Desigual N 3enor 1ue NL 3enor igual 1ue O 3a!or 1ue

Programacin en PHP: http://www.desarrolloweb.com/manuales/12/


' (os manuales de DesarrolloWeb.com tienen el cop!right de sus autores. )o reproducir sin autorizaci*n.

33

Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com

OL 3a!or igual 1ue

,'A','( Eperadores lgicos


5e usan en combinacin con los operadores de comparacin cuando la e2presin de la condicin lo requiere.

7nd Er M

L I )o

,'A'0'( Eperadores de incremento


5irven para aumentar o disminuir de una unidad el valor de una variable

MM=-ariable

7umenta de % el -alor de =-ariable Reduce de uno el -alor de =-ariable

NN=-ariable

,'A'4'( Eperadores combinados


Ina forma habitual de modificar el valor de las variables es mediante los operadores combinados-

=-ariable IL %? =-ariable (L %? =-ariable 'L <aOado<

4uma %? a =-ariable Resta %? a =-ariable +oncatena las cadenas =-ariable ! <aOado<

6ste tipo de e2presiones no son m"s que abreviaciones de otras formas m"s cl"sicas\variable TV '* es lo mismo que\variable V \variableT'*
Artculo por

Rubn Alvarez

Programacin en PHP: http://www.desarrolloweb.com/manuales/12/


' (os manuales de DesarrolloWeb.com tienen el cop!right de sus autores. )o reproducir sin autorizaci*n.

34

Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com

Parte 4:

rrays y ca!enas

)os detenemos para -er c*mo son los arra!s en /0/6 la estructura de datos m2s esencial 1ue e.iste. 7dem2s aprenderemos a traba,ar con cadenas en /0/.

0'&'( -ablas o Arra8s en H


Creacin de tablas por medio de variables tipo array. /tilidad y funciones 3tiles relacionadas. In tipo de variable que ya hemos descrito pero puede ser relativamente complicado a asimilar con respecto a la mayora son los arrays. In array es una variable que est" compuesta de varios elementos cada uno de ellos catalo ado dentro de ella misma por medio de una clave. 6n el captulos anteriores ponamos el e!emplo de un array llamado sentido que contena los distintos sentidos del ser humano8sentido?-BG"*er"; 8sentido?'BG"tocar"; 8sentido?LBG"oir"; 8sentido?#BG"+"star"; 8sentido?2BG"oler";

6n este caso este array catalo a sus elementos, comunmente llamados valores, por n7meros. 0os n7meros del ' al ( son por lo tanto las claves y los sentidos son los valores asociados. Cada nos impide emplear nombres KcadenasL para clasificarlos. 0o 7nico que deberemos hacer es entrecomillarlos<? 8%oneda?"espana"BG"3eseta"; 8%oneda?"francia"BG"Vranco"; 8%oneda?""sa"BG"(olar"; ?>

&tra forma de definir idnticamente este mismo array y que nos puede ayudar para la creacin de arrays m"s comple!os es la si uiente sinta2is<? 8%onedaGarray("espana"G> "3eseta"E"francia" G> "Vranco"E""sa" G> "(olar"); ?>

Ina forma muy practica de almacenar datos es mediante la creacin de arrays multidimensionales KtablasL. Pon amos el e!emplo si uiente- Dueremos almacenar dentro de una misma tabla el nombre, moneda y len ua hablada en cada pas. Para hacerlo podemos emplear un array llamado pas que vendr" definido por estas tres caractersticas KclavesL. Para crearlo, deberamos escribir una e2presin del mismo tipo que la vista anteriormente en la que meteremos una array dentro del otro. 6ste proceso de incluir una instruccion dentro de otra se llama anidar y es muy corriente en pro ramacin<? 8paisGarray ( "espana" G>array (

Programacin en PHP: http://www.desarrolloweb.com/manuales/12/


' (os manuales de DesarrolloWeb.com tienen el cop!right de sus autores. )o reproducir sin autorizaci*n.

35

Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com


"no%5re"G>":spaWa"E "len+"a"G>"&astellano"E "%oneda"G>"3eseta" )E "francia" G>array ( "no%5re"G>"Vrancia"E "len+"a"G>"VrancJs"E "%oneda"G>"Vranco" ) ); echo 8pais?"espana"B?"%oneda"B //Saca en pantalla: "3eseta" ?>

.jecutar script ,ntes de entrar en el detalle de este peque;o script, comentemos al unos puntos referentes a la sinta2is. Como puede verse, en esta secuencia de script, no hemos introducido punto y coma "Z" al final de cada lnea. 6sto es simplemente debido a que lo que hemos escrito puede ser considerado como una sola instruccin. 6n realidad, somos nosotros quienes decidimos cortarla en varias lneas para, as, facilitar su lectura. 0a verdadera instruccin acabara una vez definido completamente el array y es precisamente ah donde hemos colocado el 7nico punto y coma. Por otra parte, podis observar cmo hemos !u ado con el tabulador para separar unas lneas m"s que otras del principio. 6sto tambin lo hacemos por cuestiones de claridad, ya que nos permite ver qu partes del cdi o est"n incluidas dentro de otras. 6s importante acostumbrarse a escribir de esta forma del mismo modo que a introducir los comentarios ya que la claridad de los scripts es fundamental a la hora de depurarlos. In poco de esfuerzo a la hora de crearlos puede ahorrarnos muchas horas a la hora de corre irlos o modificarlos meses m"s tarde. Pasando ya al comentario del pro rama, como podis ver, ste nos permite almacenar tablas y, a partir de una simple peticin, visualizarlas un determinado valor en pantalla. 0o que es interesante es que la utilidad de los arrays no acaba aqu, sino que tambin podemos utilizar toda una serie de funciones creadas para ordenarlos por orden alfabtico directo o inverso, por claves, contar el numero de elementos que componen el array adem"s de poder movernos por dentro de l hacia delante o atr"s. Muchas son las funciones propuestas por P#P para el tratamiento de arrays, no vamos a entrar aqu en una descripcin de las mismas. 5lo incluiremos esta peque;a tabla que puede ser complementada, si necesario, con la documentacin que ya hemos mencionado.

.uncin arra!:-alues (mi:arra! asort(mi:arra! ! arsort(mi:arra! count(mi:arra! Ksort(mi:arra! ! Krsort(mi:arra! list (=-ariable%6 =-ariable2... >mi:arra!

Descripcin (ista los -alores contenidos en mi:arra! Irdena por orden al&abCtico directo o in-erso en &unci*n de los -alores )os da el numero de elementos de nuestro arra! Irdena por orden al&abCtico directo o in-erso en &unci*n de las cla-es 7signa cada una -ariable a cada uno de los -alores del arra!

Programacin en PHP: http://www.desarrolloweb.com/manuales/12/


' (os manuales de DesarrolloWeb.com tienen el cop!right de sus autores. )o reproducir sin autorizaci*n.

36

Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com

ne.t(mi:arra! 6 pre-(mi:arra! 6 )os permiten mo-ernos por dentro del arra! con un reset(mi:arra! ! end(mi:arra! puntero hacia delante6 atras ! al principio ! al &inal. )os da el -alor ! la cla-e del elemento en el 1ue nos encontramos ! mue-e al puntero al siguiente elemento.

each(mi:arra!

/e ran utilidad es tambin el bucle foreach que recorre de forma secuencial el array de principio a fin. Para complementar esta informacin resultar" de ran inters el artculo 4raba!o con tablas o arrays en P#P y para los que prefieran la formacin en vdeo, recomendamos ver los videotutoriales sobre los arrays en P#P.
Artculo por

Rubn Alvarez

0'*'( -rabaFo con tablas o arra8s en H


4emos algunas de las funciones t1picas del trabajo con arrays a trav#s de una peque5a e plicacin y un ejemplo de uso. Ramos a ver varios e!emplos de traba!o con arrays Karre los, vectores, matrices o tablas en castellanoL en P#P que ilustrar"n un poco el funcionamiento de al unas de las funciones de arrays m"s populares que trae consi o P#P. 5in m"s, vamos a introducirnos en materia con varios e!emplos interesantes de mane!o de vectores.
+eferencia"0os arrays en P#P se e2plican en el artculo 4ablas o ,rrays en P#P.

0'*'&'( Modi#icar el n@mero de elementos de un arra8


,hora vamos a ver varios e!emplos mediante los cuales nuestros arrays pueden aumentar o reducir el n7mero de casillas disponibles. +educir el tama9o de un array array0slice:; Para disminuir el n7mero de casillas de un arre lo tenemos varias funciones. 6ntre ellas, arraySsliceKL la utilizamos cuando queremos recortar al unas casillas del arre lo, sabiendo los ndices de las casillas que deseamos conservar. 9ecibe tres par"metros. 6l array, el ndice del primer elemento y el n7mero de elementos a tomar, siendo este 7ltimo par"metro opcional. 6n el e!emplo si uiente tenemos un array con cuatro nombres propios. 6n la primera e!ecucin de arraySsliceKL estamos indicando que deseamos tomar todos los elementos desde el ndice * Kel principioL hasta un n7mero total de + elementos. 6l se undo arraySsliceKL indica que se tomen todos los elementos a partir del ndice ' Kse unda casillaL.
<? 8entrada G array ("!i+"el"E "3epe"E "X"an"E "X"lio"E "3a5lo"); //%odifico el ta%aWo 8salida G array$slice (8entradaE 1E L); //%"estro el array foreach (8salida as 8act"al) echo 8act"al . "<5r>";

Programacin en PHP: http://www.desarrolloweb.com/manuales/12/


' (os manuales de DesarrolloWeb.com tienen el cop!right de sus autores. )o reproducir sin autorizaci*n.

37

Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com echo "WpY"Z NNmodifico otra vez \salida V arraySslice K\salida, 'LZ NNmuestro el array foreach K\salida as \actualL echo \actual . "WbrY"Z BY 4endr" como salidaMi uel Pepe .uan Pepe .uan array0shift:; 6sta funcin e2trae el el primer elemento del array y lo devuelve. ,dem"s, acorta la lon itud del array eliminando el elemento que estaba en la primera casilla. 5iempre hace lo mismo, por tanto, no recibir" m"s que el array al que se desea eliminar la primera posicin. 6n el cdi o si uiente se tiene el mismo vector con nombres propios y se e!ecuta dos veces la funcin arraySshiftKL eliminando un elemento en cada ocasin. 5e imprimen los valores que devuelve la funcin y los elementos del array resultante de eliminar la primera casilla.
<? 8entrada G array ("!i+"el"E "3epe"E "X"an"E "X"lio"E "3a5lo");

NNquito la primera casilla \salida V arraySshift K\entradaLZ NNmuestro el array echo "0a funcin devuelve- " . \salida . "WbrY"Z foreach K\entrada as \actualL echo \actual . "WbrY"Z echo "WpY"Z NNquito la primera casilla, que ahora sera la se unda del array ori inal \salida V arraySshift K\entradaLZ echo "0a funcin devuelve- " . \salida . "WbrY"Z NNmuestro el array foreach K\entrada as \actualL echo \actual . "WbrY"Z BY /a como resultado0a funcin devuelve- Mi uel Pepe .uan .ulio Pablo 0a funcin devuelve- Pepe .uan .ulio Pablo unset:; 5e utiliza para destruir una variable dada. 6n el caso de los arre los, se puede utilizar para eliminar una casilla de un

Programacin en PHP: http://www.desarrolloweb.com/manuales/12/


' (os manuales de DesarrolloWeb.com tienen el cop!right de sus autores. )o reproducir sin autorizaci*n.

38

Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com array asociativo Klos que no tienen ndices numricos sino que su ndice es una cadena de caracteresL. Reamos el si uiente cdi o para conocer cmo definir un array asociativo y eliminar lue o una de sus casillas.
<? 8estadios$f"t5ol G array("Narcelona"G> "Ao" &a%p"E"7eal !adrid" G> "Santia+o Nerna5e""E">alencia" G> "!estalla"E"7eal Sociedad" G> "Anoeta");

NNmostramos los estadios foreach K\estadiosSfutbol as \indiceVY\actualL echo \indice . " PP " . \actual . "WbrY"Z echo "WpY"Z NNeliminamos el estadio asociado al real madrid unset K\estadiosSfutbol^"9eal Madrid"_LZ NNmostramos los estadios otra vez foreach K\estadiosSfutbol as \indiceVY\actualL echo \indice . " PP " . \actual . "WbrY"Z BY 0a salida ser" la si uiente8arcelona PP Cou Camp 9eal Madrid PP 5antia o 8ernabeu Ralencia PP Mestalla 9eal 5ociedad PP ,noeta 8arcelona PP Cou Camp Ralencia PP Mestalla 9eal 5ociedad PP ,noeta

0'*'*'( Aumentar el tama%o de un arra8


4enemos tambin a nuestra disposicin varias funciones que nos pueden ayudar a aumentar el n7mero de casillas de un arre lo. array0push:; %nserta al final del array una serie de casillas que se le indiquen por par"metro. Por tanto, el n7mero de casillas del array aumentar" en tantos elementos como se hayan indicado en el par"metro de la funcin. /evuelve el n7mero de casillas del array resultante. Reamos este cdi o donde se crea un arre lo y se a;aden lue o tres nuevos valores.
<? 8ta5la G array (" a+artiHa"E "AraWa"E "3erro"E "@ato"E "7atRn");

NNaumentamos el tama;o del array arraySpushK\tabla, "@orrin", "Paloma", "&so"LZ foreach K\tabla as \actualL echo \actual . "WbrY"Z BY /a como resultado esta salida0a arti!a ,ra;a Perro @ato 9atn @orrin

Programacin en PHP: http://www.desarrolloweb.com/manuales/12/


' (os manuales de DesarrolloWeb.com tienen el cop!right de sus autores. )o reproducir sin autorizaci*n.

39

Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com Paloma &so array0merge:; ,hora vamos a ver cmo unir dos arrays utilizando la funcin arraySmer eKL. , sta se le pasan dos o m"s arrays por par"metro y devuelve un arre lo con todos los campos de los vectores pasados. 6n este cdi o de e!emplo creamos tres arrays y lue o los unimos con la funcin arraySmer eKL
<? 8ta5la G array (" a+artiHa"E "AraWa"E "3erro"E "@ato"E "7atRn"); 8ta5la' G array ("-'"E"L#"E"#2"E"2'"E"-'"); 8ta5laL G array ("Sa"ce"E"3ino"E"AaranHo"E"&hopo"E"3erro"E"L#");

NNaumentamos el tama;o del array \resultado V arraySmer eK\tabla, \tabla), \tabla+LZ foreach K\resultado as \actualL echo \actual . "WbrY"Z BY /a como resultado0a arti!a ,ra;a Perro @ato 9atn ') +G G( () ') 5auce Pino Caran!o Chopo Perro +G Ina 7ltima cosa. 4ambin pueden introducirse nuevas casillas en un arre lo por los mtodos habituales de asi nar las nuevas posiciones en el array a las casillas que necesitemos. 6n arrays normales se hara as8ta5la G array ("Sa"ce"E"3ino"E"AaranHo"); 8ta5la?LBG"Al+arro5o";

6n arrays asociativos8estadios$f"t5ol G array(">alencia" G> "!estalla"E"7eal Sociedad" G> "Anoeta"); 8estadios$f"t5ol?"Narcelona"BG "Ao" &a%p";

Reremos m"s adelante otras posibilidades del traba!o con arrays. Ponemos a vuestra disposicin las p" inas P#P que contienen los cdi os con los que hemos traba!ado.
+eferencia"en el taller de P#P tenemos artculos sobre el traba!o con arrays en P#P. Concretamente tenemos uno que e2plica los distintos tipos de ordenacin de arrays en P#P- &rdenar arrays con P#P

Artculo por

Miguel Angel Alvarez

Programacin en PHP: http://www.desarrolloweb.com/manuales/12/


' (os manuales de DesarrolloWeb.com tienen el cop!right de sus autores. )o reproducir sin autorizaci*n.

40

Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com

0','( Cadenas en H
(spectos relevantes de las cadenas o strings en PHP , un tipo de variables muy utili!ado. +ista de caracteres protegidos. Ino de los tipos de variables m"s corrientes, a las que tendremos que hacer frente en la mayora de nuestros scripts, son las cadenas. 4ambin podremos conocerlas como strin s o cadenas de caracteres y no son m"s que informacin de tipo te2to y que pueden contener uno o m"s caracteres alfanumricos, es decir, una mezcla de caracteres numricos y no numricos. Por decirlo con otras palabras, en eneral, cuando uardamos cualquier te2to en una variable, lo que estamos uardando tcnicamente le llamamos cadenas o strin s. Para asi nar a una variable un contenido de este tipo, lo escribiremos entre comillas dando lu ar a declaraciones de este tipo8cadenaG":sta es la infor%aciRn de %i *aria5le";

5i queremos ver en pantalla el valor de una variable o bien un mensa!e cualquiera usaremos la instruccin echo como ya lo hemos visto anteriormenteecho 8cadena; //sacarPa ":sta es la infor%aciRn de %i *aria5le"

echo "6sta es la informacin de mi variable"Z NNdara el mismo resultado Podemos yu2taponer o concatenar varias cadenas poniendo para ello un punto entre ellas<? 8cadena-G"3erro"; 8cadena'G" %"erde"; 8cadenaLG8cadena-.8cadena'; echo 8cadenaL; //:l res"ltado es: "3erro %"erde" ?>

.jecutar script 4ambin podemos introducir variables dentro de nuestra cadena lo cual nos puede ayudar mucho en el desarrollo de nuestros scripts. 0o que veremos no es el nombre, sino el valor de la variable<? 8aG22; 8%ensaHeG"Ten+o 8a aWos"; echo 8%ensaHe; //:l res"ltado es: "Ten+o 22 aWos" ?>

.jecutar script 0a pre unta que nos podemos plantear ahora es...ACmo ha o entonces para que en vez del valor "((" me sal a el te2to "\a"B 6n otras palabras, cmo se hace para que el smbolo \ no defina una variable sino que sea tomado tal cual. 6sta pre unta es tanto m"s interesante cuanto que en al unos de scripts este smbolo debe ser utilizado por una simple razn comercial Kpa o en dlares por e!emploL y si lo escribimos tal cual, el ordenador va a pensar que lo que viene detr"s es una variable siendo que no lo es. Pues bien, para meter ste y otros caracteres utilizados por el len ua!e dentro de las cadenas y no confundirlos, lo que hay que hacer es escribir una contrabarra delante-

Carc ter =

7#ecto en la cadena Escribe d*lar en la cadena

Programacin en PHP: http://www.desarrolloweb.com/manuales/12/


' (os manuales de DesarrolloWeb.com tienen el cop!right de sus autores. )o reproducir sin autorizaci*n.

41

Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com

<

Escribe comillas en la cadena Escribe contrabarra en la cadena

P/2

Escribe P/2 ! no 4 en la cadena

,dem"s, e2isten otras utilidades de esta contrabarra que nos permiten introducir en nuestro documento #4M0 determinados eventos-

Carc ter t n r

7#ecto en la cadena "ntroduce una tabulaci*n en nuestro te.to +ambiamos de lnea Retorno de carro

6stos cambios de lnea y tabulaciones tienen 7nicamente efecto en el cdi o y no en el te2to e!ecutado por el nave ador. 6n otras palabras, si queremos que nuestro te2to e!ecutado cambie de lnea hemos de introducir un echo "<br>" y no echo "n" ya que este ultimo slo cambia de lnea en el archivo #4M0 creado y enviado al nave ador cuando la p" ina es e!ecutada en el servidor. 0a diferencia entre estos dos elementos puede ser f"cilmente comprendida mirando el cdi o fuente producido al e!ecutar este script<<T! > <<:A(> <T)T :>ca%5iolinea.php</T)T :> </<:A(> <NT(D> <? echo "<olaE n si+o en la %is%a lPnea eHec"tada pero no en cRdi+o f"ente.<5r>Ahora ca%5io de lPnea eHec"tada pero contin"o en la %is%a en el cRdi+o f"ente." ?> </NT(D> </<T! >

.jecutar script
6char un vistazo al codi o fuente del nave ador

6l cdi o fuente que observaramos seria el si uiente<<T! > <<:A(> <T)T :>ca%5iolinea.php</T)T :> </<:A(> <NT(D> <olaE si+o en la %is%a lPnea eHec"tada pero no en cRdi+o f"ente.<5r>Ahora ca%5io de lPnea eHec"tada pero

Programacin en PHP: http://www.desarrolloweb.com/manuales/12/


' (os manuales de DesarrolloWeb.com tienen el cop!right de sus autores. )o reproducir sin autorizaci*n.

42

Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com


contin"o en la %is%a en el cRdi+o f"ente.</NT(D> </<T! >

0as cadenas pueden asimismo ser tratadas por medio de funciones de todo tipo. Reremos estas funciones m"s adelante con m"s detalle. 4an slo debemos retener que e2isten muchas posibles acciones que podemos realizar sobre ellas/ividirlas en palabras, eliminar espacios sobrantes, localizar secuencias, remplazar caracteres especiales por su correspondiente en #4M0 o incluso e2traer las etiquetas M64, de una p" ina 3eb.
Artculo por

Rubn Alvarez

Parte ":

#unciones en PHP
(as &unciones son esenciales para poder realizar c*digo de calidad6 tanto en /0/ como en muchos otros lengua,es de programaci*n. En estos captulos del 3anual de /0/ aprenderemos a de&inir &unciones6 traba,ar con par2metros ! retornar -alores.

4'&'( .unciones en H
/tilidad de las funciones, creacin y almacenamiento en arc%ivos. Ejemplo prctico de creacin de funcin. 6n nuestro manual de p" inas din"micas vimos el concepto de funcin. Rimos que la funcin podra ser definida como un con!unto de instrucciones que e2plotan ciertas variables para realizar una tarea m"s o menos elemental. P#P basa su eficacia principalmente en este tipo de elemento. Ina ran librera que crece constantemente, a medida que nuevas versiones van sur iendo, es complementada con las funciones de propia cosecha dando como resultado un sinfn de recursos que son aplicados por una simple llamada. 0as funciones inte radas en P#P son muy f"ciles de utilizar. 4an slo hemos de realizar la llamada de la forma apropiada y especificar los par"metros yNo variables necesarios para que la funcin realice su tarea. 0o que puede parecer li eramente m"s complicado, pero que resulta sin lu ar a dudas muy pr"ctico, es crear nuestras propias funciones. /e una forma eneral, podramos crear nuestras propias funciones para conectarnos a una base de datos o crear los encabezados o etiquetas meta de un documento #4M0. Para una aplicacin de comercio electrnico podramos crear por e!emplo funciones de cambio de una moneda a otra o de calculo de los impuestos a a;adir al precio de articulo. 6n definitiva, es interesante crear funciones para la mayora de acciones m"s o menos sistem"ticas que realizamos en nuestros pro ramas. ,qu daremos el e!emplo de creacin de una funcin que, llamada al comienzo de nuestro script, nos crea el encabezado de nuestro documento #4M0 y coloca el titulo que queremos a la p" ina<? f"nction hacer$enca5eSado(8tit"lo) Q

Programacin en PHP: http://www.desarrolloweb.com/manuales/12/


' (os manuales de DesarrolloWeb.com tienen el cop!right de sus autores. )o reproducir sin autorizaci*n.

43

Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com


8enca5eSadoG"<ht%l><head>t<title>8tit"lo</title></head>"; echo 8enca5eSado; U ?>

6sta funcin podra ser llamada al principio de todas nuestras p" inas de la si uiente forma8tit"loG"!i 6e5"; hacer$enca5eSado(8tit"lo);

/e esta forma automatizamos el proceso de creacin de nuestro documento. Podramos por e!emplo incluir en la funcin otras variables que nos ayudasen a construir la etiquetas meta y de esta forma, con un esfuerzo mnimo, crearamos los encabezados personalizados para cada una de nuestras p" inas. /e este mismo modo nos es posible crear cierres de documento o formatos diversos para nuestros te2tos como si se tratase de ho!as de estilo que tendran la venta!a de ser reconocidas por todos los nave adores. Por supuesto, la funcin ha de ser definida dentro del script ya que no se encuentra inte rada en P#P sino que la hemos creado nosotros. 6sto en realidad no pone nin una pe a ya que puede ser incluida desde un archivo en el que iremos almacenando las definiciones de las funciones que vayamos creando o recopilando. 6stos archivos en los que se uardan las funciones se llaman libreras. 0a forma de incluirlos en nuestro script es a partir de la instruccin require o includerequireK"libreria.php"L o includeK"libreria.php"L 6n resumen, la cosa quedara as4endramos un archivo libreria.php como si ue
<? //f"nciRn de enca5eSado y colocaciRn del tit"lo f"nction hacer$enca5eSado(8tit"lo) Q 8enca5eSadoG"<ht%l>n<head>nt<title>8tit"lo</title>n</head>n"; echo 8enca5eSado; U ?>

Por otra parte tendramos nuestro script principal p" ina.php Kpor e!emploL<? incl"de("li5reria.php"); 8tit"loG"!i Ye5"; hacer$enca5eSado(8tit"lo); ?> <5ody> :l c"erpo de la p4+ina </5ody> </ht%l>

.jecutar script
6char un vistazo al codi o fuente del nave ador

Podemos meter todas las funciones que vayamos encontrando dentro de un mismo archivo pero resulta muchsimo m"s venta!oso ir clasific"ndolas en distintos archivos por tem"tica- Munciones de cone2in a bases de datos, funciones comerciales, funciones enerales, etc. 6sto nos ayudara a poder localizarlas antes para corre irlas o modificarlas, nos permite tambin car ar 7nicamente el tipo de funcin que necesitamos para el script sin recar ar ste en e2ceso adem"s de permitirnos utilizar un determinado tipo de librera para varios sitios 3ebs distintos. 4ambin puede resultar muy pr"ctico el utilizar una nomenclatura sistem"tica a la hora de nombrarlas- 0as funciones comerciales podran ser llamadas comSloquesea, las de bases de datos bdSloquesea, las de tratamiento de archivos fileSloquesea. 6sto nos permitir" reconocerlas ense uida cuando leamos el script sin tener que recurrir a nuestra o2idada memoria para descubrir su utilidad. Co obstante, antes de lanzarnos a crear nuestra propia funcin, merece la pena echar un vistazo a la documentacin para ver si dicha funcin ya e2iste o podemos aprovecharnos de al una de las e2istentes para ali erar nuestro traba!o. ,s, por e!emplo, e2iste una funcin llamada header que crea un encabezado #4M0 confi urable lo cual nos evita tener

Programacin en PHP: http://www.desarrolloweb.com/manuales/12/


' (os manuales de DesarrolloWeb.com tienen el cop!right de sus autores. )o reproducir sin autorizaci*n.

44

Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com que crearla nosotros mismos. Como puede verse, la tarea del pro ramador puede en al unos casos parecerse a la de un coleccionista. #ay que ser paciente y metdico y al final, a base de traba!o propio, intercambio y tiempo podemos lle ar poseer nuestro peque;o tesoro.
-ota" 5i lo deseas puedes repasar todos los conceptos anteriores sobre las funciones, as como diversas otras cosas interesantes en el Rideotutorial sobre las funciones en P#P.

4'&'&'( 7Femplo de #uncin


Ramos a ver un e!emplo de creacin de funciones en P#P. 5e trata de hacer una funcin que recibe un te2to y lo escribe en la p" ina con cada car"cter separado por "P". 6s decir, si recibe "hola" debe escribir "hPoPlPa" en la p" ina 3eb.
-ota"Para comprender este e!emplo necesitamos conocer el bucle for, que se e2plica en el captulo Control del flu!o en P#P- 8ucles %%.

0a manera de realizar esta funcin ser" recorrer el strin , caracter a caracter, para imprimir cada uno de los caracteres, se uido de el si no "P". 9ecorreremos el strin con un bucle for, desde el carater * hasta el n7mero de caracteres total de la cadena. 6l n7mero de caracteres de una cadena se obtiene con la funcin predefinida en P#P strlenKL, que recibe el strin entre parntesis y devuelve el n7mero de los caracteres que ten a.
<ht%l> <head> <title>f"ncion -</title> </head> <5ody> <? f"nction escri5e$separa(8cadena)Q for (8iG1;8i<strlen(8cadena);8iMM)Q echo 8cadena?8iB; if (8i<strlen(8cadena)--) echo "-"; U U escri5e$separa ("hola"); echo "<p>"; escri5e$separa ("Texto %4s lar+oE a *er lo ,"e hace"); ?> </5ody> </ht%l>

0a funcin que hemos creado se llama escribeSsepara y recibe como par"metro la cadena que hay que escribir con el separador "P". 6l bucle for nos sirve para recorrer la cadena, desde el primer al 7ltimo car"cter. 0ue o, dentro del bucle, se imprime cada car"cter separado del si no "P". 6l if que hay dentro del bucle for comprueba que el actual no sea el 7ltimo car"cter, porque en ese caso no habra que escribir el si no "P" Kqueremos conse uir "hPoPlPa" y si no estuviera el if obtendramos "hPoPlPaP"L. 6n el cdi o mostrado se hacen un par de llamadas a la funcin para ver el resultado obtenido con diferentes cadenas como par"metro. Podemos ver el script en marcha.
Artculo por

Rubn Alvarez

Programacin en PHP: http://www.desarrolloweb.com/manuales/12/


' (os manuales de DesarrolloWeb.com tienen el cop!right de sus autores. )o reproducir sin autorizaci*n.

45

Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com

4'*'( Ms sobre #unciones? paso de parmetros


Este cap1tulo pretende ser una ampliacin de detalles que ata5en al art1culo dedicado a las funciones en PHP . Ramos a e2plicar al unos detalles adicionales sobre la definicin y uso de funciones, para ampliar el artculo de funciones en php. Paso de parmetros 0os par"metros son los datos que reciben las funciones y que utilizan para realizar las operaciones de la funcin. Ina funcin puede recibir cualquier n7mero de par"metros, incluso nin uno. , la hora de definir la funcin, en la cabecera, se definen los par"metros que va a recibir.
f"nction f- (8para%etro-E 8par4%etro')

,s definimos una funcin llamada f' que recibe dos par"metros. Como se puede observar, no se tiene que definir el tipo de datos de cada par"metro. 0os par"metros tienen validez durante la e!ecucin de la funcin, es decir, tienen un "mbito local a la funcin donde se est"n recibiendo. Cuando la funcin se termina, los par"metros de!an de e2istir. Los parmetros se pasan por valor 6l paso de par"metros en P#P se realiza por valor. "Por valor" es una manera tpica de pasar par"metros en funciones, quiere decir que el cambio de un dato de un par"metro no actualiza el dato de la variable que se pas a la funcin. Por e!emplo, cuando invocamos una funcin pasando una variable como par"metro, a pesar de que cambiemos el valor del par"metro dentro de la funcin, la variable ori inal no se ve afectada por ese cambio. Puede que se vea me!or con un e!emplof"nction por*alor (8para%etro-)Q 8para%etro-G"hola"; echo "<5r>" . 8para%etro-; //i%pri%e "hola" U 8%i*aria5le G "esto no ca%5ia"; por*alor (8%i*aria5le); echo "<5r>" . 8%i*aria5le; //i%pri%e "esto no ca%5ia"

6sta p" ina tendr" como resultadohola esto no cambia Paso de parmetros por referencia 6n contraposicin al paso de par"metros por valor, est" el paso de par"metros por referencia. 6n este 7ltimo caso, el cambio del valor de un par"metro dentro de una funcin s afecta al valor de la variable ori inal. Podemos pasar los par"metros por referencia si, en la declaracin de la funcin, colocamos un "]" antes del par"metro.
<? f"nction porreferencia(O8cadena) Q 8cadena G =Si ca%5ia=; U 8str G =:sto es "na cadena=; porreferencia (8str);

Programacin en PHP: http://www.desarrolloweb.com/manuales/12/


' (os manuales de DesarrolloWeb.com tienen el cop!right de sus autores. )o reproducir sin autorizaci*n.

46

Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com


echo 8str; // )%pri%e =Si ca%5ia= ?>

6ste script mostrar" por pantalla b5i cambiab. Parmetros por defecto Podemos definir valores por defecto para los par"metros. 0os valores por defecto sirven para que los par"metros conten an un dato predefinido, con el que se inicializar"n si no se le pasa nin 7n valor en la llamada de la funcin. 0os valores por defecto se definen asi nando un dato al par"metro al declararlo en la funcin.
f"nction pordefecto (8para%etro-G"pepe";8para%etro'GL)

Para la definicin de funcin anterior, \parametro' tiene como valor por defecto "pepe", mientras que \parametro) tiene + como valor por defecto. 5i llamamos a la funcin sin indicar valores a los par"metros, estos tomar"n los valores asi nados por defectopordefecto () // 8para%etro- *ale "pepe" y 8para%etro' *ale L

5i llamamos a la funcin indicando un valor, este ser" tenido en cuenta para el primer par"metro.
pordefecto ("hola") // 8para%etro- *ale "hola" y 8para%etro' *ale L

,tencin, estamos obli ados a declarar todos los par"metros con valores por defecto al final.
Artculo por

Miguel Angel Alvarez

4','( Ms sobre #unciones? Retorno de valores


Para saber las formas en que una funcin devuelve valores este art1culo contiene varias formas aptas para %acerlo. 0as funciones pueden retornar valores. Para ello se utiliza la palabra "return" indicando a continuacin el dato o variable que tienen que retornar. 0a funcin puede tener m7ltiples return, aunque slo devolver" datos por uno de ellos cada vez porque, cuando se llama a return, se termina la e!ecucin de la funcin devolviendo el dato indicado. .jemplo de funcin *)# Ramos a ver un nuevo e!emplo para ilustrar el funcionamiento de una funcin un poco m"s avanzada, que utiliza parte de los nuevos conceptos introducidos en este artculo. 5e trata de hacer una funcin que calcula el %R, y que recibe dos par"metros. Ino el valor sobre el que se calcula y el otro el porcenta!e a aplicar. 5i no se indica el porcenta!e de %R, se entiende que es el 'HX.
<ht%l> <head> <title>eHe%plo )>A</title> </head> <5ody> <? f"nction i*a(85aseE8porcentaHeG-/)Q ret"rn 85ase K 8porcentaHe /-11; U

Programacin en PHP: http://www.desarrolloweb.com/manuales/12/


' (os manuales de DesarrolloWeb.com tienen el cop!right de sus autores. )o reproducir sin autorizaci*n.

47

Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com

echo i*a(-111) . "<5r>"; echo i*a(-111EZ) . "<5r>"; echo i*a(-1E1) . "<5r>"; ?> </5ody> </ht%l>

5i se han entendido bien los conceptos, este e!emplo no puede resultar difcil. 0a funcin recibe un par"metro llamado \porcenta!e con 'H como valor por defecto. /evuelve el porcenta!e dado aplicado a la base tambin indicada por par"metro. ,s pues, en la primera e!ecucin de la funcin, como no se indica el porcenta!e, se mostrar" el 'HX de '***. 6n la se unda, se muestra el OX de mil y en la tercera, el *X de '*. Puede verse el resultado en una p" ina aparte. http-NN333.desarrollo3eb.comNarticulosNe!emplosNphpNe!Siva.php +etornar m<ltiples valores Ina funcin devuelve un 7nico valor. 5i queremos hacer que se puedan devolver varios valores distintos tenemos que recurrir a un truco que consiste en devolver un array.
f"nction s%all$n"%5ers() Q ret"rn array (1E -E '); U list (8SeroE 8oneE 8t6o) G s%all$n"%5ers();

listKL se usa para asi nar una lista de variables en una sola operacin. /espus de esa operacin, \zero valdr" *, \one valdr" ' y \t3o valdr" ).
Artculo por

Miguel Angel Alvarez

Programacin en PHP: http://www.desarrolloweb.com/manuales/12/


' (os manuales de DesarrolloWeb.com tienen el cop!right de sus autores. )o reproducir sin autorizaci*n.

48

Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com

Parte $:

%structuras !e control en PHP


Hemos una a una las distintas estructuras de control del &lu,o de los programas disponibles en el lengua,e de programaci*n /0/: condicionales ! bucles.

A'&'( Control del #luFo en H ? Condiciones ).


Presentamos una de las %erramientas principales usadas para controlar el flujo de nuestros scripts, +os condicionales '2 . 0a pro ramacin e2i e en muchas ocasiones la repeticin de acciones sucesivas o la eleccin de una determinada secuencia y no de otra dependiendo de las condiciones especficas de la e!ecucin. Como e!emplo, podramos hacer alusin a un script que e!ecute una secuencia diferente en funcin del da de la semana en el que nos encontramos. 6ste tipo de acciones pueden ser llevadas a cabo racias a una paleta de instrucciones presentes en la mayora de los len ua!es. 6n este captulo describiremos someramente al unas de ellas propuestas por P#P y que resultan de evidente utilidad. Para evitar el complicar el te2to, nos limitaremos a introducir las m"s importantes de!ando de lado otras cuantas que podr"n ser f"cilmente asimilables a partir de e!emplos pr"cticos.

A'&'&'( Las condiciones i#


Cuando queremos que el pro rama, lle ado a un cierto punto, tome un camino concreto en determinados casos y otro diferente si las condiciones de e!ecucin difieren, nos servimos del con!unto de instrucciones if, else y elseif. 0a estructura de base de este tipo de instrucciones es la si uienteif (condiciRn) Q )nstr"cciRn )nstr"cciRn ... U else Q )nstr"cciRn )nstr"cciRn ... U -; ';

A; N;

0le ados a este punto, el pro rama verificar" el cumplimiento o no de la condicin. 5i la condicin es cierta las

Programacin en PHP: http://www.desarrolloweb.com/manuales/12/


' (os manuales de DesarrolloWeb.com tienen el cop!right de sus autores. )o reproducir sin autorizaci*n.

49

Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com instrucciones ' y ) ser"n e!ecutadas. /e lo contrario KelseL, las instrucciones , y 8 ser"n llevadas a cabo. 6sta estructura de base puede complicarse un poco m"s si tenemos cuenta que no necesariamente todo es blanco o ne ro y que muchas posibilidades pueden darse. 6s por ello que otras condiciones pueden plantearse dentro de la condicin principal. #ablamos por lo tanto de condiciones anidadas que tendran una estructura del si uiente tipoif (condiciRn-) Q )nstr"cciRn -; )nstr"cciRn '; ... U else Q if (condiciRn') Q )nstr"cciRn A; )nstr"cciRn N; ... U else Q )nstr"cciRn [ ... U U

/e este modo podramos introducir tantas condiciones como queramos dentro de una condicin principal. /e ran ayuda es la instruccin elseif que permite en una sola lnea introducir una condicin adicional. 6ste tipo de instruccin simpifica li eramente la sinta2is que acabamos de verif (condiciRn-) Q )nstr"cciRn -; )nstr"cciRn '; ... U elseif (condiciRn') Q )nstr"cciRn A; )nstr"cciRn N; ... U else Q )nstr"cciRn [ ... U

6l uso de esta herramienta resultar" claro con un poco de pr"ctica. Pon amos un e!emplo sencillo de utilizacin de condiciones. 6l si uiente pro rama permitira detectar la len ua empleada por el nave ador y visualizar un mensa!e en dicha len ua.
<<T! > <<:A(> <T)T :>(etector de en+"a</T)T :> </<:A(> <NT(D> <? //Antes de nada introd"ci%os %ensaHes en for%a de *aria5les 8espanolG"<ola"; 8in+lesG"<ello"; 8francesG"NonHo"r"; //Ahora lee%os del na*e+ador c"4l es s" len+"a oficial 8idio%aGs"5str(8<TT3$A&&:3T$ AA@9A@:E1E'); //Vor%"la%os las posi5ilidades ,"e se p"eden dar if (8idio%a GG "es")

Programacin en PHP: http://www.desarrolloweb.com/manuales/12/


' (os manuales de DesarrolloWeb.com tienen el cop!right de sus autores. )o reproducir sin autorizaci*n.

50

Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com


Qecho "8espanol";U elseif (8idio%aGG"fr") Qecho "8frances";U else Qecho "8in+les";U ?> </NT(D> </<T! >

.jecutar script Para poder ver el funcionamiento de este script es necesario cambiar el idioma preferido lo cual puede ser realizado a partir del men7 de opciones del nave ador. Para leer la len ua aceptada por el nave ador lo que hacemos es definir una variable K idiomaL y, mediante la funcin substr, reco emos las dos primeras letras del cdi o correspondiente al idioma aceptado por el nave ador K\#44PS,CC6P4S0,C@I,@6L. 0a tercera parte de script se encar a de ver si el nave ador est" en espa;ol KesL, francs KfrL o en cualquier otro idioma que no sea nin uno de estos dos y de imprimir el mensa!e que proceda en cada caso. , notar que, cuando se trata de comparar variables, ponemos un doble i ual "VV" en lu ar de un simple "V". 6ste 7ltimo queda reservado e2clusivamente para asi nar valores a variables
+eferencia" #emos publicado un vdeo para mostrar la creacin y el funcionamiento de las estructuras %M- 6structuras de control, Rdeo '- condicional if

Artculo por

Rubn Alvarez

A'*'( Control del #luFo en H ? Bucles )


Estructura y funcionamiento de los bucles "%ile y do6"%ile. 0os ordenadores, como cualquier m"quina, est"n dise;ados para realizar tareas repetitivas. 6s por ello que nuestros pro ramas pueden aprovecharse de este principio para realizar una determinada secuencia de instrucciones un cierto n7mero de veces. Para ello, utilizamos las estructuras llamadas en bucle que nos ayudan a, usando unas pocas lneas, realizar una tarea incluida dentro del bucle un cierto numero de veces definido por nosotros mismos. P#P propone varios tipos de bucle cada uno con caractersticas especificas-

A'*'&'( Bucle 2+ile


5in duda el bucle m"s utilizado y el m"s sencillo. 0o usamos para e!ecutar las instrucciones contenidas en su interior siempre y cuando la condicin definida sea verdadera. 0a estructura sint"ctica es la si uiente.
6hile (condiciRn) Q instr"ccion-; instr"ccion'; ... U

In e!emplo sencillo es este bucle que aumenta el tama;o de la fuente en una unidad a cada nueva vuelta por el bucle<? 8siSeG-; Yhile (8siSe<G/) Q echo"<font siSeG8siSe>Ta%aWo 8siSe</font><5r>n";

Programacin en PHP: http://www.desarrolloweb.com/manuales/12/


' (os manuales de DesarrolloWeb.com tienen el cop!right de sus autores. )o reproducir sin autorizaci*n.

51

Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com


8siSeMM; U ?>

.jecutar script , modo de e2plicacin, diremos que, antes de nada, hemos de definir el valor de la variable que vamos a evaluar en la condicin. ,l o absolutamente obvio pero f"cil de olvidar. 6n este caso le hemos atribuido un valor de ' que corresponde a la letra m"s peque;a. 6l paso si uiente es crear el bucle en el que imponemos la condicin que la variable no e2ceda el valor de H. 0a instruccin a e!ecutar ser" imprimir en nuestro documento un cdi o #4M0 en el que la etiqueta font y el mensa!e que contiene varan a medida que si!e cambia su valor. 6l si uiente paso es incrementar en una unidad el valor de \size. 6sto se puede hacer con una e2presin como la mostrada en el bucle K\sizeTTL que en realidad es sinnima de\sizeV\sizeT' Reremos otras de estas abreviaciones m"s adelante.

A'*'*'( Etro eFemplo del buble 1+ile


6l bucle 3hile se suele utiliza cuando no se sabe e2actamente cuantas iteraciones se deben realizar antes de acabar. Ramos a utilizarlo en otro e!emplo, en el que hay que recorrer una cadena hasta encontrar un car"cter dado. 5i lo encuentra, escribir su posicin. 5i no, escribir que no se ha encontrado.
-ota" Para hacer este e!ercicio necesitamos conocer la funcin de cadena strlenKL, que obtiene la lon itud de la cadena que se le pase por par"metro. int strlen Kstrin cadL /evuelve un entero i ual a la lon itud de la cadena. <? 8cadena G "hola a todo el %"ndo"; //recorro la cadena hasta encontrar "na "%" 8iG1; 6hile (8cadena?8iBCG"%" OO 8i< strlen(8cadena))Q 8iMM; U if (8iGGstrlen(8cadena)) echo "Ao se enc"entra..."; else echo ":st4 en la posiciRn 8i"; ?>

6n este e!emplo se define una cadena con el valor "hola a todo el mundo". Posteriormente se recorre esa cadena hasta el final de la cadena o hasta encontrar el caracter "m", utilizando una variable \i que lleva la cuenta de los caracteres recorridos. ,l final del bucle 3hile, si se sali porque se encontr el caracter "m", la variable \i valdr" un n7mero menor que la lon itud de la cadema. 5i se sali por lle ar al final de la cadena, la variable \i valdr" lo mismo que la lon itud en caracteres de esa cadena. 6n el condicional simplemente se comprueba si \i vale o no lo mismo que la lon itud de la cadena, mostrando los mensa!es adecuados en cada caso. Podemos ver el e!emplo en funcionamiento.

Programacin en PHP: http://www.desarrolloweb.com/manuales/12/


' (os manuales de DesarrolloWeb.com tienen el cop!right de sus autores. )o reproducir sin autorizaci*n.

52

Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com

A'*','( Bucle do52+ile


6ste tipo de bucle no difiere en e2ceso del anterior. 0a sinta2is es la si uientedo Q instr"ccion-; instr"ccion'; ...

U 6hile (condiciRn)

0a diferencia con respecto a los bucles while es que este tipo de bucle eval7a la condicin al final con lo que, incluso siendo falsa desde el principio, ste se e!ecuta al menos una vez.
+eferencia" Para una ayuda pr"ctica sobre estos bucles ver el si uiente videotutorial 6structuras de control, Rdeo )- bucles for, 3hile y doP3hile. ,dem"s, las e2plicaciones sobre estructuras de control se complementan con el videotutorial de 53itch y las instrucciones brea: y continue.

Artculo por

Rubn Alvarez

A','( Control del #luFo en H ? Bucles ))


Estructura y funcionamiento de los bucles for y foreac%. E plicamos como salir de un bucle, 7rea8 y continue 6ste es el se undo artculo sobre los bucles en P#P que publicamos en el Manual de P#P. 6l anterior artculo e2plic acerca de los bucles 3hile y doP3hile. ,s pues, ahora vamos a dedicarnos a los otros tipos de bucles, que son el bucle for, para iterar un n7mero dado de veces, foreach, 7til para recorrer arrays, as como las sentencias brea: y continue.

A','&'( Bucle #or


P#P est" provisto de otros tipos de bucle que tambin resultan muy pr"cticos en determinadas situaciones. 6l m"s popular de ellos es el bucle for que, como para los casos anteriores, se encar a de e!ecutar las instrucciones entre llaves. 0a diferencia con los anteriores radica en cmo se plantea la condicin de finalizacin del bucle. Para aclarar su funcionamiento vamos a e2presar el e!emplo de bucle while visto en el captulo anterior en forma de bucle for<? Vor (8siSeG-;8siSe<G/;8siSeMM) Q echo"<font siSeG8siSe>Ta%aWo 8siSe</font><5r>n"; U ?>

.jecutar script 0as e2presiones dentro del parntesis definen respectivamenteP%nicializacin de la variable. Ralida para la primera vuelta del bucle. PCondicin de evaluacin a cada vuelta. 5i es cierta, el bucle continua. P,ccin a realizar al final de cada vuelta de bucle.

A','*'( Bucle #oreac+


6ste bucle, implementado en las versiones de P#PG, nos ayuda a recorrer los valores de un array lo cual puede resultar muy 7til por e!emplo para efectuar una lectura r"pida del mismo. 9ecordamos que un array es una variable que uarda

Programacin en PHP: http://www.desarrolloweb.com/manuales/12/


' (os manuales de DesarrolloWeb.com tienen el cop!right de sus autores. )o reproducir sin autorizaci*n.

53

Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com un con!unto de elementos KvaloresL catalo ados por claves. 0a estructura eneral es la si uienteVoreach (8array as 8cla*eG>8*alor) Q instr"ccion-; instr"ccion'; ; U

In e!emplo pr"ctico es la lectura de un array lo cual podra hacerse del si uiente modo<? 8%onedaGarray(":spaWa"G> "3eseta"E"Vrancia" G> "Vranco"E"9SA" G> "(olar"); Voreach (8%oneda as 8cla*eG>8*alor) Q echo "3ais: 8cla*e !oneda: 8*alor<5r>"; U ?>

.jecutar script 6ste script se encar ara de mostrarnos por pantalla el contenido del array moneda. Co resultara mala idea crear una funcin propia basada en este bucle que nos permitiese visualizar arrays monodimensionales y almacenarla en nuestra librera. 6sta funcin podra ser definida de esta formaV"nction %ostrar$array (8array) Q Voreach (8array as 8cla*eG>8*alor) Qecho "8cla*eG>8*alor<5r>";U U

A',','( BreaP 8 continue


6stas dos instrucciones se introducen dentro de la estructura y nos sirven respectivamente para escapar del bucle o saltar a la iteracin si uiente. Pueden resultarnos muy pr"cticas en al unas situaciones. /urante una iteracin de un bucle podemos saltar directamente a la si uiente iteracin, sin se uir con la actual, con la instruccin continue. 4ambin podemos detener completamente las repeticiones de cualquier bucle con brea:, lo que parar" la e!ecucin de la iteracin actual y de las si uientes que pudiera haber.
+eferencia" 5i deseas ver la construccin de un bucle for y otros tipos de bucles, en vdeo te recomendamos el si uiente videotutorial 6structuras de control, Rdeo )- bucles for, 3hile y doP3hile. ,dem"s, si deseas aprender la estructura de control s3itch y las instrucciones brea: y continue, as como ver otro e!emplo de foreach, te recomendamos ver los Rideotutoriales de estructuras de control en P#P %%.

Artculo por

Rubn Alvarez

Programacin en PHP: http://www.desarrolloweb.com/manuales/12/


' (os manuales de DesarrolloWeb.com tienen el cop!right de sus autores. )o reproducir sin autorizaci*n.

54

Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com

Parte &:

plicaciones 'e(: paso !e )aria(les y memoria !e esta!os


En los siguientes captulos -eremos di-ersas maneras 1ue e.isten en /0/ para conseguir 1ue un con,unto de p2ginas ! scripts se comporten como una aplicaci*n web. Heremos c*mo pasar datos de unas p2ginas a otras6 por /I4# ! FE#6 c*mo memorizar datos asociados a un usuario a lo largo de toda la sesi*n ! c*mo memorizar datos en cooKies6 1ue perdurar2n entre -arias sesiones.

C'&'( asar variables por la =RL con H


4eremos cmo transferir variables de una pgina a otra por medio de la /9+, en PHP . 8ucles y condiciones son muy 7tiles para procesar los datos dentro de un mismo script. 5in embar o, en un sitio %nternet, las p" inas vistas y los scripts utilizados son numerosos. Muy a menudo necesitamos que nuestros distintos scripts estn conectados unos con otros y que se sirvan de variables comunes. Por otro lado, el usuario interacciona por medio de formularios cuyos campos han de ser procesados para poder dar una respuesta. 4odo este tipo de factores din"micos han de ser eficazmente re ulados por un len ua!e como P#P. 6s posible que ya os hay"is percatado de que las variables de un script tienen una validez e2clusiva para el script y que nos resulta imposible conservar su valor cuando e!ecutamos otro archivo distinto aunque ambos estn enlazados. 62isten varias formas de enviar las variables de una p" ina a otra de manera a que la p" ina destino reconozca el valor asi nado por el script de ori en-

C'&'&'( asar variables por =RL


Para pasar las variables de una p" ina a otra lo podemos hacer introduciendo dicha variable dentro del enlace hiperte2to de la p" ina destino. 0a sinta2is sera la si uiente<a hrefG"destino.php?*aria5le-G*alor-O*aria5le'G*alor'O...">!i enlace</a>

Programacin en PHP: http://www.desarrolloweb.com/manuales/12/


' (os manuales de DesarrolloWeb.com tienen el cop!right de sus autores. )o reproducir sin autorizaci*n.

55

Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com Podis observar que estas variables no poseen el smbolo \ delante. 6sto es debido a que en realidad este modo de pasar variables no es especfico de P#P sino que es utilizado por otros len ua!es. ,hora nuestra variable pertenece tambin al entorno de la p" ina destino"php y est" lista para su e2plotacin.
-ota" Co siempre se definen autom"ticamente las variables recibidas por par"metro en las p" inas 3eb, depende de una variable de confi uracin de P#P- re isterS lobals, que tiene que estar activada para que as sea. Rer comentarios del artculo al final de la p" ina para m"s informacin.

Para aclarar posibles dudas, veamos esto en forma de e!emplo. 4endremos pues dos p" inas, origen"html Kno es necesario darle e2tensin P#P puesto que no hay nin 7n tipo de cdi oL y destino"php<<T! > <<:A(> <T)T :>ori+en.ht%l</T)T :> </<:A(> <NT(D> <a hrefG"destino.php?sal"doGholaOtextoG:sto es "na *aria5le texto">3aso *aria5les sal"do y texto a la p4+ina destino.php</a> </NT(D> </<T! > <<T! > <<:A(> <T)T :>destino.php</T)T :> </<:A(> <NT(D> <? echo ">aria5le 8sal"do: 8sal"do <5r>n"; echo ">aria5le 8texto: 8texto <5r>n" ?> </NT(D> </<T! >

.jecutar ejemplo

C'&'*'( GH-- Q/7-QDAR<


9ecordamos que es posible recopilar en una variable tipo array el con!unto de variables que han sido enviadas al script por este mtodo a partir de la variable de sistema \#44PS@64SR,95, que es un array asociativo. Itiliz"ndolo quedara as<? echo ">aria5le 8sal"do: 8<TT3$@:T$>A7S?"sal"do"B <5r>n"; echo ">aria5le 8texto: 8<TT3$@:T$>A7S?"texto"B <5r>n" ?> -ota" ,unque podamos reco er variables con este array asociativo o utilizar directamente las variables que se definen en nuestra p" ina, resulta m"s se uro utilizar \#44PS@64SR,95 por dos razones, la primera que as nos ase uramos que esa varible viene realmente de la I90 y la se unda, que as nuestro cdi o ser" m"s claro cuando lo volvamos a leer, porque quedar" especificado que esa variable estamos recibindola por la I90.

C'&','( GQ/7, partir de la versin G.'.* de P#P se ha introducido el array asociativo \S@64, que es idntico a \#44PS@64SR,95, aunque un poco m"s corto de escribir.

C'&'0'( Caracteres especiales en =RL 8 su codi#icacin con H


#ay al unos caracteres raros que no se pueden pasar, tal cual, por la I90. Por e!emplo, una I90 no puede contener espacios en blanco, por lo que si intentas enviar una variable por I90 con un valor que tiene un espacio en blanco, te

Programacin en PHP: http://www.desarrolloweb.com/manuales/12/


' (os manuales de DesarrolloWeb.com tienen el cop!right de sus autores. )o reproducir sin autorizaci*n.

56

Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com dar" problemas. Por e!emplo, el si no "[" no puede fi urar tampoco en una I90. ,s pues, tenemos que hacer al o para convetir esos caracteres, de modo que no den problemas en la I90. 0a solucin en P#P es sencilla, simplemente debemos codificar la variable que tiene caracteres conflictivos a formato I90. Para ello utilizamos la funcin urlencondeKL, que viene en la librera de funciones de P#P. Podemos encontrar m"s informacin sobre esto en la M,D- Problemas con variables pasadas en la I90 en al unos caracteres.
+eferencia" 5i lo deseas, puedes complementar esta informacin con unos e2plicativos videotutoriales sobre el paso de variables por @64 en P#P.

Artculo por

Rubn Alvarez

C'*'( rocesar variables de #ormularios' E<- en H


4eremos cmo transferir variables con PHP , de una pgina a otra por medio de formularios, lo que se conoce %abitualmente por P:-0. 6ste tipo de transferencia es de ran utilidad ya que nos permite interaccionar directamente con el usuario. 6l proceso es similar al e2plicado para las I90s. Primeramente, presentamos una primera p" ina con el formulario cl"sico a rellenar y las variables son reco idas en una se unda p" ina que las procesa-ota" Co siempre se definen autom"ticamente las variables recibidas por el formulario en las p" inas 3eb, depende de una variable de confi uracin de P#P- re isterS lobals, que tiene que estar activada para que as sea. Rer comentarios del artculo al final de la p" ina para m"s informacin. <<T! > <<:A(> <T)T :>for%"lario.ht%l</T)T :> </<:A(> <NT(D> <VT7! !:T<T(G"3TST" A&T)TAG"destino'.php"> Ao%5re<5r> <)A39T TD3:G"T:[T" AA!:G"no%5re"><5r> Apellidos<5r> <)A39T TD3:G"T:[T" AA!:G"apellidos"><5r> <)A39T TD3:G"S9N!)T"> </VT7!> </NT(D> </<T! > <<T! > <<:A(> <T)T :>destino'.php</T)T :> </<:A(> <NT(D> <? echo ">aria5le 8no%5re: 8no%5re <5r>n"; echo ">aria5le 8apellidos: 8apellidos <5r>n" ?> </NT(D> </<T! >

.jecutar ejemplo

C'*'&'( GH-- Q E<-QDAR<


9ecordamos que es posible recopilar en una variable tipo array el con!unto de variables que han sido enviadas al script

Programacin en PHP: http://www.desarrolloweb.com/manuales/12/


' (os manuales de DesarrolloWeb.com tienen el cop!right de sus autores. )o reproducir sin autorizaci*n.

57

Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com por este mtodo a partir de la variable de sistema \#44PSP&54SR,95.
echo ">aria5le 8no%5re: " . 8<TT3$3TST$>A7S?"no%5re"B . "<5r>n"; -ota" ,unque podamos reco er variables con este array asociativo o utilizar directamente las variables que se definen en nuestra p" ina, resulta m"s se uro utilizar \#44PSP&54SR,95 por dos razones, la primera que as nos ase uramos que esa varible viene realmente de un formulario y la se unda, que as nuestro cdi o ser" m"s claro cuando lo volvamos a leer, porque quedar" especificado que esa variable estamos recibindola por un formulario.

C'*'*'( GQ E<, partir de P#P G.'.* se pueden reco er las variables de formulario utilizando tambin el array asociativo \SP&54, que es el mismo que \#44PSP&54SR,95, pero m"s corto de escribir.

C'*','( 7Femplo de restriccin de acceso por edad


Para continuar aportando e!emplos al uso de formularios vamos a realizar una p" ina que muestra solicita la edad del visitante y, dependiendo de dicha edad, permita o no visualizar el contenido de la 3eb. , los mayores de 'Q a;os se les permite ver la p" ina y a los menores no. 6l e!emplo es muy sencillo y no valdra tal cual est" para utilizarlo a modo de una verdadera restriccin de acceso. cnicamente nos sirve para saber cmo obtener datos de un formulario y como tratarlos para realizar una u otra accin, dependiendo de su valor. 0a p" ina del formulario, que hemos llamado edad.php tendra esta forma<ht%l> <head> <title>7estrin+ir por edad</title> </head> <5ody> <for% actionG"edad'.php" %ethodG"post"> :scri5e t" edad: <inp"t typeG"text" na%eG"edad" siSeG"'"> <inp"t typeG"s"5%it" *al"eG":ntrar"> </for%> </5ody> </ht%l>

6sta es una p" ina sin nin 7n cdi o P#P, simplemente tiene un formulario. Mi!monos en el action del formulario, que est" diri ido hacia una p" ina llamada edad).php, que es la que recibir" el dato de la edad y mostrar" un contenido u otro dependiendo de ese valor. 5u cdi o es el si uiente<ht%l> <head> <title>7estrin+ir por edad</title> </head> <5ody> <? 8edad G 8$3TST?"edad"B; echo "T" edad: 8edad<p>"; if (8edad < -0) Q echo "Ao p"edes entrar"; UelseQ echo "Nien*enido"; U ?> </5ody> </ht%l>

Programacin en PHP: http://www.desarrolloweb.com/manuales/12/


' (os manuales de DesarrolloWeb.com tienen el cop!right de sus autores. )o reproducir sin autorizaci*n.

58

Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com 6speramos que este otro cdi o tampoco resulte e2tra;o. 5implemente se recibe la edad, utilizando el array \SP&54. 0ue o se muestra la edad y se e!ecuta una e2presin condicional en funcin de que la edad sea menor que 'Q. 6n caso positivo Kedad menor que 'QL, se muestra un mensa!e que informa de que no se de!a acceder al p" ina. 6n caso ne ativo Kmayor o i ual a 'QL se muestra un mensa!e de bienvenida. Podemos ver el e!emplo en funcionamiento.
Artculo por

Rubn Alvarez

C','( Conceptos de programacin en H por la prctica


41deo en el que aclaramos y practicamos con conceptos bsicos de programacin como variables, estructuras de control, bucles, etc. 6n este vdeo e2plicamos al unos conceptos de pro ramacin b"sicos, orientados a personas que no saben pro ramacin o que tienen poca e2periencia pro ramando. 6s la tercera de una serie de tres clases ratuitas impartidas en /esarrollo>eb.com para acercarse al mundo de la pro ramacin con P#P. 6l ob!etivo es concretar en lneas de cdi o, y desde un punto de vista pr"ctico, al unos de los conceptos vistos durante las dos primeras clases de P#P para noPpro ramadores, como son las variables, estructuras de control para la toma de decisin y para hacer bucles o repeticiones. ,dem"s, queremos realizar al 7n e!emplo pr"ctico que nos ayude a demostrar lo 7til que es P#P para tareas del da a da de los desarrolladores, como es el envo y recepcin de un formulario. Pretendemos acercar el mundo de P#P para personas que no tienen conocimientos de pro ramacin de una manera r"pida y dar referencias para se uir aprendiendo, as como presentar tambin la se unda convocatoria del Curso de P#P que estamos or anizando en .scuela*'. 6n este artculo encontrar"s los cdi os de los e!ercicios realizados en clase y al final del todo, el vdeo de la propia clase, !unto con el turno de pre untas que nos realizaron los estudiantes. Comenzamos la clase e2plicando cmo arrancar un servidor 3eb para poder pro ramar con P#P en local, por si al uien todava anda perdido con ese asunto, y cmo colocar archivos dentro del servidor para poder acceder a ellos desde "localhost". , partir de ello realizamos dos e!emplos-

C','&'( &R Conceptos bsicos para la programacin con H


, modo de primeros pasos, y de introduccin al mundo de la pro ramacin y del len ua!e P#P, en este e!emplo se mostraron en cdi o conceptos b"sicos de la pro ramacin. '. ). +. G. (. Comentarios Rariables y tipos &peradores, aritmticos, de cadena, comparacin, asi nacin 6structuras de control para toma de decisiones 8ucles

6l listado de cdi o que se realiz en directo es el si uiente<C(T&TD3: ht%l> <ht%l> <head> <title>:H - de 3<3</title> </head> <5ody> <h->:stoy en 3<3CC</h->

Programacin en PHP: http://www.desarrolloweb.com/manuales/12/


' (os manuales de DesarrolloWeb.com tienen el cop!right de sus autores. )o reproducir sin autorizaci*n.

59

Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com


<?php //codi+o 3<3 //echo "<ola %"ndoCC"; // *aria5les 8%i*aria5le G 'L'L; 8*' G "texto"; //hacer al+o con ellas echo 8*'; echo "<5r>"; //operaciones // -M# // "hola" . "%"ndo" // 8*L G "pepe"; /K :sto es "n co%entario de %"chas lPneas

K/

8contador G 2 M 2; 8contador G 8contador M -1; echo 8contador; // estr"ct"ras de control 8edad G L#; if(8edad < -0)Q echo "Si es %enor de -0"; U // repeticiones o 5"cles 6hile(8contador < -11)Q // todo esto se repetir4 echo "contador *ale " . 8contador; echo "<5r>"; 8contador G 8contador M Z; U ?> </5ody> </ht%l>

C','*'( *R 7Femplo prctico de env$o 8 recepcin de un #ormulario


6n un se undo e!ercicio pr"ctico de esta clase de P#P se mostr lo f"cil que es enviar datos desde un formulario a una p" ina 3eb y recibirlos para procesar y realizar acciones diferentes se 7n sus valores. 5e e2plic que un formulario se hace en #4M0, tal como estamos acostumbrados a hacer si ya hemos realizado p" inas 3eb en al una ocasin. 6l cdi o de la p" ina con el formulario #4M0 que realizamos es el si uiente<C(T&TD3: ht%l> <ht%l> <head> <title>Vor%"lario</title> </head> <5ody> <h->:He%plo con for%"larios</h-> <for% %ethodG"post" actionG"reci5e-for%"lario.php"> Ao%5re: <inp"t typeG"text" na%eG"no%5re" *al"eG":scri5e t" no%5re"> <5r> :dad: <inp"t typeG"text" na%eG"edad" *al"eG"">

Programacin en PHP: http://www.desarrolloweb.com/manuales/12/


' (os manuales de DesarrolloWeb.com tienen el cop!right de sus autores. )o reproducir sin autorizaci*n.

60

Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com


<5r> <inp"t typeG"s"5%it" *al"eG":n*iar"> </for%> </5ody> </ht%l>

4oda la parte de P#P se queda simplemente en la recepcin de los datos de ese formulario y su procesamiento, que en este e!emplo se realiz en una p" ina y archivo aparte. 6l procesamiento que se implement es muy sencillo, simplemente para darnos cuenta de que b"sicamente con P#P podemos acceder a los datos del formulario de una manera muy sencilla, a travs de los arrays \SP&54 y mencionando sus "hermanos" \S@64 o \S96DI654. 6l e!emplo es muy simple, aunque poco a poco fuimos complicando un poco para introducir diversos mtodos de inte rar cdi o P#P en una p" ina #4M0, por lo que el listado a continuacin puede parecer un poco comple!o en un primer vistazo, aunque en la clase se e2plica todo perfectamente y paso a paso.
<C(T&TD3: ht%l> <ht%l> <head> <%eta charsetG""tf-0" /> <title>reci5o datos del for%</title> </head> <5ody> <?php //reci5o 8no%5re$"s"ario G 8$3TST?"no%5re"B; 8edad$"s"ario G 8$3TST?"edad"B; //*alido los datos //echo "<ola " . 8no%5re$"s"ario . " t" edad es " . 8edad$"s"ario; // to%a de decisiRn en f"nciRn de la edad if(8edad$"s"ario >G -0)Q ?> <di* styleG"color: 5l"e;"> <5> <?php echo "<ola 8no%5re$"s"arioE co%o t" edad es 8edad$"s"arioE p"edes *er este contenidoCC"; ?> </5></di*> <?php UelseQ //parte ne+ati*a echo =<span styleG"color: red;">=; echo " o siento 8no%5re$"s"arioE no p"edes *er esta p4+inaCCC AdiRsC"; echo "</span>"; U ?> </5ody> </ht%l>

C',','( D$deo completo de la tercera clase de H para no(programadores


, continuacin puedes ver el vdeo completo de la clase en el que se realizan los e!emplos de cdi o anteriores, paso por paso, a lo lar o de F* minutos. 6speramos que os sirva para aclarar muchos conceptos y tambin que os resulte entretenido. 9ecuerda que puedes se uir aprendiendo P#P con nosotros de manera autodidacta con los manuales ratuitos de /esarrollo>eb.com en la seccin y que si te interesa aprender de manera intensiva, uiada y personalizada, con clases en vivo durante las pr2imas semanas, puedes apuntarte con nosotros al Curso completo de P#P.

Programacin en PHP: http://www.desarrolloweb.com/manuales/12/


' (os manuales de DesarrolloWeb.com tienen el cop!right de sus autores. )o reproducir sin autorizaci*n.

61

Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com

Artculo por

Miguel Angel Alvarez

C'0'( Autollamada de pginas


Pginas que se llaman a si mismas pasando datos por P:-0 o *E0, formularios reentrantes y variables pasadas por /9+ a la misma pgina. ,l incluir un formulario en una p" ina se debe indicar, a travs del atributo action, el nombre del archivo P#P al que enviaremos los datos escritos en el formulario. /e este modo, para un esquema de envo de datos por formulario, pueden participar dos p" inas- una que contiene el formulario y otra que recibe los datos de dicho formulario. 0o mismo ocurre cuando enviamos variables por una I90. 4enemos una p" ina que contendr" el enlace y otra p" ina que recibir" y tratar" esos datos para mostrar unos resultados. 6n el presente artculo vamos a ver cmo se puede enviar y recibir datos de un formulario con una 7nica p" ina. ,simismo, veremos como en la misma p" ina podemos tener enlaces con paso de variables por I90 y adem"s, podemos reco er y tratar esos datos con la misma p" ina. , este efecto podemos llamarte "autollamada de p" inas", tambin se le suele llamar como "Mormularios reentrantes" o trminos similares. 6s muy interesante conocer el modo de funcionamiento de estos scripts, porque ser"n muy habituales en nuestras p" inas P#P y ayudan mucho a tener los cdi os ordenados. 6n ambos casos, para formularios o envo de datos por la I90, se debe se uir un esquema como esteP Comprobar si recibo datos por I90 o por formulario P 5i no recibo datos P Muestro el formulario o los enlaces que pasan variables. P 5i recibo datos P 6ntonces ten o que procesar el formulario o las variables de la I90 Para un formulario Reamos a continuacin como sera el cdi o de un formulario reentrante.
<ht%l> <head> <title>!e lla%o a %i %is%o...</title> </head> <5ody> <? if (C8$3TST)Q ?> <for% actionG"a"to-lla%ada.php" %ethodG"post"> Ao%5re: <inp"t typeG"text" na%eG"no%5re" siSeG"L1"> <5r> :%presa: <inp"t typeG"text" na%eG"e%presa" siSeG"L1"> <5r> Telefono: <inp"t typeG"text" na%eG"telefono" siSeG-# *al"eG"ML# " > <5r> <inp"t typeG"s"5%it" *al"eG":n*iar"> </for%> <? UelseQ echo "<5r>S" no%5re: " . 8$3TST?"no%5re"B; echo "<5r>S" e%presa: " . 8$3TST?"e%presa"B; echo "<5r>S" TelJfono: " . 8$3TST?"telefono"B; U

Programacin en PHP: http://www.desarrolloweb.com/manuales/12/


' (os manuales de DesarrolloWeb.com tienen el cop!right de sus autores. )o reproducir sin autorizaci*n.

62

Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com


?> </5ody> </ht%l>

6n el e!emplo, el primer paso es conocer si se est"n recibiendo o no datos por un formulario. Para ello se comprueba con un enunciado if si e2iste o no una variable \SP&54. 6n concreto if K?\SP&54L querra decir al o como "5i no e2isten datos venidos de un formulario". 6n caso de que no e2istan, muestro el formulario. 6n caso de que s e2istan, reco!o los datos y los imprimo en la p" ina. 5e puede ver el e!emplo en funcionamiento en una p" ina aparte. Para paso de variables por 6+L 0a idea es la misma. Comprobar con un enunciado if si se reciben o no datos desde una I90. Reamos el cdi o a continuacin. 5e trata de una p" ina que muestra una serie de enlaces para ver las tablas de multiplicar de el ' hasta el '*. Cada uno de los enlaces muestra una tabla de multiplicar. Pulsando el primer enlace podemos ver la tabla del ', pulsando el se undo la tabla del ), etc. 9ecordemos que la p" ina se llama a si misma. Para comprenderla m"s f"cilmente ser" interesante verla en funcionamiento.
<ht%l> <head> </head> <title>Ta5las de %"ltiplicar</title>

<5ody> <? if (C8$@:T)Q for (8iG-;8i<G-1;8iMM)Q echo "<5r><a hrefG=*er$ta5la.php?ta5laG8i=>>er la ta5la del 8i</a>\n"; U U else Q 8ta5laG8$@:T?"ta5la"B; ?> <ta5le ali+nGcenter 5orderG- cellpaddin+G"-"> <? for (8iG1;8i<G-1;8iMM)Q echo "<tr><td>8ta5la [ 8i</td><td>G</td><td>" . 8ta5la K 8i . "</td></tr>\n"; U ?> </ta5le> <? U ?> </5ody> </ht%l>

6ste cdi o es un poco m"s complicado, porque hace un poco m"s de cosas que el anterior, pero para el asunto que nos ocupa que es la autollamada de p" inas, todo si ue i ual de simple. #ay que fi!arse en el if que comprueba si se reciben o no datos por I90- if K?\S@64L, que querra decir al o como "5i no se reciben variables por la I90". 6n caso positivo Kno se reciben datos por I90L se muestran los enlaces para ver cada una de las tablas y en caso de que s se reciban datos, se muestra la tabla de multiplicar del n7mero que se est" recibiendo en la I90. Para hacer para mostrar los enlaces y las tablas de multiplicar se utilizan bucles for, que esperamos que no resulten desconocidos para el lector. Puede conocerse al o m"s sobre los bucles for en Control del flu!o en P#P- 8ucles %%.

Programacin en PHP: http://www.desarrolloweb.com/manuales/12/


' (os manuales de DesarrolloWeb.com tienen el cop!right de sus autores. )o reproducir sin autorizaci*n.

63

Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com


Artculo por

Miguel Angel Alvarez

C'4'( =tilizacin de las cooPies en H


(prendemos sobre las coo8ies en PHP . E plicamos en qu# consisten estas c#lebres galletas y describimos su empleo y utilidad. 5in duda este trmino resultara familiar para muchos. ,l unos lo habr"n ledo u odo pero no saben de qu se trata. &tros sin embar o sabr"n que las coo:ies son unas informaciones almacenadas por un sitio 3eb en el disco duro del usuario. 6sta informacin es almacenada en un archivo tipo te2to que se uarda cuando el nave ador accede al sitio 3eb.
+eferencia"Ina e2plicacin de las coo:ies m"s detallada se puede encontrar en el artculo Du son las coo:ies, publicado en /esarrollo>eb.com.

6s posible, por supuesto, ver estos archivos. Para abrirlos hay que ir al directorio C->indo3sCoo:ies para los usuarios de %6 GT o a C-...CetscapeIsersdefaultuser para usuarios de Cetscape. Como podris comprobar, en la mayora de los casos la informacin que se puede obtener es indescifrable. 0a utilidad principal de las coo:ies es la de poder identificar al nave ador una vez ste visita el sitio por se unda vez y as, en funcin del perfil del cliente dado en su primera visita, el sitio puede adaptarse din"micamente a sus preferencias Klen ua utilizada, colores de pantalla, formularios rellenados total o parcialmente, redireccin a determinadas p" inas...L. Para crear cookies con PHP, modificar o enerar una nueva coo:ie lo podemos hacer a partir de la funcin 5etCoo:iesetcoo;ie("no%5re$de$la$coo;ie"E*alorEexpiracion);

Pon amos un e!emplo sencillo. %ma inemos que queremos introducir en una variable coo:ie el nombre del visitante. 6l nombre ha podido ser previamente reco ido por un formulario tal y como hemos vistosetcoo;ie("persona"E8no%5reEti%e()M0/#11KL/2);

/e este modo hemos creado una coo:ie php llamada persona que tiene como valor el contenido de la variable \nombre y tendr" una duracin de ' a;o a partir de su creacin Kel tiempo timeKL actual en se undos sumado a un a;o en se undosL. 6s importante que la creacin de la coo:ie sea previa a la apertura del documento #4M0. 6n otras palabras, las llamadas a la funcin setcoo:ieKL deben ser colocadas antes de la etiqueta #4M0. Por otra parte, es interesante se;alar que el hecho de que definir una coo:ie ya e2istente implica el borrado de la anti ua. /el mismo modo, el crear una primera coo:ie conlleva la eneracin autom"tica del archivo te2to. Para utilizar el valor de la coo:ie en nuestros scripts tan slo tendremos que llamar la variable que define la coo:ie. E9ealmente sencillo? #ay que tener cuidado sin embar o de no definir variables en nuestro script con el mismo nombre que las coo:ies puesto que P#P privile iar" el contenido de la variable local con respecto a la coo:ie y no dar" un mensa!e de error. 6sto nos puede conducir a errores realmente difciles de detectar. 9ecordamos que es posible recopilar en una variable tipo array el con!unto de coo:ies almacenadas en el disco duro del internauta mediante la variable de servidor \#44PSC&&U%6SR,95 0as coo:ies son una herramienta fant"stica para personalizar nuestra p" ina pero hay que ser cautos ya que, por una parte, no todos los nave adores las aceptan y por otra, se puede deliberadamente impedir al nave ador la creacin de coo:ies. 6s por ello que resultan un complemento y no una fuente de variables infalible para nuestro sitio. Como has podido ver, las 3ookies son muy sencillas de utilizar en PHP. Puedes profundizar m"s en la creacin de coo:ies en el si uiente articulo- Coo:ies en P#P. ,dem"s, tambin te

Programacin en PHP: http://www.desarrolloweb.com/manuales/12/


' (os manuales de DesarrolloWeb.com tienen el cop!right de sus autores. )o reproducir sin autorizaci*n.

64

Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com recomendamos ver el Rideotutorial sobre las Coo:ies en P#P.
Artculo por

Rubn Alvarez

C'A'( CooPies en H
E plicaciones completas sobre coo8ies en PHP , con todos los parmetros de la funcin setcoo8ie;< y el array =>C::?'E 6n este artculo del Manual de P#P vamos a demostraros que las cookies en PHP son muy f"ciles de utilizar. =a empezamos a e2plicar al unas claves interesantes sobre este asunto en el artculo utilizacin de cookies, anterior entre a del temario de /esarrollo>eb.com sobre la pro ramacin en P#P. 6n el presente artculo vamos a mostrar otros detalles que conviene saber para traba!ar con las coo:ies. 4anto los procesos de creacin como los de lectura, pero sobre todo vamos a realizar un estudio completo sobre los diferentes par"metros que tenemos disponibles a la hora de llamar a la funcin setcoo:ieKL, que sirve para dar de alta las alletitas en el nave ador del usuario que visita nuestra 3eb.

C'A'&'( Crear cooPies en H


6n PHP las cookies se controlan por medio de una funcin , que nos sirve para enerarlas y uardarlas en el nave ador del usuario. 6s la funcin setcookie:;, que recibe varios par"metros, entre ellos, el nombre de la coo:ie, el valor y la caducidad. 6l 7nico par"metro obli atorio es el primero, el nombre de la coo:ie, los dem"s son opcionales. Reamos la lista entera de par"metros de setcoo:ieKL con sus e2plicaciones-ombre In strin con el nombre que queremos darle a la coo:ie a uardar. Puede ser cualquiera que deseemos. )alor Ina cadena de caracteres que es el valor que va a tener la coo:ie. 3aducidad 6s un timestamp con el valor de la fecha en la que caducar la cookie. 0o normal es utilizar la funcin timeKL, que enera el timestamp actual y sumarle el n7mero de se undos que quedamos que dure la coo:ie. Por e!emplo, timeKL T KH* [ H* [ )G [ +H(L hara que la coo:ie durase un a;o en el sistema del usuario. +uta 6l camino o ruta donde la coo:ie se podr" utilizar dentro del dominio. Por defecto, la coo:ie se podr" utilizar en el directorio donde se ha creado y sus subdirectorios. 5i indicamos "N" la coo:ie tendr" validez dentro de todo el dominio. 8ominio 6s el subdominio donde se podr" acceder a la coo:ie. 0as coo:ies slo se pueden enerar y utilizar para el dominio de la p" ina donde est" colocado el script, pero podemos hacerlo visible para todos los subdominios del dominio de la 3eb por medio de ".midominio.com". %eguro 6s un boleano que, si es true, indica que la coo:ie slo puede ser transmitida por shttp Khttp se uroL. %lo http 6sto es otro boleano que sirve para indicar que la coo:ie slo puede ser accedida por medio de las cabeceras del http, lo que la hara inalcanzable para len ua!es de script en el cliente como .avascript. 6ste par"metro fue a;adido en P#P (.).*

Programacin en PHP: http://www.desarrolloweb.com/manuales/12/


' (os manuales de DesarrolloWeb.com tienen el cop!right de sus autores. )o reproducir sin autorizaci*n.

65

Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com La function setcookie:; de PHP genera y env$a la cookie al navegador y devuelve un boleano, si es true indica que se pudo incluir en el nave ador del usuario y si es false indica que no ha podido colocarla en el sistema. Pero este valor no indica que lue o el visitante la haya aceptado o no, puesto que el nave ador puede haberlo confi urado para no aceptar coo:ies y esto no lo puede detectar setcoo:ieKL directamente. Por e!emplo, estas seran diferentes llamadas a setcoo:ieKLsetcoo;ie("%i+alleta"E "%i*alor"); setcoo;ie("coo;ie'"E "%i*alor'"E ti%e() M L/11); setcoo;ie("otracoo;ie"E "*alorfinal"E ti%e() M L/11E "/"E ".%ido%inio.co%");

Pero atencin en un asunto- Para enviar una coo:ie al nave ador se debe hacer antes de haber enviado las cabeceras del http al cliente, es decir, antes de haber escrito cualquier te2to en la p" ina. 5i no, P#P podr" lanzar un error de headers already sent Kcabeceras ya enviadasL. +ecuperar cookies con PHP Por otra parte, para recibir las coo:ies que el nave ador del usuario pueda tener creadas en el sistema se utiliza el array asociativo \SC&&U%6. 6n este array est"n todas las coo:ies que tiene disponible la p" ina P#P en el dominio y el directorio donde est" colocado. Por medio del nombre de la coo:ie accedemos a su valor8$&TT]):?"%i+alleta"B; 8$&TT]):?"coo;ie'"B;

Para ver un e!emplo de uso de cookies PHP acceder al taller de P#P 6stilos C55 distintos a una p" ina con P#P y coo:ies o al Rideotutorial sobre las Coo:ies en P#P.
Artculo por

Miguel Angel Alvarez

C'C'( <esiones )
@os introducimos al concepto de sesin y aprendemos su manejo y funcionamiento. 6n los pro ramas que hemos visto hasta ahora, hemos utilizado variables que slo e2istan en el archivo que era e!ecutado. Cuando car "bamos otra p" ina distinta, los valores de estas variables se perdan a menos que nos tom"semos la molestia de pasarlos por la I90 o inscribirlos en las coo:ies o en un formulario para su posterior e2plotacin. 6stos mtodos, aunque 7tiles, no son todo lo pr"cticos que podran en determinados casos en los que la variable que queremos conservar ha de ser utilizada en varios scripts diferentes y distantes los unos de los otros. Podramos pensar que ese problema puede quedar resuelto con las coo:ies ya que se trata de variables que pueden ser invocadas en cualquier momento. 6l problema, ya lo hemos dicho, es que las coo:ies no son aceptadas ni por la totalidad de los usuarios ni por la totalidad de los nave adores lo cual implica que una aplicacin que se sirviera de las coo:ies para pasar variables de un archivo a otro no sera '**X infalible. 6s importante a veces pensar en "la inmensa minora", sobre todo en aplicaciones de comercio electrnico donde debemos captar la mayor cantidad de clientes posibles y nuestros scripts deben estar preparados ante cualquier eventual deficiencia del nave ador del cliente. Cos resulta pues necesario el poder declarar ciertas variables que puedan ser reutilizadas tantas veces como queramos dentro de una misma sesin. %ma inemos un sitio multilin de en el que cada vez que queremos imprimir un mensa!e en cualquier p" ina necesitamos saber en qu idioma debe hacerse. Podramos introducir un script identificador de la len ua del nave ador en cada uno de los archivos o bien declarar una variable que fuese valida para toda la sesin y que tuviese como valor el idioma reconocido en un primer momento. Pensemos tambin en un carrito de la compra de una tienda virtual donde el cliente va nave ando por las p" inas del sitio y a;adiendo los artculos que quiere comprar a un carrito. 6ste carrito podra ser perfectamente una variable de tipo array KtablaL que almacena para cada referencia la cantidad de artculos contenidos en el carrito. 6sta variable debera

Programacin en PHP: http://www.desarrolloweb.com/manuales/12/


' (os manuales de DesarrolloWeb.com tienen el cop!right de sus autores. )o reproducir sin autorizaci*n.

66

Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com ser obviamente conservada continuamente a lo lar o de todos los scripts. 6ste tipo de situaciones son solventadas a partir de las variables de sesin. Ina sesin es considerada como el intervalo de tiempo empleado por un usuario en recorrer nuestras p" inas hasta que abandona nuestro sitio o de!a de actuar sobre l durante un tiempo prolon ado o bien, sencillamente, cierra el nave ador. P#P nos permite almacenar variables llamadas de sesin que, una vez definidas, podr"n ser utilizadas durante este lapso de tiempo por cualquiera de los scripts de nuestro sitio. 6stas variables ser"n especificas del usuario de modo que varias variables sesin del mismo tipo con distintos valores pueden estar coe2istiendo para cada una de las sesiones que est"n teniendo lu ar simult"neamente. 6stas sesiones tienen adem"s su propio identificador de sesin que ser" 7nico y especfico. ,l unas me!oras referentes al empleo de sesiones han sido introducidas con P#PG. 6s a esta nueva versin a la que haremos referencia a la hora de e2plicar las funciones disponibles y la forma de operar. Para los pro ramadores de P#P+ la diferencia mayor es que est"n obli ados a estionar ellos mismos las sesiones definir sus propios identificadores de sesin. Reamos en el si uiente captulo la forma de plasmar esta necesidad tcnica en nuestros scripts a partir de las funciones que estionan las sesiones en P#P.
Artculo por

Rubn Alvarez

C'6'( <esiones en H ))
$escribimos los metodos de trabajo con sesiones en PHP , iniciali!ar sesin, crear variables de sesin o recuperarlas. 0as sesiones, en aplicaciones 3eb realizadas con P#P y en el desarrollo de p" inas 3eb en eneral, nos sirven para almacenar informacin que se memorizar" durante toda la visita de un usuario a una p" ina 3eb. /icho de otra forma, un usuario puede ver varias p" inas durante su paso por un sitio 3eb y con sesiones podemos almacenar variables que podremos acceder en cualquiera de esas p" inas. /i amos que las sesiones son una manera de uardar informacin, especfica para cada usuario, durante toda su visita. Cada usuario que entra en un sitio abre una sesin, que es independiente de la sesin de otros usuarios. 6n la sesin de un usuario podemos almacenar todo tipo de datos, como su nombre, productos de un hipottico carrito de la compra, preferencias de visualizacin o traba!o, p" inas por las que ha pasado, etc. 4odas estas informaciones se uardan en lo que denominamos variables de sesin. P#P dispone de un mtodo bastante cmodo de uardar datos en variables de sesin, y de un !ue o de funciones para el traba!o con sesiones y variables de sesin. 0o veremos en este artculo. Para cada usuario P#P internamente enera un identificador de sesin 7nico, que sirve para saber las variables de sesin que pertenecen a cada usuario. Para conservar el identificador de sesin durante toda la visita de un usuario a una p" ina P#P almacena la variable de sesin en una coo:ie, o bien la propa a a travs de la I90. 6sto se puede confi urar desde el archivo php.ini.

C'6'&'( -rabaFo con sesiones en H


Cuando queremos utilizar variables de sesin en una p" ina tenemos que iniciar la sesin con la si uiente funcinsession0start :; %nicia una sesin para el usuario o contin7a la sesin que pudiera tener abierta en otras p" inas. ,l hacer sessionSstartKL P#P internamente recibe el identificador de sesin almacenado en la coo:ie o el que se enve a travs de la I90. 5i no e2iste tal identificador se sesin, simplemente lo crea.

Programacin en PHP: http://www.desarrolloweb.com/manuales/12/


' (os manuales de DesarrolloWeb.com tienen el cop!right de sus autores. )o reproducir sin autorizaci*n.

67

Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com

-ota" 5i en el php.ini se ha definido la variable session.autoSstart V ' se inicializa autom"ticamente la sesin en cada p" ina que visita un usuario, sin que se ten a que hacer el sessionSstartKL

Ina vez inicializada la sesin con sessionSstartKL podemos a partir de ahora utilizar variables de sesin, es decir, almacenar datos para ese usuario, que se conserven durante toda su visita o recuperar datos almacenados en p" inas que haya podido visitar. 0a sesin se tiene que inicializar antes de escribir cualquier te2to en la p" ina. 6sto es importante y de no hacerlo as corremos el ries o de recibir un error, porque al iniciar la sesin se deben leer las coo:ies del usuario, al o que no se puede hacer si ya se han enviado las cabeceras del #44P.
-ota" si se intenta abrir una sesin despus de haber enviado te2to de la p" ina al cliente se obtendr" el si uiente mensa!e>arnin - sessionSstartKL- Cannot send session cache limiter P headers already sent Koutput started at L

Ina vez iniciada la sesin podemos utilizar variables de sesin a travs de \S5655%&C, que es un array asociativo, donde se accede a cada variable a partir de su nombre, de este modo8$S:SS)TA?"no%5re$de$*aria5le"B -ota" \S5655%&C es una variable lobal que e2iste a partir de P#P G.'.*. 0o normal es que podamos acceder a esa variable normalmente, pero si nuestra versin de P#P no est" actualizada podemos intentarlo con \#44PS5655%&CSR,95, que es tambin un array asociativo, aunque no es de "mbito lobal. 5i \#44PS5655%&CSR,95 tampoco funciona tendremos que re istrar cada variable por separado con la funcin sessionSre isterKL, envi"ndo por par"metro los nombres de las variables de sesin que desea utilizar desde P#P.

62isten otras dos confi uraciones del php.ini que afectan al traba!o con variables de sesin, que son trac:Svars y re isterS lobals. Por defecto trac:Svars est" activado y re isterS lobals est" desactivado. 6ste es el caso normal y el que suponemos tendr" el servidor donde pro rames, pero si esas variables cambian podra cambiar al una cosita, como que las variables se ten an que re istrar e2plcitamente con sessionSre isterKL. 6!emplo de cdi o para definir una variable de sesin<? session$start(); ?> <ht%l> <head> <title>@enerar *aria5le de sesiRn</title> </head> <5ody> <? 8$S:SS)TA?"%i*aria5ledesesion"B G "<ola este es el *alor de la *aria5le de sesiRn"; ?> </5ody> </ht%l>

Como se puede ver, es importante inicializar la sesin antes de hacer otra cosa en la p" ina. 0ue o podremos definir variables de sesin en culquier lu ar del cdi o P#P de la p" ina. Para leer una variable de sesin se hace a travs del mismo array asociativo \S5655%&C. 6s tan sencillo como haramos para utilizar cualquier otra variable, lo 7nico es que tenemos que haber inicializado la sesin previamente. = por supuesto, que la variable que deseamos acceder e2ista previamente.
<? session$start(); ?> <ht%l> <head> <title> eo *aria5le se sesiRn</title> </head> <5ody> !"estro esa *aria5le: <?

Programacin en PHP: http://www.desarrolloweb.com/manuales/12/


' (os manuales de DesarrolloWeb.com tienen el cop!right de sus autores. )o reproducir sin autorizaci*n.

68

Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com


echo 8$S:SS)TA?"%i*aria5ledesesion"B; ?> </5ody> </ht%l>

Como se puede ver, al inicio del cdi o hemos inicializado la sesin y lue o en cualquier parte del cdi o podramos acceder a las variables de sesin que tuvisemos creadas.
-ota" si intentamos acceder a una variable de sesin con \S5655%&C que no ha sido creada obtendremos otro mensa!e de error- CoticeIndefined inde2- mivariabledesesion, que es el mismo que si intentamos acceder a cualquier elemento de un array que no e2iste.

(s sobre sesiones en PHP 0a si uiente informacin sobre sesiones de P#P tambin puede ser de 7til lectura. Co obstante lo e2presado hasta aqu es una informacin mucho m"s actualizada. 6n las pr2imas lneas se e2plican mecanismos para sesiones pero todos los que se comentan, aunque son v"lidos, no son actuales por tratarse de e2plicaciones para versiones de P#P m"s anti uas. #emos dicho en el captulo anterior que la variables de sesin se diferencian de las variables cl"sicas en que stas residen en el servidor, son especificas de un solo usuario definido por un identificador y pueden ser utilizadas en la lobalidad de nuestras p" inas. Para iniciar una sesin podemos hacerlo de dos formas distintasP/eclaramos abiertamente la apertura de sesin por medio de la funcin session#start$%. 6sta funcin crea una nueva sesin para un nuevo visitante o bien recupera la que est" siendo llevada a cabo. P/eclaramos una variable de sesin por medio de la funcin session#register$&variable&%. 6sta funcin, adem"s de crear o recuperar la sesin para la p" ina en la que se incluye tambin sirve para introducir una nueva variable de tipo sesin. 0as sesiones han de ser iniciadas al principio de nuestro script. ,ntes de abrir cualquier etiqueta o de imprimir cualquier cosa. 6n caso contrario recibiremos un error. Con lo visto, vamos a proponer el e!emplo cl"sico de utilizacin de una sesin- un contador. 6ste contador deber" aumentar de una unidad cada vez que recar amos la p" ina o apretamos al enlace<? session$re+ister(=contador=); ?> <<T! > <<:A(> <T)T :>contador.php</T)T :> </<:A(> <NT(D> <? )f (isset(8contador)GG1) Q8contadorG1;U MM8contador; echo "<a hrefG"contador.php"><as recar+ado esta p4+ina 8contador *eces</a>"; ?> </NT(D> </<T! >

.jecutar script 0a condicin if tiene en cuenta la posibilidad de que la variable contador no haya sido todava inicializada. 0a funcin isset se encar a de dar un valor cero cuando una variable no ha sido inicializada.

Programacin en PHP: http://www.desarrolloweb.com/manuales/12/


' (os manuales de DesarrolloWeb.com tienen el cop!right de sus autores. )o reproducir sin autorizaci*n.

69

Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com &tras funciones 7tiles para la estin de sesiones son-

.uncin 4ession:id( 4ession:destro!(

Descripcin )os de-uel-e el identi&icador de la sesi*n Da por abandonada la sesi*n eliminando -ariables e identi&icador.

4ession:unregister(Q-ariabl 7bandona una -ariable sesi*n eQ

Para aprender m"s sobre las sesiones, concretamente para ver una aplicacin que estiona un carrito de compra por medio de variables sesin visita nuestro articulo del taller de PHP. 5i buscas m"s funciones o informacin adicional sobre las sesiones, consulta el manual oficial de PHP.
Artculo por

Rubn Alvarez

Parte *:

+ases !e !atos en PHP


Entramos en una de las partes m2s interesantes del manual de /0/6 con los captulos 1ue tratan las bases de datos. #raba,aremos con 3!45( ! mostraremos c*mo hacer todas las operaciones tpicas con una base de datos6 como acceso a registros6 inserci*n6 modi&icaci*n ! borrado.

6'&'( -rabaFar con bases de datos en H


'nter#s del empleo de bases de datos con pginas dinmicas. Presentacin del lenguaje -.+ y de la base My-.+. Pasos previos a los ejemplos.

Programacin en PHP: http://www.desarrolloweb.com/manuales/12/


' (os manuales de DesarrolloWeb.com tienen el cop!right de sus autores. )o reproducir sin autorizaci*n.

70

Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com Ina de las principales venta!as que presenta el traba!ar con p" inas din"micas del lado del servidor es el poder traba!ar con contenidos que est"n alo!ados en bases de datos. /e esta forma, podemos or anizarlos, actualizarlos y buscarlos de una manera mucho m"s simple. 6l len ua!e P#P, ya hemos dicho, ofrece interfaces para el acceso a la mayora de las bases de datos e2istentes. Podr"s encontrar bases de datos de cdi o abierto, como My5D0, comerciales porpietarias como &racle y adem"s tiene libreras para acceso a datos por &/8C, lo que nos permite comunicar con todas las bases de datos posibles en sistemas Microsoft, como ,ccess o 5D0 5erver. @racias a los !ue os de funciones e2istentes para cada sistema estor de base de datos, podremos realizar cualquier accin con los datos que necesitemos para el desarrollo de la m"s variada ama de aplicacin 3eb. 6sta interaccin se realiza, por un lado, a partir de las funciones que P#P nos propone para cada tipo de base de datos y, por otro estableciendo un di"lo o a partir de un idioma universal- 5D0 K5tructured Duery 0an ua eL el cual es com7n a todas las bases de datos. 6ste len ua!e resulta, como veremos en el tutorial de %&L, muy potente y f"cil de aprender. , lo lar o del manual de P#P nos limitaremos a la utilizacin las instrucciones 5D0 b"sicas, que ser"n aprendidas a medida que e2plicamos las diferentes formas de actuar sobre una base de datos, de!ando para el tutorial de 5D0 los aspectos m"s avanzados de ese len ua!e de acceso a datos. Como base e!emplo de estos captulos hemos ele ido My5D0, sin duda la base de datos m"s e2tendida en combinacin con P#P. 5u ratuidad, eficiencia y simplicidad la han hecho una buena candidata. Co obstante, en caso de utilizar cualquier otra base compatible con P#P, las correcciones a llevar a cabo con respecto a nuestros e!emplos no son e2cesivamente randes y la lectura de esos captulos se uir" siendo de ran utilidad.
-ota" =a hemos e2plicado en captulos anteriores la instalacin de My5D0, a la vez que hemos presentado los comandos b"sicos que nos pueden permitir abordarla con una relativa facilidad.

6'&'&'( Con#igurar la base de datos !ue vamos a utilizar para los eFemplos de este manual
Ina vez instalado My5D0 y antes de poder comenzar con nuestros e!emplos, ser" necesario llevar a cabo las si uientes operacionesP%ntroducidos dentro de My5D0, crearemos la base de datos e!emplo con la si uiente sentenciacreate data5ase eHe%plo;

P5eleccionaremos la base e!emplo como la base a utilizar"se eHe%plo

PCrearemos a continuacin la tabla clientes a partir de la si uiente sentenciacreate ta5le clientes ( no%5re *archar(-11)E telefono *archar(-11) );

,hora ya disponemos de nuestra tabla vaca. 5lo queda comenzar a llenarla con los datos que iremos insertando. 6l con!unto de scripts utilizados para el bloque de bases de datos puede ser descar ado a u$.

6'&'*'( /uin de art$culos relativos a las bases de datos en H


, lo lar o del manual ofreceremos varios artculos, en los que trataremos cada uno de los accesos a la base de datos m"s tpicos, como selecciones, actualizaciones o inserciones, si uiendo el si uiente uin %nsercin de re istros 5eleccin de re istros ,ctualizacin de re istros 8orrado de re istros
71

Programacin en PHP: http://www.desarrolloweb.com/manuales/12/


' (os manuales de DesarrolloWeb.com tienen el cop!right de sus autores. )o reproducir sin autorizaci*n.

Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com Para completar todo aquello que debes saber sobre el acceso a bases de datos en P#P encontrar"s multitud de artculos pr"cticos en el 4aller de P#P, como son la 9ecepcin el 7ltimo %/ de una insercin con P#P y My5D0, la Pa inacin de resultados con P#P y My5D0, Pro ramar un buscador con P#P y My5D0, etc. ,dem"s, para los que prefieran verlo todo paso a paso en vivo, contamos con un videotutorial sobre las bases de datos en P#P que te ayudar" a entender me!or cmo traba!ar con las bases de datos en P#P.
Artculo por

Rubn Alvarez

6'*'( )ntroduccin de nuevos registros con H


2orma sencilla de introducir nuevos elementos en una tabla de base de datos. 9eali!amos un 'nsert con PHP . Ina vez creada la tabla clientes en nuestra base de datos e'emplo, el paso si uiente sea llenarla con re istros. Para ello vamos a ver este artculo, en el que se reciben datos desde un formulario y lue o se insertan con P#P en la base de datos, en la tabla adecuada. 0os datos del re istro pueden ser reco idos, por e!emplo, a partir de un formulario. ,qu os proponemos un simple documento #4M0 que reco e los datos y los enva a una p" ina P#P que se encar a de procesarlos<<T! > <<:A(> <T)T :>)nsertar.ht%l</T)T :> </<:A(> <NT(D> <di* ali+nG"center"> <h->)nsertar "n re+istro</h-> <5r> <VT7! !:T<T(G"3TST" A&T)TAG"insertar.php"> Ao%5re<5r> <)A39T TD3:G"T:[T" AA!:G"no%5re"><5r> TelJfono<5r> <)A39T TD3:G"T:[T" AA!:G"telefono"><5r> <)A39T TD3:G"S9N!)T" *al"eG")nsertar"> </VT7!> </di*> </NT(D> </<T! >

0le ados a la p" ina destino del formulario Kinsertar"phpL, lo primero que habr" que hacer es establecer un vnculo entre el pro rama y la base de datos. 6sta cone2in se lleva a cabo con la funcin mysql#connect. , continuacin, deberemos enerar una orden de insercin del re istro en len ua!e 5D0. 6sta orden ser" e!ecutada por medio de la funcin mysql#db#query. 6n esta funcin especificaremos primeramente la base de datos sobre la que queremos actuar y a continuacin introduciremos la sentencia 5D0<<T! > <<:A(> <T)T :>)nsertar.php</T)T :> </<:A(> <NT(D> <? //&onexion con la 5ase %ys,l$connect("localhost"E"t"$"ser"E"t"$pass6ord"); //selecciRn de la 5ase de datos con la ,"e *a%os a tra5aHar %ys,l$select$d5("%i$5ase$datos"); //:Hec"cion de la sentencia S^ %ys,l$,"ery("insert into clientes (no%5reEtelefono) *al"es (=8no%5re=E=8telefono=)"); ?> <h-><di* ali+nG"center">7e+istro )nsertado</di*></h->

Programacin en PHP: http://www.desarrolloweb.com/manuales/12/


' (os manuales de DesarrolloWeb.com tienen el cop!right de sus autores. )o reproducir sin autorizaci*n.

72

Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com


<di* ali+nG"center"><a hrefG"lect"ra.php">>is"aliSar el contenido de la 5ase</a></di*> </NT(D> </<T! >

.jecutar ejemplo 0os parametros user y pass3ord son definidos por el creador de la base. 6s conveniente en un principio, al crear nuestras bases, traba!ar sin ellos con lo cual de!aremos las cadenas correspondientes vacias- "". ,dem"s de la propia insercin, el pro rama avisa de la introduccin del re istro y ofrece un enlace hacia una p" ina de lectura la cual ser" comentada a continuacin. Co entraremos en la descripcin de la orden 5D0, para comprender m"s acerca de cmo introducir re istros, refererirse al tutorial de %&L.
Artculo por

Rubn Alvarez

6','( <eleccin 8 lectura de registros con H


/tili!amos el comando -elect de -.+ para crear una seleccin de nuestra tabla y mostrar todos los datos en pantalla por medio de un bucle. Con PHP . /entro de una base de datos, or anizada por tablas, la seleccin de una tabla entera o de un cierto numero de re istros resulta una operacin rutinaria. ,qu os mostramos una forma bastante cl"sica de mostrar en pantalla a partir de un bucle los re istros seleccionados por una sentencia 5D0<<T! > <<:A(> <T)T :>lect"ra.php</T)T :> </<:A(> <NT(D> <h-><di* ali+nG"center"> ect"ra de la ta5la</di*></h-> <5r> <5r> <? //&onexion con la 5ase %ys,l$connect("localhost"E"t"$"ser"E"t"$pass6ord"); //selecciRn de la 5ase de datos con la ,"e *a%os a tra5aHar %ys,l$select$d5("%i$5ase$datos"); //:Hec"ta%os la sentencia S^ 8res"ltG%ys,l$,"ery("select K fro% clientes"); ?> <ta5le ali+nG"center"> <tr> <th>Ao%5re</th> <th>TelJfono</th> </tr> <? //!ostra%os los re+istros 6hile (8ro6G%ys,l$fetch$array(8res"lt)) Q echo =<tr><td>=.8ro6?"no%5re"B.=</td>=; echo =<td>=.8ro6?"telefono"B.=</td></tr>=; U %ys,l$free$res"lt(8res"lt) ?> </ta5le> <di* ali+nG"center"> <a hrefG"insertar.ht%l">AWadir "n n"e*o re+istro</a><5r>

Programacin en PHP: http://www.desarrolloweb.com/manuales/12/


' (os manuales de DesarrolloWeb.com tienen el cop!right de sus autores. )o reproducir sin autorizaci*n.

73

Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com


<a hrefG"act"aliSar-.php">Act"aliSar "n re+istro existente</a><5r> <a hrefG"5orrar-.php">Norrar "n re+istro</a><5r> </di*> </NT(D> </<T! >

.jecutar script 0os pasos a realizar son, en un principio, los vistos para la insercin de un re istro- Cone2in a la base y e!ecucin de la sentencia. 6sta vez, la informacin de dicha e!ecucin ser" almacenada en una variable K resultL. 6l si uiente paso ser" plasmar en pantalla la informacin reco ida en \result. 6sto lo haremos mediante la funcin mysql#fetch#array que devuelve una variable array con los contenidos de un re istro a la vez que se posiciona sobre el si uiente. 6l bucle while nos permite leer e imprimir secuencialmente cada uno de los re istros. 0a funcin mysql#free#result se encar a de liberar la memoria utilizada para llevar a cabo la consulta. ,unque no es necesaria su utilizacin, resulta altamente aconse!able.
Artculo por

Rubn Alvarez

6'0'( Actualizacin de un registro de la base de datos con H


E plicamos cmo modificar o actuali!ar un registro e istente en una tabla de una base de datos, con PHP . Es decir, %acer un update para un registro de una tabla, desde PHP . Para mostrar cmo se actualiza un re istro presente en nuestra base de datos, vamos a hacerlo a partir de un caso un poco m"s comple!o para que empecemos a familiarizarnos con estas operaciones. 9ealizaremos un par de scripts que permitan cambiar el numero de telfono de las distintas personas presentes en nuestra base. 6l nombre de estas personas, as como el nuevo numero de telfono, ser"n reco idos por medio de un formulario. 6l archivo del formulario va a ser esta vez un script P#P en el que efectuaremos una llamada a nuestra base de datos para construir un men7 desple able donde aparezcan todos los nombres. 0a cosa quedara as<<T! > <<:A(> <T)T :>Act"aliSar-.php</T)T :> </<:A(> <NT(D> <di* ali+nG"center"> <h->Act"aliSar "n re+istro</h-> <5r> <? //&onexion con la 5ase %ys,l$connect("localhost"E"t"$"ser"E"t"$pass6ord"); //selecciRn de la 5ase de datos con la ,"e *a%os a tra5aHar %ys,l$select$d5("%i$5ase$datos"); echo =<VT7! !:T<T(G"3TST" A&T)TAG"act"aliSar'.php">Ao%5re<5r>=; //&rea%os la sentencia S^ y la eHec"ta%os 8sS^ G"Select no%5re Vro% clientes Trder Ny no%5re"; 8res"ltG%ys,l$,"ery(8sS^ ); echo =<select na%eG"no%5re">=; //@enera%os el %en" desple+a5le 6hile (8ro6G%ys,l$fetch$array(8res"lt)) Qecho =<option>=.8ro6?"no%5re"B;U ?> </select> <5r>

Programacin en PHP: http://www.desarrolloweb.com/manuales/12/


' (os manuales de DesarrolloWeb.com tienen el cop!right de sus autores. )o reproducir sin autorizaci*n.

74

Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com


TelJfono<5r> <)A39T TD3:G"T:[T" AA!:G"telefono"><5r> <)A39T TD3:G"S9N!)T" *al"eG"Act"aliSar"> </VT7!> </di*> </NT(D> </<T! >

0a manera de operar para construir el men7 desple able es la misma que para visualizar la tabla. /e nuevo empleamos un bucle while en combinacin con la funcin mysql#fetch#array lo que nos permite mostrar cada una de las opciones. 6l script de actualizacin ser" muy parecido al de insercin-ota" Para quien desee una referencia completa sobre cmo se hacen las sentencias IP/,46 en el len ua!e 5D0, recomendamos leer el artculo ,ctualizacin de re istros con IP/,46 en 5D0. <<T! > <<:A(> <T)T :>Act"aliSar'.php</T)T :> </<:A(> <NT(D> <? //&onexion con la 5ase %ys,l$connect("localhost"E"t"$"ser"E"t"$pass6ord"); //selecciRn de la 5ase de datos con la ,"e *a%os a tra5aHar %ys,l$select$d5("%i$5ase$datos"); //&rea%os la sentencia S^ y la eHec"ta%os 8sS^ G"9pdate &lientes Set telefonoG=8telefono= Yhere no%5reG=8no%5re="; %ys,l$,"ery(8sS^ ); ?> <h-><di* ali+nG"center">7e+istro Act"aliSado</di*></h-> <di* ali+nG"center"><a hrefG"lect"ra.php">>is"aliSar el contenido de la 5ase</a></di*> </NT(D> </<T! >

Como habis podido comprobar, la operacin IP/,46 no tiene demasiada comple!idad. 5in embar o, para afianzar estos conocimientos recomendamos ver el vdeo sobre la actualizacin de re istros en My5D0 con P#P.
Artculo por

Rubn Alvarez

6'4'( Borrado de un registro con H


(prendemos a eliminar registros de una tabla de base de datos, con un ejemplo prctico en PHP. &tra de las operaciones elementales que se pueden realizar sobre una base de datos es borrar un re istro. Para hacerlo, 5D0 nos propone sentencias del tipo Delete. Re"moslo con un e!emplo aplicado a nuestra a enda. Cabe se;alar que primero debemos seleccionar el re istro que se desea borrar y lue o realizar el borrado propiamente dicho. Para ello crearemos un men7 desple able din"mico, donde se podr" seleccionar el elemento que se desea borrar. 0ue o se pasar" a una p" ina P#P una referencia al elemento seleccionado, para borrarlo de la base de datos.
<<T! > <<:A(> <T)T :>Norrar-.php</T)T :> </<:A(> <NT(D> <di* ali+nG"center"> <h->Norrar "n re+istro</h->

Programacin en PHP: http://www.desarrolloweb.com/manuales/12/


' (os manuales de DesarrolloWeb.com tienen el cop!right de sus autores. )o reproducir sin autorizaci*n.

75

Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com


<5r> <? //&onexion con la 5ase %ys,l$connect("localhost"E"t"$"ser"E"t"$pass6ord"); //selecciRn de la 5ase de datos con la ,"e *a%os a tra5aHar %ys,l$select$d5("%i$5ase$datos"); echo =<VT7! !:T<T(G"3TST" A&T)TAG"5orrar'.php">Ao%5re<5r>=; //&rea%os la sentencia S^ y la eHec"ta%os 8sS^ G"Select no%5re Vro% clientes Trder Ny no%5re"; 8res"ltG%ys,l$,"ery(8sS^ ); echo =<select na%eG"no%5re">=; //!ostra%os los re+istros en for%a de %en_ desple+a5le 6hile (8ro6G%ys,l$fetch$array(8res"lt)) Qecho =<option>=.8ro6?"no%5re"B;U %ys,l$free$res"lt(8res"lt) ?>

WNselectY WbrY W%CPI4 4=P6V"5I8M%4" valueV"8orrar"Y WNM&9MY WNdivY WN8&/=Y WN#4M0Y 6l si uiente paso es hacer efectiva la operacin a partir de la e!ecucin de la sentencia 5D0 que construimos a partir de los datos del formulario<<T! > <<:A(> <T)T :>Norrar'.php</T)T :> </<:A(> <NT(D> <? //&onexion con la 5ase %ys,l$connect("localhost"E"t"$"ser"E"t"$pass6ord"); //selecciRn de la 5ase de datos con la ,"e *a%os a tra5aHar %ys,l$select$d5("%i$5ase$datos");

NNCreamos la sentencia 5D0 y la e!ecutamos \s5D0V"/elete Mrom Clientes >here nombreVb\nombreb"Z mysqlSqueryK\s5D0LZ BY Wh'YWdiv ali nV"center"Y9e istro 8orradoWNdivYWNh'Y Wdiv ali nV"center"YWa hrefV"lectura.php"YRisualizar el contenido de la baseWNaYWNdivY WN8&/=Y WN#4M0Y
-ota" Rarios comentarios pre untan por el archivo lectura.php que est" enlazado en el cdi o del e!emplo. 4enemos que decir que ese archivo se coment en el artculo de la 5eleccin y lectura de re istros de la base de datos por medio de P#P.

Con este captulo cerramos el bloque de accesos a bases de datos con P#P. Para mas informacin relacionada podis referiros al taller de PHP donde podris encontrar al 7n que otro artculo interesante al respecto. ,simismo, para los que prefieran el vdeo como material did"ctico, recomendamos ver el Rideotutorial sobre las bases de datos con P#P.

Programacin en PHP: http://www.desarrolloweb.com/manuales/12/


' (os manuales de DesarrolloWeb.com tienen el cop!right de sus autores. )o reproducir sin autorizaci*n.

76

Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com

Artculo por

Rubn Alvarez

6'A'( Actualizacin de #unciones H para acceso a M8<BL


+as nuevas versiones de PHP ofrecen juegos de funciones My-.+ diferentes de los tradicionales, que implementan diversas mejoras en la gestin de bases de datos.

P#P est" en constante evolucin y prueba de ello son las novedades que venimos a comentar en este artculo. 5e trata de las nuevas funciones de acceso a bases de datos My5D0 que est"n disponibles desde P#P (, con nombres diferentes a las funciones disponibles en el pasado y que tambin tienen al unos cambios en el modo de traba!ar. 0as nuevas funciones est"n creadas para dar respuesta a diversas me!oras que el sistema estor de bases de datos My5D0 ha incorporado recientemente.

6ste es un tema fundamental, sobre todo para las personas que conocen P#P desde hace tiempo, que como yo, est"bamos acostumbrados a usar un !ue o de funciones que a da de hoy se encuentra obsoleto y que no se recomienda utilizar. 9ealmente, en el momento de escribir este artculo las funciones de My5D0 anti uas todava, se pueden usar, pero la previsin es que se eliminen en P#P (.(, por lo que resulta imprescindible actualizar nuestros conocimientos. ,fortunadamente, es bastante sencillo el paso a las nuevas funciones de My5D0, puesto que el esquema de funcionamiento es pr"cticamente el mismo, as como los nuevos nombres de funciones, que tienen muy pocas variaciones. Por lo tanto, si te has ledo el Manual de P#P de /esarrollo>eb.com y has aprendido con nosotros a traba!ar con las bases de datos, no tendr"s realmente muchos problemas en aprender las novedades que paso a relatar a continuacin.

6'A'&'( Dos tipos de #unciones para acceso a las bases de datos M8<BL
Ina de las novedades que P#P nos ofrece en las recientes funciones de P#P es la incorporacin de dos tipos apro2imaciones al traba!o con My5D0, que ahora se puede hacer por procedimientos Kfunciones normales de toda la vidaL y por ob!etos.
-ota" ,ntes slo podamos acceder a My5D0 por funciones comunes, pero ahora tambin podemos acceder por medio de clases y ob!etos de pro ramacin orientada a ob!etos KP&&L. 0a incorporacin en el ,P% de mtodos basados en P&& hace patente que P#P est" teniendo muy presente este paradi ma de desarrollo dentro de su n7cleo y que la tendencia en las nuevas versiones de P#P ser" la de potenciarlo aun m"s.

5unciones basadas en procedimientos" Como venimos haciendo toda la vida con P#P. Munciones normales y corrientes, que reciben par"metros y que devuelven valores. 5unciones basadas en P22- 9ealmente son constructores para obtener ob!etos y mtodos a los que podemos acceder dentro de esos ob!etos para realizar las operaciones con la base de datos. #ay que aclarar que ambas apro2imaciones son perfectamente v"lidas y que no cambian las cosas que se pueden hacer desde una u otra. Por tanto, decantarnos por uno u otro modo no implicar" nin una venta!a en funcionalidad, ni tan siquiera de rendimiento. /e hecho, ambos modos de traba!o son el "mismo perro con distinto collar". Por tanto, es tan v"lida una eleccin como la otra y nuestra preferencia ser" m"s bien por ustos o costumbres a la hora de desarrollar.
-ota" 0o que no se recomienda es en un mismo proyecto cambiar de uno a otro estilo de acceso a base de datos My5D0 de manera arbitraria. /ebemos tener en cuenta que realmente esa recomendacin no es debido a que no te vaya a funcionar tu pro rama, o puedas tener al 7n problema determinado, sino m"s bien es una cuestin de estilo y claridad a la hora de mantener el cdi o de tu proyecto.

Programacin en PHP: http://www.desarrolloweb.com/manuales/12/


' (os manuales de DesarrolloWeb.com tienen el cop!right de sus autores. )o reproducir sin autorizaci*n.

77

Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com

6'A'*'( Acceso a M8<BL con #unciones por procedimientos


6n el mencionado Manual de P#P venimos ofreciendo e!emplos para acceso a base de datos con funciones de toda la vida. Por eso, en este artculo vamos a mostrar las diferencias que e2isten con respecto a las funciones anti uas, usando tambin cdi o por procedimientos. 5in embar o, como ver"s a continuacin, las funciones son pr"cticamente las mismas a las que se les ha a re ado una "i". Por e!emplo, mysqlSconnectKL pasa a ser mysqliSconnectKL. 0os par"metros son los mismos en muchos casos, o muy parecidos.
-ota" este artculo no es un tutorial de acceso a bases de datos con P#P, para eso ya disponemos del manual de P#P en /esarrollo>eb.com. 9ealmente se trata de una serie de uas para poder reciclar nuestros conocimientos con el P#P de versiones anteriores.

3one=in con la base de datos" mys li0connect:; ,hora indicamos tambin la base de datos a la que queremos conectarnos. = atencin, porque lo que nos devuelve la funcin no es un link o identificador de la cone2in con la base de datos, sino un ob!eto. Pero aunque no sepas P&&, no te preocupes por este detalle, pues poco nos importa a los desarrolladores, dado que vamos a usar ese ob!eto como si fuera simplemente el identificador de la cone2in, o sea, vamos a usarlo como hacamos anteriormente en P#P.
8conexion G %ys,li$connect("localhost"E ""s"ario"E "cla*e"E "%i$55dd");

3errar la cone=in" mys li0close:; 4enemos que pasarle como par"metro siempre el ob!eto que obtuvimos al iniciar la cone2in.
%ys,li$close(8conexion);

.jecutar una consulta" mys li0 uery:; 6sta funcin es e2actamente i ual, aunque en este caso recibe obli atoriamente como primer par"metro el ob!eto de cone2in a la base de datos que recibimos al conectarnos. 6l se undo par"metro es la sentencia 5D0 que se desea e!ecutar en My5D0.
8res"ltado G %ys,li$,"ery(8conexionE "select K fro% cliente");

&tra aspecto interesante es que nos devuelve un valor que puede ser, o bien un booleano para saber si la consulta se e!ecut con 2ito, como en el caso de un "insert" o "delete", o bien un ob!eto resultado con un con!unto de re istros en el caso de un "select". .=traer un registro del conjunto de resultados" mys li0fetch0array:; 6sta funcin es e2actamente i ual, recibe el con!unto de resultados del que queremos sacar un re istro. /evuelve en este caso un "array", pero est" i ualmente mysqliSfetchSob!ectKL que devolvera un ob!eto.
8fila G %ys,li$fetch$array(8res"ltado);

3ontar el n<mero de filas de un resultado" mys li0num0rows:; 4ambin es e2actamente i ual, simplemente le pasamos el ob!eto con!unto de re istros del que queremos saber el n7mero de filas o re istros que contiene.
8fila G %ys,li$n"%$ro6s(8res"ltado)

6'A','( Conclusin
6n eneral, como est"s pudiendo comprobar, el sistema no vara mucho de lo que ya conoces en el pasado. Cambian nombres de funciones mnimamente y al 7n par"metro suelto aqu y all. Creo que el paso para usar las nuevas funciones My5D0 es tan r"pido que no tiene sentido se uir usando las funciones anti uas y adem"s en breve el cambio ser" obli ado porque los accesos anti uos que hacamos a My5D0 de!ar"n de funcionar.

Artculo por

Miguel Angel Alvarez

Programacin en PHP: http://www.desarrolloweb.com/manuales/12/


' (os manuales de DesarrolloWeb.com tienen el cop!right de sus autores. )o reproducir sin autorizaci*n.

78

Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com

Parte ,:

Su(ir una aplicacin 'e( al ser)i!or


9na -ez 1ue hemos terminado una aplicaci*n web en local6 tenemos 1ue ponerla en producci*n en un ser-idor de "nternet. 3ostramos c*mo subir todas las p2ginas a un ser-idor ! algunas de las posibles tareas 1ue nos tocar2 realizar para subir tambiCn la base de datos.

3'&'( <ubir una aplicacin H al servidor


4amos a ver cmo subir una aplicacin %ec%a en local a un servidor de 'nternet. Empe!amos ofreciendo una serie de pautas para subir los arc%ivos. 6n el pasado me solicitaron que escribiese sobre un tema que hasta ahora no habamos tocado m"s que de refiln, que consiste en la puesta en marcha de una aplicacin, pro ramada en local, a nuestro servidor de hostin , es decir, en el paso de subir todos los archivos P#P y la base de datos a nuestro espacio en el servidor 3eb contratado en un proveedor de alo!amiento. 6l tema espero que resulte familiar a muchas de las personas que leen nuestros artculos, ya que probablemente hayan tenido que pasar por esa etapa en al una ocasin, aunque pretendo dar al unas claves y truquillos que pueden ayudar a todos, ten an o no e2periencia en este asunto.

3'&'&'( <ubir los arc+ivos


Cuestro servidor 3eb debe tener un directorio para la publicacin de las p" inas 3eb. 6se sera el lu ar donde hay que subir los archivos .php. /ependiendo del proveedor con el que traba!emos, el directorio de publicacin puede variar. @eneralmente, cuando contratamos un alo!amiento, nos proporcionan una cuenta de M4P con la que conectarnos al servidor 3eb y transferir los archivos de nuestro sitio, adem"s de unos datos para la cone2in, que ser"n el nombre del servidor y el usuario y contrase;a para el acceso al M4P.

Programacin en PHP: http://www.desarrolloweb.com/manuales/12/


' (os manuales de DesarrolloWeb.com tienen el cop!right de sus autores. )o reproducir sin autorizaci*n.

79

Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com

+eferencia"por si al uien no sabe lo que es el M4P, hablamos m"s sobre ello en el manual de Publicar en %nternet, concretamente en el artculo 5ubir los archivos al servidor.

,l conectarnos al servidor con los datos del M4P, que deben ser proporcionados por nuestro proveedor, accederemos a un directorio. 6ste directorio podra ser el de publicacin, aunque eneralmente no es as, sino que suele ser un subdirectorio llamado "#4M0" o "docs" o al o similar, que cuel a del directorio de inicio en nuestra cone2in M4P. Como deca, este directorio puede tener nombres distintos en proveedores distintos, aunque, en cualquier caso, con una simple pre unta a nuestro proveedor resolveremos esa duda. 0os archivos se deben subir al directorio de publicacin, o a cualquier subdirectorio de este. 6n definitiva, los tendremos que alo!ar por ah dentro y para acceder a ellos bastara con escribir el nombre del dominio o I90 de nuestro alo!amiento, se uido del nombre del archivo. 5i tuvisemos un archivo llamado hola.php y nuestro alo!amiento se ha contratado para el dominio 333.midominio.com, deberamos subir ese archivo al directorio de publicacin y accederamos al archivo escribiendohttp-NN333.midominio.comNhola.php 5i creamos subdirectorios dentro del directorio de publicacin podremos acceder a ellos escribiendo el nombre del dominio o I90 de nuestro alo!amiento, se uido del nombre del directorio y el nombre del archivo. Por e!emplo, si creamos un subdirectorio llamado pa inas y tenemos dentro un archivo llamado pa '.php, podramos acceder a l de la si uiente manera. http-NN333.midominio.comNpa inasNpa '.php
+eferencia"hay otro concepto interesante que deberamos conocer lle ados a este punto, que es el "documento por defecto". aste no es m"s que el archivo que se enva al nave ador si en la I90 accedida no se especificaba nin 7n archivo. 5uele llamarse inde2.html o inde2.php Ko inde2.asp si nuestro servidor soporta pro ramacin en ,5PL, aunque puede variar de un proveedor a otro. #ablamos m"s sobre el documento por defecto en nuestro manual de Publicar en %nternet.

Artculo por

Miguel Angel Alvarez

3'*'( Colocar los arc+ivos H #uera del directorio de publicacin


(lgunos casos en los que colocar arc%ivos fuera del directorio de publicacin tiene sentido y utilidad. Por decir al o m"s sobre el tema de colocar los archivos, quera se;alar que cualquier cosa que pon amos fuera del directorio de publicacin no podr" ser accedida a travs del nave ador. 6s decir, si creamos un directorio que se llame funcionesSphp en el mismo nivel que el directorio de publicacin Kfuera del directorio de publicacinL no podremos acceder con el e2plorador a los archivos que coloquemos dentro de nin una de las maneras. 6sto es as porque la I90 de inicio de nuestro alo!amiento corresponde con ese directorio y no podemos movernos hacia deba!o de ese directorio con las I90s, que son la manera de especificar al nave ador los recursos a los que se quiere acceder.
-ota" =a se e2plic lo que era el directorio de publicacin en el captulo anterior sobre 5ubir archivos P#P al servidor.

Co sera posible salir del directorio de publicacin con una I90 como esta, por mucho que utilicemos el operador .. Kque sirve para acceder al directorio padreL. http-NN333.midominio.comN..NfuncionesSphpNarchivoSinalcanzable.php 5in embar o, colocar al unos contenidos fuera del directorio de publicacin puede ser muy 7til. Por e!emplo, podramos colocar all copias de se uridad de al unos archivos o documentos que simplemente queremos uardar en el servidor para acceder a ellos desde cualquier parte y con nuestro pro rama de M4P.

Programacin en PHP: http://www.desarrolloweb.com/manuales/12/


' (os manuales de DesarrolloWeb.com tienen el cop!right de sus autores. )o reproducir sin autorizaci*n.

80

Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com #ay otra utilidad m"s interesante sobre colocar archivos fuera del directorio de publicacin. 5e trata de que muchas veces utilizamos en nuestros pro ramas trozos de cdi o repetidamente, por e!emplo, para abrir y cerrar bases de datos, para mostrar la cabecera de nuestro portal, para comprobar que un email escrito en un formulario es correcto, etc. 6s muy 7til separar estos trozos de cdi o en un archivo a parte y llamar a este archivo con las funciones P#P includeKL o requireKL. ,s, si un da modificamos la cabecera de nuestro portal, slo lo tendremos que modificar en un archivo, o, si cambia la base de datos que utilizamos slo tendramos que modificar el archivo que hace la cone2in a la base de datos una vez, en lu ar de ir cambi"ndolo en todas las p" inas P#P que abran las bases de datos. 6stos archivos no son p" inas independientes, sino trozos. 5e uramente, si los e!ecutamos por separado no mostraran nin 7n resultado v"lido, incluso podran dar mensa!es de error. Por esta razn merece la pena colocarlos en un lu ar donde nadie pueda tener acceso- fuera del directorio de publicacin. Con P#P si que podremos acceder a ese directorio para incluir esos archivos. 5olamente deberamos utilizar las funciones P#P includeKL o requireKL indicando la ruta para acceder a los archivos. 6n el caso de que ten amos una p" ina llamada hola.php en el directorio de publicacin y un archivo, que se llama abreSbaseSdatos.php, en el directorio funcionesSphp, que est" fuera del directorio de publicacin, si quisiramos acceder Kdesde hola.phpL al archivo que abre la base de datos lo haramos as.
incl"de("../f"nciones$php/a5re$5ase$datos.php")

/esde P#P s que podemos acceder a los archivos que se encuentran fuera del directorio de publicacin. Para ello especificamos la ruta adecuada, en la que utilizamos el operador .. para ba!ar al directorio padre. Cada m"s que decir sobre la colocacin de los archivos- una vez situados en el directorio de publicacin se podr" acceder a ellos con nuestro nave ador y se deberan e!ecutar perfectamente. ,unque cabe se;alar que, tanto P#P como el servidor donde traba!emos, pueden tener confi uraciones distintas y puede que al 7n detalle de la pro ramacin de nuestras p" inas no funcione correctamente. Por e!emplo, nuestro P#P puede declarar o no autom"ticamente las variables que lle an a travs de un formulario. 5i en local si que estaba confi urado para hacer esto y en remoto no, deberamos localizar los lu ares donde reco emos las variables y utilizar las variables de entorno correctas Kmirar artculo sobre Procesar variables de formularios y los comentarios al pie para saber m"s de esta posible fuente de erroresL. ,unque este no es un caso habitual, podemos ponernos en contacto con nuestro proveedor de alo!amiento para ver si pueden ayudarnos confi urando el sistema o indicando los pasos a se uir para solventar en nuestros scripts el asunto.
3omentario" el si uiente script calcula el nivel de directorio de los scripts que queremos incluir en la p" ina actual. // <alla%os el ni*el de directorio en ,"e est4 "5icada la p4+ina -. Se hace "n rec"ento de los caracteres ,"e contiene el no%5re del script act"al. 8&hars G co"nt$chars(83<3$S: VE-); '. :xplora%os la ta5la de los caracteres de*"eltos 5"scando el car4cter (=/= &Rdi+o #Z ) de directorio (carpeta) ,"e de*"el*e Apache. foreach (8&hars as 8&harG>8n&hars)Q if (8&harGG#Z) Q8nG8n&hars;5rea;;U U L. @enera%os "na cadena de n-- *eces con la s"5candena "../" ,"e nos da el ni*el de directorio en ,"e se enc"entra el script. if (8nGG1) 83athStrin+G""; else 83athStrin+Gstr$pad(""E(8n--)KLE"../");

Artculo por

Miguel Angel Alvarez

Programacin en PHP: http://www.desarrolloweb.com/manuales/12/


' (os manuales de DesarrolloWeb.com tienen el cop!right de sus autores. )o reproducir sin autorizaci*n.

81

Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com

3','( <ubir una base de datos al sevidor de )nternet


El segundo paso para subir una aplicacin PHP al servidor consiste en colocar la base de datos en el ,parte de los archivos de la p" ina, debemos subir la base de datos con la que tenemos que traba!ar. 0as bases de datos con las que traba!a P#P son muy variadas y en distintos casos podemos utilizar una u otra, por lo que los modos de subir la base de datos tambin pueden variar.
-ota" 6ste artculo y los sucesivos, que tratan sobre subir una base de datos My5D0 al servidor, se en loban tanto dentro del Manual de P#P como del 4aller de My5D0. Por ello, ser" importante disponer de conocimientos de ambas tecnolo as para entender y aprovechar estas e2plicaciones.

6s muy corriente que nuestro proveedor de hostin ofrezca !unto con P#P la base de datos My5D0, as que las notas para subir esa base de datos al servidor de este artculo van encaminadas a ofrecer soluciones para esa base de datos. 0a base de datos My5D0 no se puede subir por M4P, como que se haca con los archivos del cdi o P#P. Para subirla tendremos que utilizar otros mecanismos. Roy a distin uir entre tres casos distintos en los que nos podramos encontrar en este momento'. La base de datos ue pretendemos subir est vac$a. 4an slo hemos creado las tablas, pero no hemos introducido datos en ellas o, a lo sumo, tienen al 7n dato que hemos introducido de pruebas. ). La base de datos ue ueremos subir est completa y es una base de datos (y%&L. 6n este caso tenemos creada la base de datos en local y con toda la informacin dentro y, por supuesto, queremos que esa informacin quede tambin en la base de datos remota. +. 0a base de datos est" completa Kcomo el caso anteriorL, pero no es una base de datos (y%&L. 6n este caso estaramos haciendo una mi racin de la base de datos de un sistema estor a otro. Reremos los tres casos por separado en adelante, aunque, antes de ello, vamos a mostrar unas herramientas que nos servir"n de mucha ayuda para la administracin de cualquier base de datos remota. 0as herramientas en concreto se relatan en el manual 4aller de My5D0, son las si uientes Php(y#dmin. Ina aplicacin creada en P#P que podemos instalar en nuestro espacio de alo!amiento para administrar la base de datos. (ys l 3ontrol 3enter Ken adelante MyCCL. Ina aplicacin >indo3s que permite contectarse a m7ltiples bases de datos My5D0, que se encuentren en local o en remoto. #ccess. 4ambin permite administrar una base de datos My5D0 conectada en local o en remoto. 6n este caso se utiliza una interfaz que muchos ya conocen, como es ,ccess, para administrar una base de datos que nada tiene que ver con dicho pro rama.

6n los tres casos lo que nos permite realizar el soft3are de administracin son tareas sobre la base de datos de todo tipo, como pueden ser crear tablas, modificarlas, insertar datos, borrarlos, editarlos. Modificar o borrar tablas o campos de las mismas, etc. 0a eleccin de una herramieta o de otra pasa por los recursos que nos permitan utilizar en nuestro proveedor. 8"sicamente, lo que nos puede decantar a una opcin u otra, es si permiten o no conectar de manera remota la base de datos My5D0. Conozco alo!amientos donde se permite esa cone2in remota y donde no. 5i no permiten conectarnos remotamente nos decantaremos por PhpMy,dmin, pues es una aplicacin P#P que se conecta en local y a la que se accede desde una p" ina 3eb y eso lo permiten todos los proveedores, incluso hay muchos que tienen instalado ya este soft3are para administrar las bases de datos. 6n caso de que s nos permitan conectarnos remotamente con la base de datos, eli iremos MyCC o ,ccess, que son aplicaciones >indo3s mucho m"s potentes y r"pidas que las que utilizan interfaz 3eb, como PhpMy,dmin. 6s preferible utilizar MyCC porque est" especialmente desarrollado para conectar y operar con bases de datos My5D0.
Artculo por

Miguel Angel Alvarez

Programacin en PHP: http://www.desarrolloweb.com/manuales/12/


' (os manuales de DesarrolloWeb.com tienen el cop!right de sus autores. )o reproducir sin autorizaci*n.

82

Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com

3'0'( <ubir base de datos M8<BL vac$a al servidor


+a base de datos que pretendemos subir est vac1a. 0an slo %emos creado las tablas, pero no %emos introducido datos en ellas o, a lo sumo, tienen alg3n dato que %emos introducido de pruebas. 6s muy normal que hayamos dise;ado una base de datos para nuestro proyecto desde *, definiendo las distintas entidades de nuestro modelo de datos, !unto con sus campos y sus tipos. 6n estos casos lo m"s probable es que la base de datos est vaca, o bien conten a datos que hayamos introducido a modo de prueba y que no queramos conservar cuando subamos la aplicacin a %nternet. 0a opcin m"s interesante entonces podra ser crear otra vez las tablas que tenemos en local en la base de datos remota. Para ello tenemos dos posibilidades. a; %i tenemos pocas tablas y bastante sencillas 0as podemos crear en remoto con al una herramienta como PhpMy,dmin o MyCC. b; %i tiene muchas tablas y>o muy complicadas 0a recomendacin sera hacer un bac:up de la estructura en local y restaurarla en remoto. 6sto nos evitar" tener que volver a crear todas las tablas y definir todos sus campos y sus tipos. Puede ser un poco m"s complicado pero sin duda nos ahorrar" tiempo. Para hacer el bac:up de la estructura en local podemos utilizar al una herramienta como PhpMy,dmin, o bien utilizar el comando mysqldump desde lnea de comandos de M5P/&5.

#erramienta de bac:up de PhpMy,dmin. 6st" marcada la opcin de e2traer solamente la estructura de las tablas. 5i marcamos adem"s la casilla "5end", nuestro nave ador se descar ar" el bac:up en un fichero de te2to. 5i no lo pulsamos simplemente se visualizar".

0o que tenemos que hacer en este caso es un bac:up de la estructura de la base de datos, es decir, los "create tables" o sentencias 5D0 para crear las tablas. 5era un montn de sentencias con esta formaI -------------------------------------------------------I I Ta5le str"ct"re for ta5le =co%entario= I &7:AT: TAN : co%entario ( id$co%entario int(2) "nsi+ned ATT A9 id$artic"lo int(#) (:VA9 T =1= ATT A9 co%entario text ATT A9 E a"to$incre%entE E

Programacin en PHP: http://www.desarrolloweb.com/manuales/12/


' (os manuales de DesarrolloWeb.com tienen el cop!right de sus autores. )o reproducir sin autorizaci*n.

83

Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com


fecha int(-#) "nsi+ned (:VA9 T =1= ATT A9 E re*isado tinyint(-) (:VA9 T =1= ATT A9 E no%5re$co%entario *archar(-11) (:VA9 T =Ao%5re no especificado= ATT A9 E e%ail$co%entario *archar(-11) (:VA9 T =:%ail sin especificar= ATT A9 E tipo tinyint(-) "nsi+ned (:VA9 T =-= ATT A9 E 37)!A7D ]:D (id$co%entario)

);

Para restaurar estas sentencias tenemos opciones tanto dentro de PhpMy,dmin como de MyCC. 6n ambos casos lo que tenemos que hacer es e!ecutar estas sentencias en el servidor My5D0 remoto. 6n PhpMy,dmin tenemos un campo para introducir sentencias 5D0 y tambin otro campo para seleccionar un archivo de te2to con todas las sentencias 5D0, para e!ecutarlas una detr"s de otra. 6n MyCC tenemos un botn que nos permite abrir una consola donde introducir una o varias sentencias 5D0 y e!ecutarlas. Herramienta de backup y restauracin de Php(y#dmin

7otn para introducir sentencias %&L en (y33

9epetimos, esto slo nos servir" para subir la estructura de la base de datos y no los datos que conten a. 5i deseamos subir tambin la informacin de la base de datos entonces debemos utilizar otras estrate ias, relatadas pr2imamente.
Artculo por

Miguel Angel Alvarez

3'4'( <ubir una base de datos M8<BL con la estructura 8 los datos
Como transferir una base de datos My-.+ que tenemos en local a nuestro servidor remoto, incluyendo tanto la estructura de las tablas como sus datos. 5i la base de datos que deseamos subir est" llena de informacin y deseamos que se conserve una vez subida la base de datos a remoto, tenemos que realizar un bac:up de la base de datos y restaurarlo en remoto.

Programacin en PHP: http://www.desarrolloweb.com/manuales/12/


' (os manuales de DesarrolloWeb.com tienen el cop!right de sus autores. )o reproducir sin autorizaci*n.

84

Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com

-ota" 6stas recomendaciones est"n pensadas para subir una base de datos My5D0 que podamos tener en local a una base de datos My5D0 que hayamos contratado en remoto. 5i la base ori en no es My5D0 estaramos hablando de una mi racin de bases de datos, pero esto lo veremos en un artculo m"s adelante.

6n este caso el procedimiento sera muy parecido al de subir una base de datos vaca, relatado anteriormente, con la salvedad de que ahora debemos e2traer no solo la estructura de la base de datos, sino tambin los re istros que contiene. Para ello podemos utilizar mysqldump, se 7n se relata en este artculo, o bien PhpMy,dmin, seleccionando la opcin que indica que el bac:up conten a la estructura y los datos K5tructure and data en versiones en in lsL. 0a estructura y los datos vendr"n en un fichero de te2to con una serie de sentencias 5D0 para crear las tablas y los insert necesarios para introducir cada uno de los datos. Para restaurar la base de datos lo haremos tal como se ha relatado para el caso de que la base de datos estuviera vaca, con la ayuda de una instalacin de PhpMy,dmin en remoto o un MyCC que se conecte a la base de datos contratada en el servidor de %nternet. 5i tenemos problemas para subir el fichero de bac:up de la base de datos es posible que en nuestro proveedor de alo!amiento nos pueda ayudar a subir el fichero y restaurarlo. Como el proveedor dispone de los servidores en sus propias instalaciones, tiene muchas m"s posibilidades que nosotros para traba!ar con las bases de datos, sin temor a que las lentas comunicaciones por %nternet arro!en errores en la restauracin de los datos. 5i nuestro proveedor no puede ayudarnos, se uramente dispon a y nos indique al 7n mecanismo para realizar la tarea sin lu ar a errores. Puede ocurrinos con al 7n proveedor que nos di a que se encar a de todo pero nos e2i!a el pa o de las horas de traba!o del inform"tico que va a restaurar el bac:up de la base de datos. 5i no pone facilidades ni siquiera en esto posiblemente sea me!or ir pidindoles que nos devuelvan el dinero invertido porque su servicio no sera muy bueno.
Artculo por

Miguel Angel Alvarez

3'A'( Migrar una base de datos a M8<BL


'ndicaciones 3tiles para migrar una base de datos a My-.+, es decir, cuando tenemos que subir una base de datos local en cualquier gestor a una base de datos remota en My-.+. 6l 7ltimo caso en el que nos podemos encontrar a la hora de subir una base de datos a nuestro proveedor de alo!amiento es que la base de datos la ten amos creada en local, pero en un sistema estor distinto del que vamos a utilizar en remoto. 6n remoto suponemos siempre que vamos a utilizar la base de datos My5D0. 6n local podramos disponer de una base de datos ,ccess, 5D0 5erver o de otro sistema de base de datos. 6l proceso de la mi racin puede ser bastante comple!o y, como hay tantas bases de datos distintas, difcil de dar una receta que funcione en todos los casos. ,dem"s, aparte de la dificultad de transferir la informacin entre los dos sistemas estores de base de datos, tambin nos influir" mucho en la comple!idad del problema el tipo de los datos de las tablas que estamos utilizando. Por e!emplo, las fechas, los campos numricos con decimales o los boleanos pueden dar problemas al pasar de un sistema a otro porque pueden almacenarse de maneras distintas o, en el caso de los n7meros, con una precisin distinta.

3'A'&'( Recomendaciones para migrar de Access a M8<BL


5i nuestra base de datos anterior estaba construida en ,ccess lo tenemos bastante f"cil, racias a que My5D0 dispone de un driver &/8C para sistemas >indo3s, que nos permite conectar ,ccess con el propio My5D0 y pasar informacin f"cilmente. 6ste tema est" relatado en el artculo 62portar datos de My5D0 a ,ccess, aunque hay que indicar que si deseamos hacer una e2portacin desde ,ccess en local a My5D0 en remoto puede haber problemas porque no todos los alo!adores

Programacin en PHP: http://www.desarrolloweb.com/manuales/12/


' (os manuales de DesarrolloWeb.com tienen el cop!right de sus autores. )o reproducir sin autorizaci*n.

85

Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com permiten las cone2iones en remoto con la base de datos. 5i no tenemos disponible una cone2in en remoto con nuestro servidor de bases de datos vamos a tener que cambiar la estrate ia un poco. 0a idea en este 7ltimo caso es instalar My5D0 en local y realizar la mi racin desde ,ccess en local a My5D0 en local y lue o podramos hacer un bac:up de la base de datos local y subirla a remoto, tal y como se ha relatado antes.

3'A'*'( Recomendaciones para migrar desde <BL <erver a M8<BL


0a verdad es que no he tenido este caso nunca, pero hay que decir que ,ccess tambin nos puede ayudar en este caso. ,ccess permite seleccionar una base de datos 5D0 5erver y traba!ar desde la propia interfaz de ,ccess. 0a idea es que ,ccess tambin permite traba!ar con My5D0 y posiblemente haciendo un puente entre estos dos sistemas estores podemos e2portar datos de 5D0 5erver a My5D0. 0o que es se uro que utilizando el propio ,ccess de puente podramos realizar el traba!o. Primero e2portando de 5D0 5erver a ,cess y lue o desde ,ccess a My5D0.

3'A','( Etras bases de datos u otras tcnicas


5i la base de datos ori en dispone de un driver &/8C no habr" Ken teoraL problema para conectarla con ,ccess, de manera similar a como se conecta con My5D0. 6ntonces podramos utilizar ,ccess para e2portar los datos, porque desde all se podran acceder a los dos sistemas estores de bases de datos. 5i no tenemos ,ccess, o la base de datos ori inal no tiene driver &/8C, o bien no nos funciona correctamente el proceso y no sabemos cmo arre larlo, otra posibilidad es e2portar los datos a ficheros de te2to, separados por comas o al o parecido. Muchas bases de datos tienen herramientas para e2portar los datos de las tablas a ficheros de te2to, los cuales se pueden lue o introducir en nuestro sistema estor destino KMy5D0L con la ayuda de al una herramienta como PhpMy,dmin. Para ello, en la p" ina de propiedades de la tabla encontraremos una opcin para hacer el bac:up de la tabla y para introducir ficheros de te2to dentro de una tabla K%nsert te2tfiles into table en in lsL.

,ccediendo a ese enlace podremos ver un formulario donde introducir las caractersticas del fichero de te2to, como el car"cter utilizado como separador de campos, o el terminador de lneas, etc, !unto con el propio archivo con los datos, y PhpMy,dmin se encar ar" de todo el traba!o de incluir esos datos en la tabla.

Programacin en PHP: http://www.desarrolloweb.com/manuales/12/


' (os manuales de DesarrolloWeb.com tienen el cop!right de sus autores. )o reproducir sin autorizaci*n.

86

Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com

Como se habr" supuesto, es necesario tener creada la tabla en remoto para que podamos introducirle los datos del fichero de te2to.

3'A'0'( Cambios de un #ormato de datos a otro


4oda la mi racin tiene que tener en cuenta muy especialmente, como ya se se;al, las maneras que ten a cada base de datos de uardar la informacin, es decir, del formato de sus tipos de datos. 4enemos que contar siempre con la posible necesidad de transformar al unos datos como pueden ser los campos boleanos, fechas, campos memo Kte2to con lon itud indeterminadaL, etc, que pueden almacenarse de maneras distintas en cada uno de los sistemas estores, ori en y destino. 6n al unos casos posiblemente ten amos que realizar al 7n script que realice los cambios necesarios en los datos. Por e!emplo puede ser para localizar los valores boleanos uardados como true N false a valores enteros * N ', que es como se uarda en My5D0. 4ambin las fechas pueden sufrir cambios de formato, mientras que en ,ccess aparecen en castellano KddNmmNaaaaL en My5D0 aparecen en el formato aaaaPmmPdd. P#P puede ayudarnos en la tarea de hacer este script, tambin Risual 8asic 5cript para ,ccess puede hacer estas tareas comple!as y el propio len ua!e 5D0, a base de sentencias diri idas contra la base de datos, puede servir para al unas acciones sencillas.
Artculo por

Miguel Angel Alvarez

Programacin en PHP: http://www.desarrolloweb.com/manuales/12/


' (os manuales de DesarrolloWeb.com tienen el cop!right de sus autores. )o reproducir sin autorizaci*n.

87

Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com

Parte 1-:

.ntro!uccin a la programacin orienta!a a o(jetos en PHP 4


+aptulos sobre la programaci*n orientada a ob,etos 1ue se puede realizar en /0/ 4. Es una primera apro.imaci*n a la orientaci*n a ob,etos6 tal como se realizaba en esa -ersi*n de /0/.

&;'&'( rogramacin orientada a obFetos en H


PHP ofrece funcionalidades propias de la P::. En este cap1tulo veremos los aspectos ms bsicos de esta metodolog1a. 0a pro ramacin orientada a ob!etos es una metodolo a de pro ramacin avanzada y bastante e2tendida, en la que los sistemas se modelan creando clases, que son un con!unto de datos y funcionalidades. 0as clases son definiciones, a partir de las que se crean ob!etos. 0os ob!etos son e!emplares de una clase determinada y como tal, disponen de los datos y funcionalidades definidos en la clase. 0a pro ramacin orientada a ob!etos permite concebir los pro ramas de una manera bastante intuitiva y cercana a la realidad. 0a tendencia es que un mayor n7mero de len ua!es de pro ramacin adopten la pro ramacin orientada a ob!etos como paradi ma para modelizar los sistemas. Prueba de ello es la nueva versin de P#P K(L, que implanta la pro ramacin de ob!etos como metodolo a de desarrollo. 4ambin Microsoft ha dado un vuelco hacia la pro ramacin orientada a ob!etos, ya que .C64 dispone de varios len ua!es para pro ramar y todos orientados a ob!etos. ,s pues, la pro ramacin orientada a ob!etos es un tema de ran inters, pues es muy utilizada y cada vez resulta m"s esencial para poder desarrollar en casi cualquier len ua!e moderno. 6n este artculo vamos ver al unas nociones sobre la pro ramacin orientada a ob!etos en P#P. ,unque es un tema bastante amplio, novedoso para muchos y en un principio, difcil de asimilar, vamos a tratar de e2plicar la sinta2is b"sica de P#P para utilizar ob!etos, sin meternos en mucha teora de pro ramacin orientada a ob!etos en eneral. 9eferencia- 5e puede acceder a una descripcin de la pro ramacin orientada a ob!etos, publicada en /esarrollo>eb.com. http-NN333.desarrollo3eb.comNarticulosNGFF.php

Programacin en PHP: http://www.desarrolloweb.com/manuales/12/


' (os manuales de DesarrolloWeb.com tienen el cop!right de sus autores. )o reproducir sin autorizaci*n.

88

Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com

&;'&'&'( Las clases? class


Ina clase es un con!unto de variables, llamados atributos, y funciones, llamadas mtodos, que traba!an sobre esas variables. 0as clases son, al fin y al cabo, una definicin- una especificacin de propiedades y funcionalidades de elementos que van a participar en nuestros pro ramas. Por e!emplo, la clase "Ca!a" tendra como atributos caractersticas como las dimensiones, color, contenido y cosas seme!antes. 0as funciones o mtodos que podramos incorporar a la clase "ca!a" son las funcionalidades que deseamos que realice la ca!a, como introduceKL, muestraScontenidoKL, compruebaSsiScabeKL, vaciateKL... 0as clases en P#P se definen de la si uiente manera<? class &aHaQ *ar 8alto; *ar 8ancho; *ar 8lar+o; *ar 8contenido; *ar 8color; f"nction introd"ce(8cosa)Q 8this->contenido G 8cosa; U f"nction %"estra$contenido()Q echo 8this->contenido; U U ?>

6n este e!emplo se ha creado la clase Ca!a, indicando como atributos el ancho, alto y lar o de la ca!a, as como el color y el contenido. 5e han creado, para empezar, un par de mtodos, uno para introducir un elemento en la ca!a y otro para mostrar el contenido. 5i nos fi!amos, los atributos se definen declarando unas variables al principio de la clase. 0os mtodos se definen declarando funciones dentro de la clase. 0a variable \this, utilizada dentro de los mtodos la e2plicaremos un poco m"s aba!o.

&;'&'*'( =tilizar la clase


0as clases solamente son definiciones. 5i queremos utilizar la clase tenemos que crear un e!emplar de dicha clase, lo que corrientemente se le llama instanciar un ob!eto de una clase.
8%icaHa G ne6 &aHa;

Con esto hemos creado, o me!or dicho, instanciado, un ob!eto de la clase Ca!a llamado \mica!a.
8%icaHa->introd"ce("al+o"); 8%icaHa->%"estra$contenido();

Con estas dos sentencias estamos introduciendo "al o" en la ca!a y lue o estamos mostrando ese contendido en el te2to de la p" ina. Cos fi!amos que los mtodos de un ob!eto se llaman utilizando el cdi o "PY".
no%5re$del$o5Heto->no%5re$de$%etodo()

Para acceder a los atributos de una clase tambin se accede con el cdi o "PY". /e esta formano%5re$del$o5Heto->no%5re$del$atri5"to

&;'&','( La variable Gt+is


/entro de un mtodo, la variable \this hace referencia al ob!eto sobre el que invocamos el mtodo. 6n la invocacin \mica!aPYintroduceK"al o"L se est" llamando al mtodo introduce sobre el ob!eto \mica!a. Cuando se est" e!ecutando

Programacin en PHP: http://www.desarrolloweb.com/manuales/12/


' (os manuales de DesarrolloWeb.com tienen el cop!right de sus autores. )o reproducir sin autorizaci*n.

89

Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com ese mtodo, se vuelca el valor que recibe por par"metro en el atributo contenido. 6n ese caso \thisPYcontenido hace referencia al atributo contenido del ob!eto \mica!a, que es sobre el que se invocaba el mtodo.
Artculo por

Miguel Angel Alvarez

&;'*'( Constructores en H
4emos lo que es un constructor y cmo definirlos en programacin orientada a objetos en PHP . 0os constructores son funciones, o mtodos, que se encar an de realizar las tareas de inicializacin de los ob!etos al ser instanciados. 6s decir, cuando se crean los ob!etos a partir de las clases, se llama a un constructor que se encar a de inicializar los atributos del ob!eto y realizar cualquier otra tarea de inicializacin que sea necesaria. Co es obli atorio disponer de un constructor, pero resultan muy 7tiles y su uso es muy habitual. 6n el e!emplo de la ca!a, que coment"bamos en el anterior artculo de pro ramacin orientada a ob!etos en P#P, lo normal sera inicializar las variables como color o las relacionadas con las dimensiones y, adem"s, indicar que el contenido de la ca!a est" vaco. 5i no hay un constructor no se inicializan nin uno de los atributos de los ob!etos. 6l constructor se define dentro de la propia clase, como si fuera otro mtodo. 6l 7nico detalle es que el constructor debe tener el mismo nombre que la clase. ,tentos a P#P, que diferencia entre may7sculas y min7sculas. Para la clase Ca!a definida anteriormente, se podra declarar este constructorf"nction &aHa(8altoG-E8anchoG-E8lar+oG-E8colorG"ne+ro")Q 8this->altoG8alto; 8this->anchoG8ancho; 8this->lar+oG8lar+o; 8this->colorG8color; 8this->contenidoG""; U

6n este constructor recibimos por par"metro todos los atributos que hay que definir en una ca!a. 6s muy 7til definir unos valores por defecto en los par"metros que recibe el constructor, i ualando el par"metro a un valor dentro de la declaracin de par"metros de la funcin constructora, pues as, aunque se llame al constructor sin proporcionar par"metros, se inicializar" con los valores por defecto que se hayan definido. 6s importante se;alar que en los constructores no se tienen por qu recibir todos los valores para inicializar el ob!eto. #ay al unos valores que pueden inicializarse a vaco o a cualquier otro valor fi!o, como en este caso el contenido de la ca!a, que inicialmente hemos supuesto que estar" vaca.
Artculo por

Miguel Angel Alvarez

&;','( Herencia en H
Hablaremos de esta peculiar caracter1stica para %acer copias independientes y personali!adas de clases ya construidas, propia de la programacin orientada a objetos. 0a pro ramacin orientada a ob!etos tiene un mecanismo llamado herencia por el que se pueden definir clases a partir de otras clases. 0as clases realizadas a partir de otra clase o me!or dicho, que e2tienden a otra clase, se llaman clases e2tendidas o clases derivadas. 0as clases e2tendidas heredan todos los atributos y mtodos de la clase base. ,dem"s, pueden tener tantos atributos y mtodos nuevos como se desee. Para ampliar el e!emplo que venimos desarrollando, la clase Ca!a, vamos a crear una clase e2tendida llamada

Programacin en PHP: http://www.desarrolloweb.com/manuales/12/


' (os manuales de DesarrolloWeb.com tienen el cop!right de sus autores. )o reproducir sin autorizaci*n.

90

Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com Ca!aStematica. 6sta clase hereda de ca!a, pero adem"s tiene un "tema", que es la descripcin del tipo de cosas que metemos en la ca!a. Con esto podemos tener varias ca!as, cada una con cosas de un tema concreto.
class &aHa$te%atica extends &aHaQ *ar 8te%a;

function defineStemaK\nuevoStemaLe \thisPYtema V \nuevoStemaZ f f 6n esta clase heredamos de Ca!a, con lo que tenemos a nuestra disposicin todos los atributos y mtodos de la clase base. ,dem"s, se ha definido un nuevo atributo, llamado \tema, y un mtodo, llamado defineStemaKL, que recibe el tema con el que se desea etiquetar la ca!a. Podramos utilizar la clase Ca!aStematica de manera similar a como lo hacamos con la clase Ca!a ori inal.
8%icaHa$te%atica G ne6 &aHa$te%atica(); 8%icaHa$te%atica->define$te%a("&a5les y contectores"); 8%icaHa$te%atica->introd"ce("&a5le de red"); 8%icaHa$te%atica->introd"ce("&onector 7X#2"); 8%icaHa$te%atica->%"estra$contenido();

6n este caso, el resultado que se obtiene es parecido al que se obtiene para la clase base. 5in embar o, cuando se muestra el contenido de una ca!a, lo m"s interesante sera que se indicara tambin el tipo de ob!etos que contiene la ca!a tem"tica. Para ello, tenemos que redefinir el mtodo muestraScontenidoKL.

&;','&'( Rede#inir mtodos en clases e>tendidas


9edefinir mtodos si nifica volver a codificarlos, es decir, volver a escribir su cdi o para la clase e2tendida. 6n este caso, tenemos que redefinir el mtodo muestraScontenidoKL para que muestre tambin el tema de la ca!a. Para redefinir un mtodo, lo 7nico que debemos hacer es volverlo a escribir dentro de la clase e2tendida.
f"nction %"estra$contenido()Q echo "&ontenido de la caHa de <5>" . 8this->te%a . "</5>: " . 8this->contenido; U

6n este e!emplo hemos codificado de nuevo el mtodo entero para mostrar los datos completos. 6n al unas ocasiones es muy 7til apoyarse en la definicin de un mtodo de la clase base para realizar las acciones de la clase e2tendida. Por e!emplo, para este e!emplo, tenemos que definir un constructor para la clase Ca!aStematica, en el que tambin se inicialice el tema de la ca!a. Como ya e2iste un mtodo constructor en la clase base, no merece la pena reescribir el cdi o de ste, lo me!or es llamar al constructor que haba definido en la clase Ca!a ori inal, con lo que se inicializar"n todos los datos de la clase base, y lue o realizar la inicializacin para los atributos de la propia clase e2tendida. Para llamar a un mtodo de la clase padre dentro del cdi o de un mtodo que estamos redefiniendo, utilizamos una sinta2is como estaf"nction &aHa$te%atica(8altoG-E8anchoG-E8lar+oG-E8colorG"ne+ro"E8te%aG"Sin clasificaciRn")Q parent::&aHa(8altoE8anchoE8lar+oE8color); 8this->te%aG8te%a; U

,qu vemos la redefinicin del constructor, de la clase Ca!a, para la clase Ca!aStematica. 6l constructor hace primero una llamada al constructor de la clase base, a travs de una referencia a "parent". 0ue o inicializa el valor del atributo \tema, que es especfico de la Ca!aStematica. 6n la misma lnea de traba!o, podemos redefinir el mtodo muestraScontenidoKL apoy"ndonos en el que fue declarado en la clase base. 6l cdi o quedara como si uef"nction %"estra$contenido()Q echo "&ontenido de la caHa de <5>" . 8this->te%a . "</5>: ";

Programacin en PHP: http://www.desarrolloweb.com/manuales/12/


' (os manuales de DesarrolloWeb.com tienen el cop!right de sus autores. )o reproducir sin autorizaci*n.

91

Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com


parent::%"estra$contenido(); U
Artculo por

Miguel Angel Alvarez

Parte 11:

%p/logos al Manual !e PHP


Di-ersos artculos 1ue &inalizan este manual de /0/ ! o&recen introducciones a di-ersos asuntos 1ue son interesantes para conocer sobre este lengua,e de programaci*n. "ntroducciones a algunas herramientas especialmente Btiles6 1ue pueden a!udarnos a desarrollar p2ginas web.

&&'&'( 7legir entre H 0 8 H 4' Conviene la migracinS


( ms de dos a5os de la llegada de la versin A de PHP , a3n la comunidad de desarrolladores de PHP se plantea el interrogante. 0as dudas b"sicamente circulan siempre el mismo camino, y ambas elecciones tienen sus venta!as y desventa!as. %ntentaremos en este informe orientar a los desarrolladores a decidirse por una u otra alternativa. 6s importante remarcar antes de ubicarse de lleno en el an"lisis de las venta!as y desventa!as de una u otra opcin, las principales diferencias e2istentes entre ambas versiones, cuales son los cambios que repercuten m"s fuertemente en la compatibilidad de los scripts, y que es lo que nos depara el futuro en toda esta historia.

&&'&'&'( Cambios pro#undos


0a lle ada de P#P( vino empare!ada de una reestructuracin del Core de P#P, lo que los creadores de P#P llama <end 6n ine. ,s como el le!ano P#P+ incluye su <end 6n ine *.(, y P#PG el <end 6n ine '.*, tenemos <end 6n ine ).* en P#P(. 6l cambio de versin no fue trivialZ incluye la reescritura casi total del modelo de ob!etos, entre sus cambios m"s sustanciales. 6sto repercute directamente en los scripts de P#PG que utilizan clases, tanto en la compatibilidad como en performance de e!ecucin. Posteriormente en este artculo nos referiremos nuevamente a este tema. Reamos un e!emplo que nos muestra un cambio sustancial en la implementacin del modelo de ob!etos<?

Programacin en PHP: http://www.desarrolloweb.com/manuales/12/


' (os manuales de DesarrolloWeb.com tienen el cop!right de sus autores. )o reproducir sin autorizaci*n.

92

Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com


class 3ersona Q f"nction setAo%5re(8no%5re) Q 8this->no%5re G 8no%5re; U

function etCombreKL e return \thisPYnombreZ f f function ,l oK\pL e \personaPYsetCombreK"/aniel"LZ f ' \persona V ne3 PersonaKLZ ) \personaPYsetCombreK"Pichon ol"LZ + ,l oK\personaLZ G echo \personaPY etCombreKLZ BY

&&'&'*'( TCul es el problema en este cdigo corriendo en H 0S


6n la lnea ' instanciamos un ob!eto de la clase Persona. 0ue o le decimos que se llama /aniel. 6l error de implementacin viene con la lnea +. 6l ar umento \p que recibe ,l o, no es mas que una copia de \persona, y eso esta M,0. APorqueB, mnimamente por ) razones. 0a primera razn es que esta estrate ia es P&&PCo compatible. Claramente cuando hablamos del Paradi ma &rientado a &b!etos, estamos casi descartando que cada ob!eto sea referenciado por su %dentificador. 5in embar o, el <end 6n ine '.* no est" preparado para dicha accin<? f"nction eHe%plo(8*al)Q echo 8*al; U 8cadena G "texto"; eHe%plo(8cadena); ?>

0a variable \cadena pasada como ar umento a la funcin e!emplo, es copiada para su uso local dentro de dicha funcin. 6s lo que se conoce como paso de par"metros por valor. 6l <end 6n ine '.* hace e2actamente esto para todas las funciones, inclusive para las que est"n dentro de una clase, las cuales en ese caso act7an como mtodos<? f"nction Al+o(8persona) Q 8persona->setAo%5re("(aniel"); U ?>E

Rolviendo al e!emplo inicial de la clase persona, el mtodo ,l o recibe una copia Kun clonL del ob!eto Persona. 0a se unda razn viene empare!ada con la primera, siendo consecuencia de esta. Cualquier modificacin del ob!eto Persona que se produzca dentro del mtodo ,l o, solo tendr" alcance local, y no se ver" refle!ado cuando la funcin retorne.
<? Al+o(8persona); echo 8persona->+etAo%5re(); ?>

6n ese caso la modificacin del nombre que hace la funcin ,l o al ob!eto Persona no se ve refle!ada cuando hacemos

Programacin en PHP: http://www.desarrolloweb.com/manuales/12/


' (os manuales de DesarrolloWeb.com tienen el cop!right de sus autores. )o reproducir sin autorizaci*n.

93

Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com echo \personaPY etCombreKL. 6n nuestro bro3ser veremos "Pichon ol". 6ste es solo un e!emplo del porque de la reestructuracin tan importante en el Core de P#P. 6s claro que toda reestructuracin barre con cuestiones de compatibilidad, para anar en otros s:illsZ en este caso claramente estamos anando en performance, al liberarnos del overhead que implica la constante copia de ob!etos que son ar umentos de mtodos y funciones. 6n artculos posteriores trataremos en mayor detalle y profundidad los distintos aspectos que fueron modificados, haciendo una comparativa entre como se lo ran en P#PG y como se lo ran en P#P(. ,dem"s de e2plicar profundamente las diferencias en el modelo de ob!etos nos quedan temas pendientes como &pciones de confi uracin Kphp.iniL, Cone2in a My5D0 KmysqliL, cambios en los mdulos, etc. #echa esta introduccin, estamos en condiciones de definir las distintas situaciones en las que se puede encontrar el desarrollador, y que aspectos !ue an a su favor o en contra se 7n la situacin en la que se encuentre.

&&'&','( TCual es mi escenarioS


6n el momento de plantearse la pre unta, el desarrollador se uramente se ubicar" en al uno de los dos escenarios posibles" Ce3bie K%niciacin en P#PL. " 62perimentado.

&&'&'0'( "e2bie
6n el planteo de esta discusin, podramos decir que es la situacin ideal, o por lo menos la m"s beneficiosa. 5i eres una persona que quiere arrancar en P#P, no lo dudes, P#P( es para ti. 4us aplicaciones ozaran de las nuevas capacidades en &&P, obtendr"s el beneficio de una me!or performance de e!ecucin Kesta comprobado e2perimentalmente que P#P( corre un )(X m"s r"pido que P#PGL y tu cdi o estar" muy bien acondicionado en cuanto a la compatibilidad con el nuevo hi!o que asoma- P#PH. Por cierto, no todo es color de rosas. Ina de los mayores beneficios a la hora de ele ir P#P para traba!ar en nuestro proyecto es la ran cantidad de cdi o que podemos encontrar en %nternet, y utilizarlo para nuestros traba!os. 4enemos una ran probabilidad de que ante al una tarea que se nos plantea, podamos encontrar al 7n script que nos solucione la vida, obviamente adapt"ndolo a nuestras necesidades. ,hora bien, no todo el cdi o que vamos a encontrar es compatible con P#P(. /e hecho la ran mayora todava no se ha adaptado. 6s cierto que con al 7n settin en nuestro php.ini podemos ayudar a darle mayor compatibilidad, pero como contrapartida muchas de estas settin s se eliminaran en P#PH. ADu quedaB #acerlo compatible modificando el cdi o, una tarea que para un desarrollador que se inicia no siempre es sencillo. /e todas formas a no alarmarse, que los randes proyectos KP#PCu:e, P#P88, etc.L ofrecen compatibilidad.

&&'&'4'( 7>perimentado
6n este caso, el optar por quedarse con P#PG o pasar a P#P( depende de nuestra aplicacin. 0as interro antes que el desarrollador se puede plantear podran serP AMi aplicacin usa clases y ob!etosB P AMi motor de 8ase de datos es My5D0B P AItilizo un hostin e2ternoB P AMi aplicacin sufre modificaciones en cuanto a los requerimientos y l ica de ne ociosB Pasemos a discutir venta!as y desventa!as en cada uno de los interro antes-

&&'&'A'( TMi aplicacin usa clases 8 obFetosS


Como pudimos comprender al comienzo de este articulo, uno de los principales esfuerzos de los dise;adores del <end 6n ine radic en el me!oramiento del modelo de ob!etos, bas"ndose claramente en un referente indiscutible en esta materia como lo es 5un. 5alvando las diferencias, se han tomado muchas cosas de .ava, desde convenciones de

Programacin en PHP: http://www.desarrolloweb.com/manuales/12/


' (os manuales de DesarrolloWeb.com tienen el cop!right de sus autores. )o reproducir sin autorizaci*n.

94

Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com nomenclaturas hasta estrate ias de implementacin. 5eria un desperdicio no utilizar dicho esfuerzo, sobre todo si nuestra aplicacin hace un uso e2haustivo de clases y ob!etos.

&&'&'C'( TMi motor de Base de datos es M8<BLS


, diferencia de la estrate ia de P#PG para la conectividad P#PNMy5D0, en la que el Core de P#P nos provee de un set de funciones para dicha interaccin, en P#P( My5D0 nos provee de un ,P% e2terno. 8"sicamente, la razn de este cambio fue una modificacin de licencia de My5D0, que obli o a P#P a hacer de My5D0 una base de datos m"s, y no "0," base de datos, como venia siendo en P#P+ y P#PG. /e todas formas, esto no repercute en nuestro cdi o, sino en la performance de nuestra aplicacin. 6l hecho de que una e2tensin no forme parte del Core de P#P y pase a ser e2terna nos enera un overhead, una sobrecar a de e!ecucin en detrimento de la performance. Como contrapartida, P#P( nos da la posibilidad de sacarle el mayor !u o posible a las muchas me!oras incorporadas en My5D0 G.'.+ o superior, a travs del ,P% mysqli. 6sto implica hacer uso de otras funciones, modificando nuestro cdi o. ,hora bien, Aque tan costosa es esta reescrituraB /epender" de nuestra estrate ia de cone2in a base de datos. AItilizamos una capa de abstraccin del estilo ,/&db B 5i la utilizamos estaremos mucho me!or parados frente a tal reescritura. 6n caso contrario el tiempo invertido ser" sensiblemente mayor.

&&'&'6'( T=tilizo un +osting e>ternoS


6n caso de no disponer de un hostin propio, y tener que depender de un hostin e2terno que nos provea de P#P, se uramente el hecho de pensar en mi rar a P#P( puede ser un problema. /e hecho, estadsticas de principio de )**H nos indican que solo alrededor del (X de los hostin que proporcionan P#P, tienen P#P(. 6sto no hace mas que refle!ar la lentitud con la que se esta moviendo el proceso de traspaso de P#PG hacia P#P(. Ina pre unta que sur e directamente sobre este tema es APor quB 8ueno, si uno tomo una distribucin de 0inu2, es poco probable que la versin de P#P( sea la incluida. 0a conformidad de los pro ramadores con P#PG es rande, y mucha de la documentacin e2istente esta escrita para P#PG. /e todas formas, a no dormirse con P#PG. In tema que se trata en la se unda parte de este artculo es lo nuevo que nos trae P#PH. Reremos que P#P( en muchos aspectos es una transicin mientras que la confirmacin se llama P#PH.

&&'&'3'( TMi aplicacin su#re modi#icaciones en cuanto a los re!uerimientos 8 lgica de negociosS
Cuando las aplicaciones tienen requerimientos de cliente bastante cambiantes, y se emplean recursos para su mantenimiento, o utilizamos una metodolo a de desarrollo incremental Ksoft3are versionadoL, lo ideal es utilizar lo 7ltimo que nos proporciona nuestra plataforma de pro ramacin. @eneralmente lo que se busca es un cambio radual, modular, y sostenido. Por otro lado, si nuestras aplicaciones residen en produccin sin mayores modificaciones Kal 7n proceso batch, al una aplicacin depurada, al 7n al oritmo estableL y estamos conformes con su funcionamiento, quiz"s no sea de nuestro inters mi rar hacia una nueva versin. Cos queda analizar que hay de nuevo en P#PH y que cosas deberamos ir teniendo en cuenta si utilizamos P#PG o P#P(.
Artculo por

,aniel L*pez

&&'*'( roblema del error 0;0 EU en H


0enemos que asegurarnos que el error &B&, de pgina no encontrada, sea correctamente enviado al

Programacin en PHP: http://www.desarrolloweb.com/manuales/12/


' (os manuales de DesarrolloWeb.com tienen el cop!right de sus autores. )o reproducir sin autorizaci*n.

95

Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com navegador para que no le llegue un H00P6C. &B& :?. #ay veces que con P#P queremos enviar un error G*G de p" ina no encontrada, para avisar al nave ador que una p" ina no e2iste. 6s sencillo enviar por las cabeceras del http un error G*G, pero hay que ase urarse que el cdi o de error est bien enviado para no dar informaciones ambi uas a los clientes que se conecten al servidor. 6sto es importante porque el cdi o G*G tambin sirve a los buscadores o motores de b7squeda, para informar que una p" ina no e2iste. 5i damos informaciones ambi uas a los buscadores puede que redunde ne ativamente en la clasificacin de nuestro sitio. 6l problema que queremos comentar ahora es el tpico error "G*G &U". 6sto es una ambi dedad- G*G es p" ina no encontrada y &U quiere decir que todo ha ido bien. Pero si no encontr la p" ina ACmo es que decimos que &UB 6so es al o que se puede evitar enviando el error correctamente en la cabecera del #44P. Para enviar un cdi o de error G*G por las cabeceras del #44P con P#P tenemos que hacer lo si uiente<? header("<TT3/-.1 #1# Aot Vo"nd"); ?>

Con la funcin headerKL de P#P enviamos informacin en la cabeceras del http. 6n este caso hemos enviado una cabecera G*G Cot Mound. ,tencin, porque la funcin headerKL debe invocarse antes de haber escrito nada en la p" ina, osea, antes de haber enviado nin una informacin al nave ador. Pero dependiendo de la confi uracin de nuestro servidor esto puede funcionar o no. 0a me!or manera de saber qu estamos enviando por las cabeceras del http es utilizar un pro rama que nos muestre las cabeceras que se eneran tanto en el cliente como en el servidor. 62isten varios pro ramas que nos podran servir, pero nosotros vamos a recomendar aqu una e2tensin de Mirefo2 que hemos comentado ya en otro artculo- Rer cabeceras #44P con 0ive#ttp#eaders. Reremos que en al unas ocasiones enviando esta cabecera el nave ador recibe un cdi o de error como este#44PN'.2 G*G &U 6so es al o que tenemos que evitar, porque es ambi uo. 0a cabecera deseable sera#44PN'.2 G*G Cot Mound Pues bien, cuando la cabecera que eneramos es #44PN'.2 G*G &U tenemos que hacer lo si uiente para conse uir el deseado #44PN'.2 G*G Cot Mound.
<? header("<TT3/-.1 #1# Aot Vo"nd"); header("Stat"s: #1# Aot Vo"nd"); ?>

Primero le indicamos la cabecera del http como G*G y lue o lanzamos otra cabecera indicando que el estatus que tiene que enviar es "Cot Mound". 6sto debera funcionar en todos los casos. 6s posible que con una sola de las dos cabeceras enviadas nos enve ya el error G*G Cot Mound, depende de la confi uracin de nuestro servidor que necesitemos una u otra. Pero si indicamos las dos en las pruebas que he hecho con varios servidores siempre he recibido el cdi o de error correcto. %nsisto en que lo bueno es que veamos qu cabeceras del #44P estamos enviando con un producto como 0ive#ttp#eaders . ,s podremos estar se uros de qu cabeceras tenemos que enviar y qu cdi o P#P es el correcto en nuestro caso.

Programacin en PHP: http://www.desarrolloweb.com/manuales/12/


' (os manuales de DesarrolloWeb.com tienen el cop!right de sus autores. )o reproducir sin autorizaci*n.

96

Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com

Porque en al unos servidores P#P si enviamos slo esta cabecera<? header("Stat"s: #1# Aot Vo"nd"); ?>

Cos enva al nave ador el cdi o#44PN'.2 )** &U Por e!emplo, en este caso es todava peor, porque nosotros habamos querido enviar un error G*G y en realidad lo que ha lle ado al nave ador es un )** &U que quiere decir p" ina encontrada y correcta. 6n definitiva, cabe estudiar detalladamente este asunto para ase urarnos que estamos enviando la cabecera correcta y el error G*G es claro.
Artculo por

Miguel Angel Alvarez

&&','( Librer$as J<E" para H


'nformacin sobre las distintas librer1as y opciones para utili!ar la notacin de objetos Davascript D-:@ en programas reali!ados con el lenguaje PHP . .5&C es una notacin .avascript para escribir ob!etos que se ha hecho bastante popular en el mundo del desarrollo de 3ebs y que se utiliza en diversos len ua!es de pro ramacin, componentes Khabitualmente ,!a2L, etc. 5u 2ito se debe a que es una e2celente forma para almacenar informacin que deseamos compartir entre distintos componentes o len ua!es de las aplicaciones 3eb. 5i traba!amos con ,!a2 y al uno de los frame3or:s .avascript e2istentes, ya habremos notado esta posibilidad y posiblemente ya estemos utilizando .5&C o una notacin similar. .5&C, cuyas si las si nifican .ava5cript &b!ect Cotation Ken espa;ol Cotacin de &b!etos de .ava5criptL, es un formato li ero, f"cil de escribir o codificar, as como tambin es f"cil de leer por los seres humanos. /esde .avascript podemos procesar directamente cualquier ob!eto .5&C y e2isten libreras para la mayora de los len ua!es de pro ramacin que tienen funciones para interpretar este formato. Por ello se ha adoptado universalmente. Para m"s informacin podemos visitar el sitio 3eb de .5&C en http-NN333.!son.or N. 6sto quiere decir que con .5&C podemos comunicar datos f"cilmente entre scripts .avascript y scripts P#P. Por e!emplo, pensemos en una validacin de formulario que se desea hacer con ,!a2. 0os datos del formulario se pueden enviar a P#P por medio de P&54 y lue o podramos desde P#P enviar a .avascript el resultado de validar esos datos en el servidor. Como la validacin puede ser positiva o ne ativa, as como puede tener m"s o menos cdi os de error y acciones a realizar dependiendo de la informacin procesada, el script P#P tiene que mandar una respuesta m"s o menos elaborada al script .avascript y una posibilidad es enviar esos datos desde P#P utilizando la notacin .5&C.

&&','&'( Disponibilidad de las #unciones J<E" en H


P#P dispone de varias funciones para hacer distintos tratamientos con notacin de ob!etos .5&C, que permite convertir un ob!eto P#P, o cualquier otro tipo de variable, a un strin con notacin .5&C, as como crear un ob!eto P#P a partir de un strin codificado con .5&C. 6n P#P, como decamos, es posible producir y consumir datos car ados con notacin .5&C, por medio de unas funciones de las que dispone el len ua!e, que e2isten de manera predeterminada en los servidores modernos de P#P y que se pueden utilizar tambin en instalaciones anti uas de P#P, aunque con al 7n traba!o de instalacin adicional. , partir de P#P (.) las funciones .5&C est"n disponibles siempre, pero si utilizamos por e!emplo P#P G tendramos que instalarlas manualmente. Para ello e2isten varios paquetes de libreras, que provienen de diversas fuentes, que

Programacin en PHP: http://www.desarrolloweb.com/manuales/12/


' (os manuales de DesarrolloWeb.com tienen el cop!right de sus autores. )o reproducir sin autorizaci*n.

97

Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com tienen funciones para tratar con .5&C desde P#P. ? Pa uete @%2- de P.3L 6ste paquete, del repositorio de libreras P#P P6C0, es compatible con P#P G.+.* o superior. 6n versiones superiores a P#P (.) est" disponible por defecto. 6n versiones anteriores del len ua!e se tendra que instalar de manera separada. ? Librer$a @%2-?PHP 6s una librera de funciones que se conoce tambin con el nombre de "5ervicesS.5&C". &ri inariamente escrita por Michal Mi urs:i, en la actualidad se encuentra disponible dentro del frame3or: P#P P6,9http-NNpear.php.netNpac:a eN5ervicesS.5&C ? @%2- Lib en Aend 5ramework 6s una librera de funciones para tratamiento con .5&C que forma parte del frame3or: P#P <end. ? B(L?+P3 para PHP Por medio de una e2tensin para la librera phpP2mlrpc, tambin se puede tratar con notacin de ob!etos .5&C. 0as particularidades de cada sistema son li eramente distintas. Cabe decir que la m"s interesante sera la primera, que forma parte de P6C0, puesto que est" escrita en C y por tanto ser" m"s r"pida de e!ecutarse, al formar parte de los componentes nativos de P#P. Como decimos slo podremos disponer de ella a partir de P#P (.), pero en servidores anti uos tendramos que instalarla aparte, lo que a menudo ser" complicado, o incluso imposible para sitios 3eb en produccin y en un alo!amiento compartido. ,s que, si nuestro servidor P#P no dispone de las funciones .5&C por estar poco actualizado, nos costar" mucho menos esfuerzo y dolores de cabeza utilizar otra librera distinta a la b"sica de P6C0. 6n este caso, por la facilidad de instalacin, se recomendara la utilizacin de la librera que viene en P6,9, que se puede descar ar del propio sitio de P6,9, en la I90 http-NNpear.php.netNpac:a eN5ervicesS.5&C
-ota" #emos publicado en /esarrollo>eb.com en pasados artculos al unas referencias 7tiles para instalar P6,9 y utilizar al unos componentes de este frame3or: P#P.este frame3or: P#P.

62iste un artculo muy interesante, aunque en in ls, que compara las diversas libreras e2istentes para usar .5&C desde P#P, que contiene diversas informaciones tcnicas, requisitos y un an"lisis del desempe;o de cada una. 6n el pr2imo artculo e2plicaremos cmo utilizar las funciones .5&C en P#P por medio de las funciones nativas del len ua!e.
Artculo por

Miguel Angel Alvarez

&&'0'( Code)gniter
Code'gniter es un frame"or8 PHP para la creacin rpida de aplicaciones "eb. Presentacin general del frame"or8 y primeras notas para empe!ar a usarlo. Probablemente ya sepamos que un frame3or: es un pro rama para desarrollar otros pro ramas, Code% niter, por tanto, es un pro rama o aplicacin 3eb desarrollada en P#P para la creacin de cualquier tipo de aplicacin 3eb ba!o P#P. 6s un producto de cdi o libre, libre de uso para cualquier aplicacin. Como cualquier otro frame3or:, Codei niter contiene una serie de libreras que sirven para el desarrollo de aplicaciones 3eb y adem"s propone una manera de desarrollarlas que debemos se uir para obtener provecho de la aplicacin. 6sto es, marca una manera especfica de codificar las p" inas 3eb y clasificar sus diferentes scripts, que sirve para que el cdi o est or anizado y sea m"s f"cil de crear y mantener. Code% niter implementa el proceso de desarrollo llamado Model Rie3 Controller KMRCL, que es un est"ndar de pro ramacin de aplicaciones, utilizado tanto para hacer sitios 3eb como pro ramas tradicionales. 6ste sistema tiene sus caractersticas, que veremos en artculos si uientes.

Programacin en PHP: http://www.desarrolloweb.com/manuales/12/


' (os manuales de DesarrolloWeb.com tienen el cop!right de sus autores. )o reproducir sin autorizaci*n.

98

Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com Code% niter no es ma ia, pero contiene muchas ayudas para la creacin de aplicaciones P#P avanzadas, que hacen que el proceso de desarrollo m"s r"pido. , la vez, define una arquitectura de desarrollo que har" que pro ramemos de una manera m"s ordenada y contiene diversas herramientas que ayudan a hacer aplicaciones m"s vers"tiles y se uras. Code% niter y otros frame3or:s P#P pueden ayudarte a dar el salto definitivo como desarrollador P#P, creando aplicaciones 3eb m"s profesionales y con cdi o m"s reutilizable, con la diferencia que Code % niter est" creado para que sea f"cil de instalar en cualquier servidor y de empezar a usar que cualquier otro frame3or:. ,dem"s muchas de sus utilidades y modos de funcionamiento son opcionales, lo que hace que oces de mayor libertad a la hora de desarrollar sitios 3eb.

&&'0'&'( Caracter$sticas generales de Code)gniter


,l unos de los puntos m"s interesantes sobre este frame3or:, sobre todo en comparacin con otros productos similares, son los si uientes)ersatilidad- Duiz"s la caracterstica principal de Code% niter, en comparacin con otros frame3or:s P#P. Code% niter es capaz de traba!ar la mayora de los entornos o servidores, incluso en sistemas de alo!amiento compartido, donde slo tenemos un acceso por M4P para enviar los archivos al servidor y donde no tenemos acceso a su confi uracin. 3ompatibilidad- Code% niter, al menos en el momento de escribir este artculo de desarrollo3eb.com, es compatible con la versin P#P G, lo que hace que se pueda utilizar en cualquier servidor, incluso en al unos anti uos. Por supuesto, funciona correctamente tambin en P#P (.
#ctualizado" /esde la versin ) de Code% niter ya solo es compatible con la versin ( de P#P. Para los que todava usen P#P G pueden descar ar una versin anti ua del frame3or:, como Code% niter R '.O.+, que todava era compatible. 6stas versiones est"n en la p" ina de descar as de Code% niter.

5acilidad de instalacin- Co es necesario m"s que una cuenta de M4P para subir Code% niter al servidor y su confi uracin se realiza con apenas la edicin de un archivo, donde debemos escribir cosas como el acceso a la base de datos. /urante la confi uracin no necesitaremos acceso a herramientas como la lnea de comandos, que no suelen estar disponibles en todos los alo!amientos. 5le=ibilidad- Code% niter es bastante menos r ido que otros frame3or:s. /efine una manera de traba!ar especfica, pero en muchos de los casos podemos se uirla o no y sus re las de codificacin muchas veces nos las podemos saltar para traba!ar como m"s a usto encontremos. ,l unos mdulos como el uso de plantillas son totalmente opcionales. 6sto ayuda muchas veces tambin a que la curva de aprendiza!e sea m"s sencilla al principio. Ligereza- 6l n7cleo de Code% niter es bastante li ero, lo que permite que el servidor no se sobrecar ue interpretando o e!ecutando randes porciones de cdi o. 0a mayora de los mdulos o clases que ofrece se pueden car ar de manera opcional, slo cuando se van a utilizar realmente. 8ocumentacin tutorializada- 0a documentacin de Code% niter es f"cil de se uir y de asimilar, porque est" escrita en modo de tutorial. 6sto no facilita mucho la referencia r"pida, cuando ya sabemos acerca del frame3or: y queremos consultar sobre una funcin o un mtodo en concreto, pero para iniciarnos sin duda se a radece mucho. 5in duda, lo m"s destacable de Code% niter es su accesibilidad, ya que podemos utilizarlo en la mayor ama de entornos. 6sta es la razn por la que en /esarrollo>eb.com hemos ele ido este frame3or: P#P para comenzar un manual que e2plicar" cmo utilizarlo para desarrollar nuestras propias aplicaciones 3eb. 6n si uientes artculos iremos contando diferentes aspectos de este frame3or: y lo utilizaremos para crear una primera aplicacin 3eb. Para continuar puedes leer el artculo %nstalacin y confi uracin de Code% niter. 4ambin puedes ir al Manual de Codei niter que estamos publicando.
Artculo por

Miguel Angel Alvarez

Programacin en PHP: http://www.desarrolloweb.com/manuales/12/


' (os manuales de DesarrolloWeb.com tienen el cop!right de sus autores. )o reproducir sin autorizaci*n.

99

Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com

&&'4'( <eguridad de pro8ectos H


Cmo evitar que nuestros proyectos "eb sean atacados fcilmente.

/ebido a los avances en nuestro medio tecnol ico, nos encontramos con situaciones que nos amar an la e2istencia, como por e!emplo- cuando nuestras 3ebs se caen, in reso de virus a nuestro PC, spam en nuestros correos, etc.

6l trmino se empez a utilizar en el a;o )*** por 0uis von ,hn, Manuel 8lum y Cicholas .. #opper de la Carne ie Mellon Iniversity, y .ohn 0an ford de %8M. .l sistema 3aptcha tiene las siguientes caracter$sticas por definicin" 5on completamente automatizados, es decir, no es necesario nin 7n tipo de mantenimiento ni de intervencin humana para su realizacin. 6sto supone randes beneficios en cuanto a fiabilidad y coste. 6l algoritmo utilizado es p7blico. /e esta forma, la ruptura de un captcha pasa a ser un problema de inteligencia artificial y no la ruptura de un al oritmo secreto. Pues habiendo visto un poco lo que es captcha C3ompletely #utomated Public ' uring test to tell 3omputers and Humans #part :Prueba de 'uring p<blica y automtica para diferenciar a m uinas y humanos; . 6n este escenario, podramos encontrarnos con dos situaciones bien diferentes 4ener un sitio montado y tener que prote erlo. Pro ramar un sitio desde cero.

6scape de las entradas. Para muchos la manera ideal de prote er un site. Como ya hemos visto en al uno de los casos, no nos es 7til. 0os m"s habituales son el uso de addslashesKL N stripslashesKL htmlentitiesK\strin , 6C4SDI&465L htmlspecialcharsKL mysqlSrealSstrin KL

4eniendo activadas las magic0 uotes0gpc en nuestro phpDiniE ue nos pondr por defecto un slash en todos los strings :evitando los tediosos "addslashes:;";. 6n todo caso, el uso de dichos elementos nos podr" salvar de muchos de los ataques. 6vitar, salvo en casos necesarios, que los formularios P&54 se llamen desde otro dominio que no sea el del propio servidor. 6n este caso, nos evitaremos que un atacante avezado utilice un script a tal efecto para ir bloqueando nuestro servidor y llen"ndolo de datos in7tiles. Ramos a ver, F u! clase de configuracin ser$a la ptima para ue un sistema PHP fuera ms seguro contra todo tipo de ata uesG 6stas directivas seran2penbase0dir 6sta directiva bien confi urada evitar" los ataques "trasversal directories", debido a que limita e!ecucin de ficheros al entorno que esco!amos. #llow0furl0open off 6s importante que esta directiva est en &MM para evitar "9emote Mile %nclusion", ya que la inhabilitacin de esta directiva no permitir" a la aplicacin hacer include remotos. +egister0globals off Como ya hemos e2plicado, quiz" la m"s malfica Ky obsoletaL forma de que nuestros atacantes desplie uen todo su

Programacin en PHP: http://www.desarrolloweb.com/manuales/12/


' (os manuales de DesarrolloWeb.com tienen el cop!right de sus autores. )o reproducir sin autorizaci*n.

100

Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com potencial es mediante esta directiva activada. 6s decir, cualquier par"metro que nos ven a por P2%' o 1.' puede ser una variable potencialmente peli rosa en nuestro aplicativo. ,s, cualquier par"metro e2terno se tratar" de forma cuidada con /01.'HIparamIJE /0P2%'HIparamIJE /05*L.%HIparamIJ para establecer qu tipo de variables son e2ternas y cu"les no. Co se recomienda, a no ser que se ten a muy claro qu se est" haciendo, el uso de /0+.&6.%', pues ah puede entrar bcualquier cosab que nos ven a e2ternamente, y f"cilmente podran introducirnos valores no esperados. %afe0mode on 6sta directiva activada evitar" la e!ecucin de al unos comandos potencialmente da;inos en nuestro sistema, adem"s del chequeo de ciertas funciones que puedan considerarse delicadas. Ina lista de dichas funciones puede encontrarse aquphp.netNmanualNenNfeatures.safePmode.functions.php 6special atencin merecen tambin las directivas gsafeSmode[h que componen la familia. safe modesafeSmodeS id safeSmodeSincludeSdir safeSmodeSe2ecSdir safeSmodeSallo3edSenvSvars safeSmodeSprotectedSenvSvars

Por 7ltimo, unas funciones que, se 7n la casustica de nuestro aplicativo pudiera evitarnos al 7n susto por la e!ecucin de comandos sensibles que no queremos Ky no debemosL utilizar disableSfunctions Wlista de funcionesY disableSclasses Wlista de clasesY

6scaneo de puertos Ina manera de evitar ataques a todo sistema operativo, ya sea mediante 3eb o mediante cualquier otro tipo de vulnerabilidad, sera mediante la e!ecucin de cdi o remoto o inyeccin de cdi o no deseado en servicios que puedan tener relacin con nuestro sistema. Para ello se recomienda e!ecutar un escaneo de puertos de nuestra m"quina Kno 7nicamente puerto Q*Phttp o GG+P550L para averi uar las posibles vulnerabilidades o e(ploits que puedan afectar a nuestro sistema y servidor 3eb0os m"s conocidos son nmap y nessus. 6l funcionamiento de nmap puede lle ar a ser sencillo, aunque tiene un desplie ue de opciones que, a buen se uro, mucha ente encontrar" interesante. Ina e!ecucin de este pro rama puede dar lu ar a un resultado como este%tarting -map KDLM : http">>insecureDorg ; at NOOPOQOM RN"OL 3.%' *nteresting ports on RSNDRQPDRDR" -ot shown" RTRR closed ports P2+' %'#'. %.+)*3. NR>tcp open ftp NM>tcp open telnet PO>tcp open http (#3 #ddress" OO"ON"35"PR"Q5"PS :Ay1ate 3ommunications; -essusE en cambio, nos ofrecer" una herramienta clienteNservidor que utilizar" una base de datos con las vulnerabilidades que estadsticamente han podido ocasionar gdesastresh y nos avisa mediante este escaneo. 0a interfaz, adem"s, es bastante m"s ami able y nos mostrar" unas estadsticas de los procesos e!ecutados.

Programacin en PHP: http://www.desarrolloweb.com/manuales/12/


' (os manuales de DesarrolloWeb.com tienen el cop!right de sus autores. )o reproducir sin autorizaci*n.

101

Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com

&&'4'&'( 7scaneo de vulnerabilidades 2eb

M"s en consonancia con el ob!etivo de este artculo, est"n los escaneos de vulnerabilidades propiamente 3eb. 6stos escaneos se pueden basar en varias premisas, empleando sistemas de conocimiento, funciones heursticas e incluso tcnicas fu!!, que veremos m"s adelante. Ina buena combinacin de estos elementos puede darnos muchas pistas a la hora de prote er nuestro site y lle ar donde nosotros no alcanzamos. 6mpecemos por los escaneadores autom"ticos m"s empleados y populares.

&&'4'*'( Acuneti>
,cuneti2, que oza de una versin 5ree .dition :slo para H'(L *njection;, pero con una ran variante de sistemas de inyeccin, una base de datos amplia y una interfaz muy ami able. 0os procesos por los que puede gatacarseh pueden ser varios y los perfiles de ataque i si se tiene la versin de pa o i de los m"s variopintos, muchos de ellos ya los hemos visto aqu.

&&'4','( <<< V<+ado2 <ecurit8 <cannerR


5imilar al anterior en cuanto a sistema webE uiz no tan completoE pero ue ofrece tambi!n el sondeo de otros protocolos como 5'PE -et7ios, mdulos de ,pache del que se ten an constancia que hay vulnerabilidades.

&&'4'0'( -cnicas .uzz


5e llama fu!!ing a las diferentes t!cnicas de testeo de aplicativos ue generan datos secuenciales y aleatorios para obtener as$ las vulnerabilidades de la victima. 6ste sistema puede ser muy potente, pues combina la aleatoriedad en los ataques con ataques basados en formatos heursticos. Ina lista de estos potentes escaneadores de vulnerabilidades pueden encontrarse en333.infosecinstitute.comNblo N)**(N')NfuzzersPultimatePlist.html In e!emplo lo podemos tener e!ecutando el >ebMuzzer, con licencia @P0, escrito en CN unzip.altervista.or N .phpBfVpro!ects$3ebfuzzer

&&'4'4'( H )D<

P#PP%/5 es un sistema basado en P#P que act7a como %/5 K%ntrusion /etect 5ystemL y que se aplica a todos nuestros archivos buscando al 7n tipo de inyeccin o vulnerabilidad. Puede detectar desde J55, 5D0 %n!ection, 9M% y ataques 0/,P %n!ection y tiene incluso hasta mdulos especializados para distintos tipos de CM5.

&&'4'A'( Mdulos Apac+e


/e entre ellos, e2isten muchos que nos pueden ayudar a nuestro cometido, aunque nos centraremos en los si uientes(od0rewrite Mamoso sobre todo para el uso de 6+L?5riendly, pues reescribe la entrada transform"ndola en otras g#uman readibilityh. Personalmente recomiendo el uso de mod0security, debido a que mod0rewrite tiene l icas limitaciones al no ser un mdulo dise;ado a tal efecto.

Programacin en PHP: http://www.desarrolloweb.com/manuales/12/


' (os manuales de DesarrolloWeb.com tienen el cop!right de sus autores. )o reproducir sin autorizaci*n.

102

Tu mejor ayuda para aprender a hacer webs www.desarrolloweb.com

&&'4'C'( Conclusin
Co es un caso trivial tener que prote er un site 3eb, tanto si ya est" hecho como si lo tenemos que desarrollar de nuevo. 0a 7nica forma de obstaculizar el e!ercicio de estos atacantes ser" conocer cu"les son sus tcnicas, mantenerse actualizado re ularmente de las vulnerabilidades de nuestro entorno :%istema 2perativoE LenguajeE base de datos y mdulos y librer$as asociados;E en caso de ser un programa conocido :como un ,ordPressE @oomlaUE Post-uke; mantenerse alerta a los bugs que, altruistamente, al unos atacantes publican en 3ebs. ,dem"s, con un sistema *8% que nos pueda ir comunicando qu pasa con nuestros logs, la evolucin de estos mismos y la constante evaluacin de las vulnerabilidades de nuestro sistema, !unto con un escaneo autom"tico, t!cnicas fuzz y una pro ramacin slida, y al 7n mdulo destinado a la se uridad har"n de nuestro servidor 3eb una fortaleza KcasiL ine2pu nable.
Artculo por

-rian .ern/n#ez

Programacin en PHP: http://www.desarrolloweb.com/manuales/12/


' (os manuales de DesarrolloWeb.com tienen el cop!right de sus autores. )o reproducir sin autorizaci*n.

103

Vous aimerez peut-être aussi