Está en la página 1de 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
Redactor de DesarrolloWeb.com
http://www.desarrolloweb.com
(24 captulos
Miguel Angel Alvarez
Director de DesarrolloWeb.com ! Escuela"#
http://www.desarrolloweb.com
(2$ captulos
Carlos Luis Cuenca
http://www.helloworldsolutions.com/
(% captulo
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.
1
Tu mejor ayuda para aprender a hacer webs
www.desarrolloweb.com
or !u aprender H
Enumeracin y eplicacin 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 lenua!e de proramacin est"s invirtiendo tu tiempo, ese bien tan preciado que tienes y, por supuesto,
debemos escoer correctamente a qu lenua!e apostar nuestras cartas.
P#P es el lenua!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 prorama $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 lenua!e m"s indicado para cualquier persona que haya e2plorado previamente
otros lenua!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
riideces de los lenua!es de proramacin. Podemos hacer un uso sencillo de P#P, pero tambin tiene frmulas para
un uso avanzado. 6s un trmino medio entre un lenua!e "marciano" y un lenua!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 1proramasP#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 lenua!e tena una lara vida. 6n pocas horas una persona puede empezar a proramar 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 lenua!e y las tecnoloas que lo rodean.
P#P es un lenua!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 1reiauilera
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
proramar. P#P es muy poderoso y est" presente en la mayora de los servidores p7blicos de %nternet. 4odas esas son
razones suficientes para escoer P#P como lenua!e de proramacin 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.
2
Tu mejor ayuda para aprender a hacer webs
www.desarrolloweb.com
6s muy f"cil encontrar un proramador de P#P, pero no lo es tanto encontrar un proramador de P#P que adem"s
desarrolle atendiendo a un modelo o patrn de dise;o, con buenas pr"cticas que eneren un cdio 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 Codeiniter, 5ymfony, <end, =ii. 5on productos que han lleado 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 Maento, &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 aradecerle 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 preunt a un
e2perto en el que confiaba qu lenua!e escoera para aprender y ste le respondi con otra preunta Aqu es lo que
deseas hacer con ese lenua!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 proramacin y ha tenido el enorme placer de acceder a una de las me!ores comunidades, la del soft3are libre y la
proramacin 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 lenua!e.
"Co puedo andar coqueteando con tantos lenua!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"
Miuel ,nel ,lvarez 1mides3eb
6ntre los motivos que deberan llevarte a aprender P#P no es nada despreciable el hecho de P#P de ser el lenua!e en el
que encontrar"s la mayor cantidad de informacin, manuales, talleres, tutoriales, etc. 6s muy difcil que lleues a
toparte con un problema, o enfrentarte a una necesidad, que no haya sido resuelta por un desarrollador antes que t7.
"@ulea" 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 lenua!e, porque queremos que puedas estar en clase con un profesor que pueda llevarte
paso por paso en el aprendiza!e, aluien que te ense;e todas esas tcnicas de primera mano y que, si no has
comprendido alo, que puedas preuntar para que te lo e2plique de nuevo. Due tenas la posibilidad de acceder a
tutoras con los docentes y puedas realizar todo tipo de preuntas 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 proramar 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 laro
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.
3
Tu mejor ayuda para aprender a hacer webs
www.desarrolloweb.com
/ebes conocer las bases de P#P para lueo 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 lueo vayamos a hacer un curso avanzado, sino
porque queremos primero divular las bases que todo desarrollador debe conocer de P#P, para poder lueo enfrentarse
a otros ob!etivos. Con este curso b"sico comienza un ciclo, que daremos continuidad con otros cursos como
proramacin orientada a ob!etos, proramacin de mdulos en >ordpress o /rupal, frame3or:s como 5ymfony o
Codeiniter, etc.
5i quieres aprender P#P no haas 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 hanout $php%& "Por qu aprender
P#P" tendr"s una descripcin m"s detallada de nuestro prorama 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
Eplicamos someramente qu# es el PHP y lo comparamos a otros lenguajes para el desarrollo de "ebs
dinmicas
P#P es el lenua!e de lado servidor m"s e2tendido en la 3eb. Cacido en 'FFG, se trata de un lenua!e de creacin
relativamente reciente, aunque con la rapidez con la que evoluciona %nternet parezca que ha e2istido toda la vida. 6s un
lenua!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 framentos de cdio 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 cdio #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 lenua!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.
4
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 lenua!es parecidos en cuanto a potencia
y dificultad si bien su sinta2is puede diferir sensiblemente. ,lunas 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 lenua!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 siuientes a esta nota, que distinuen ,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 suren
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 tecnoloa Microsoft, esta
orientado hacia sistemas >indo3s, especialmente C4.
0as tareas fundamentales que puede realizar directamente el lenua!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 lenua!es soportan iualmente ambos procedimientos.
,5P realiza numerosas tareas sirvindose de componentes Kob!etosL que deben ser comprados a determinadas
empresas especializadas Ko proramados por nosotros mismos en otros lenua!esL. P#P presenta una filosofa
totalmente diferente y, con un espritu m"s eneroso, es proresivamente construido por colaboradores
desinteresados que implementan nuevas funciones en nuevas versiones del lenua!e.
6ste manual va destinado a aquellos que quieren comenzar de cero el aprendiza!e de este lenua!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
proramacin. 5in embaro, es posible que en determinados momentos aluien que no haya proramado nunca pueda
verse un poco desorientado. Cuestro conse!o es el de no querer entender todo antes de pasar al siuiente captulo sino
intentar asimilar alunos conceptos y volver atr"s en cuanto una duda sur!a o hayamos olvidado al7n 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 rasos qu es el P#P, alunos conceptos 7tiles
sobre el modo de traba!ar con p"inas din"micas al mismo tiempo que nos introduce alunos elementos b"sicos de la
proramacin 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 proramacin en P#P.
6speramos que este manual resulte de vuestro arado 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 descarados au$.
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.
5
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 lenua!e creado por una ran comunidad de personas. 6l sistema fue desarrollado oriinalmente 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 Pae 4ools y adquiri relativo 2ito racias a que otras personas pidieron a
9asmus que les permitiese utilizar sus proramas 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 lenua!e- P#PNM%.
0a siuiente ran contribucin al lenua!e se realiz a mediados del FO cuando se volvi a proramar 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 alunos inconvenientes de la anterior versin. ,lunas me!oras de esta nueva versin son su
rapidez Pracias a que primero se compila y lueo se e!ecuta, mientras que antes se e!ecutaba mientras se interpretaba el
cdioP, 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, lorando situarse cerca de los ( millones de
sitios y Q**.*** direcciones %P, lo que le ha convertido a P#P en una tecnoloa 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 proramacin del
lado del servidor de sitios 3eb. @racias a la aceptacin que ha lorado, y los randes esfuerzos realizados por una
creciente comunidad de colaboradores para implementarlo de la manera m"s ptima, podemos aseurar que el lenua!e
se convertir" en un est"ndar que compartir" los 2itos auurados al con!unto de sistemas desarrollados en cdio
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 lenua!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.
6
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
lenua!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 cdio, 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 restrinidos, comercio electrnico...L
o para propsito general Kfunciones matem"ticas, e2plotacin de cadenas, de fechas, correccin ortor"fica,
compresin de archivos...L son realizadas por este lenua!e. , esta inmensa librera cabe ahora a;adir todas las
funciones personales que uno va creando por necesidades propias y que lueo 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 alo 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.
7
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 lenua!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 colar los archivos por M4P en el servidor y
e!ecutarlos desde %nternet.
,s pues, antes comenzar a crear nuestros proramas en P#P, es necesario-
P 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
descarados, 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 diriirnos 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 seuir para cada caso particular. /e todos modos, nosotros vamos a ofrecer alunas ayudas para
confiurar P#P en los sistemas m"s habituales.
0a eleccin de vuestro prorama servidor tendr" mucho que ver con el sistema operativo que ten"is corriendo en
vuestro ordenador. 6stas seran alunas 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 necesitarais-
P 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.
8
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 descararse, 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
al7n bu no correido haa 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 confiurar 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 lenua!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 proramacin 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. ,lunos 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.
9
Tu mejor ayuda para aprender a hacer webs
www.desarrolloweb.com
Confiuracin de P#P con ,pache en >indo3s
Confiuracin 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 confiurado 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 confiurar 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 luar, hay que descararse 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 descararse esta 7ltima.
Ina vez descarado, 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 carpeta-
c-3indo3ssystem c-3inntsystem
6n este fichero se encuentra toda la confiuracin de P#P, y las modificaciones en la confiuracin 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 proramaapache roupapache)confL
,brir el fichero, y situarse al final del mismo, y escribir las siuientes lneas-
ScriptAlias /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 siuiente
contenido-
<? phpinfo();?>
0ueo lo uardamosdentro de la carpeta raz de documentos del ,pache Kpor defecto c-archivos de proramaapache
roupapache)htdocs L, con un nombre terminado en .php, por e!emplo info.php
Para e!ecutarlo, a travs de un naveador, 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 seuridad. Podemos seuirla para confiurar
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 luar de C@%, para dotar al sistema de una mayor seuridad, y tambin m"s
potencia.
+eferencia" 6n esta M,D damos otras opciones para la instalacin de P#P, utilizando proramas que permiten instalar y confiurar
,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
Eplicamos 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 seuro 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 seuridad. ,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 tenan, les referimos a nuestro manual de instalacin y confiuracin de ,pache.
*','&'( Descargar 8 descomprimir H
6l primer paso consiste en descarar la 7ltima versin de P#P. Podremos hacerlo desde la p"ina oficial de P#P, en la
seccin de descaras. http-NN333.php.netNdo3nloads.php /ebemos eleir la versin "zip pac:ae" que contiene todas
las funcionalidades de P#P y el mdulo necesario para instalarlo en ,pache.
Ina vez descarado 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 alo como "phpPG.+.'P>in+)" que colar" de nuestro directorio raz. 5e recomienda cambiar el nombre del
directorio creado a alo como "c-php". 6n todo caso, nos advierten en la p"ina de P#P sobre no colocar nin7n
nombre de directorio que contena espacios, pues al7n servidor 3eb puede dar problemas. Por e!emplo, cuidado con
instalar P#P en un directorio como este "c-archivos de proramaphp", 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 alo 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
confiuracin 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 confiuracin de P#P. 5e recomienda utilizar "php.iniPrecommended", porque viene optimizado
para obtener los me!ores niveles de seuridad. 6n cualquier caso, podemos editar en cualquier momento el contenido
del archivo para modificar la confiuracin de P#P a nuestro usto o necesidades.
Para definir el php.ini debemos hacer una copia del archivo de confiuracin escoido 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 confiuracin 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 Proramas P ,pache #44P 5erver P Confiure ,pache #44P 5erver P 6dit httpd.conf
confiuration 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 confiuracin del mdulo de ,pache.
oad!od"le php#$%od"le &:phpsapiphp#apache'.dll
AddType application/x-httpd-php .php
6l luar adecuado para a;adir esas lneas es en el bloque de cara de mdulos, que podemos encontrar si buscamos por
el te2to "0oadModule". Podemos a;adir las lneas de cara del mdulo P#P despus de la cara de los otros mdulos
que vienen ya confiurados 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, alo 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 alo 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 confiuracin 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 proramar 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, alo como
"C-,rchivos de prorama,pache @roup,pache)htdocs"
Podemos crear un archivo llamado, por e!emplo, "prueba.php", en el que colocaremos dentro el siuiente cdio-
<?
phpinfo()
?>
6sta funcin simplemente crear" una p"ina de muestra de las confiuraciones definidas para P#P en ese servidor.
Para acceder al archivo creado desde nuestro e2plorador, escribiremos en la barra de direcciones esta I90-
http-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 siuiente imaen.
+eferencia" 6n esta M,D damos otras opciones para la instalacin de P#P, utilizando proramas que permiten instalar y confiurar
,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 proramas 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 embaro, 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 alo 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 alunos 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 aptPet 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 descara de paquetes
que es el aptPet. 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 #o3toMore. =o la he traducido libremente y la he
complementado con e2plicaciones adicionales y alunos pasos e2tra que he considerado de inters.
Como un primer paso, podemos lanzar un comando para obtener los privileios 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 siuiente comando-
apt-+et install %ys,l-ser*er %ys,l-client
/urante el proceso de instalacin tendr"s que introducir la clave que deseas confiurar 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 siuiente comando-
apt-+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 naveador cualquiera e introduce la I90 de localhost o la %P
local de tu ordenador-
http://localhost
& bien-
http://-.'.-/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 confiuracin del servidor est" en NetcNapache)Napache).conf. &tras confiuraciones 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 confiuraciones 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 confiuracin de ,pache. 4e servir" de ayuda puesto que la mayora de los archivos de
confiuracin funcionan e2actamente iual y las variables de confiuracin 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 siuiente paso es %nstalar P#P. 0a versin actual en el momento de escribir este artculo es la (, que se instalara con
el siuiente 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 lueo un "start".
0leado 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. , alunas
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 prorama .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 siuientes lneas de cdio.
<?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 confiuraciones 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
prorama 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
comando-
s"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 cdio indicado, podemos acceder a l desde un naveador
con una I90 como esta-
http://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 imaen anterior, es que has podido instalar P#P
en correctas condiciones.
*'0'4'( aso 0? )nstalar mdulo H4(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 tenas 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 comando-
apt-cache search php2
Podr"s encontrar el listado de e2tensiones de P#P disponibles en los repositorios, puedes eleir aquellos que desees e
instalarlos con la lnea-
apt-+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 tenan 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
5euramente aradecer"s contar con una copia de PhpMy,dmin para estionar tus bases de datos My5D0. Para ello
puedes invocar el comando-
apt-+et install php%yad%in
Rer"s a continuacin una serie de preuntas, como tu servidor 3eb. Ina vez instalado puedes acceder al estor por
medio de una I90 como esta-
http://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 proramar dichos sitios un editor para
proramadores 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 proramas, 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 confiuracin de tu ,pache en 0inu2 de una manera muy pr"ctica para tu servidor de desarrollo, te
aconse!amos la lectura del artculo Confiuracin 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 aradecidas. 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 reistros 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 reistros son
cataloados 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 cataloarse 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 prorama 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 siuiente- mysql.
0leados 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 inls 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 Descripcin
4how databases8
3uestra el con,unto de bases de datos
presentes en el ser-idor
9se nombre:de:la:base
Determina la base de datos sobre la 1ue -amos
a traba,ar
+reate Database
nombre:de:la:base8
+rea una nue-a bd con el nombre especi&icado
Drop Database
nombre:de:la:base8
Elimina la base de datos del nombre
especi&icado
4how tables8
3uestra las tablas presentes en la base de
datos actual
Describe
nombre:de:la:tabla8
Describe los campos 1ue componen la tabla
Drop #able
nombre:de:la:tabla8
;orra la tabla de la base de datos
(oad Data (ocal "n&ile
<archi-o.t.t< "nto #able
+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
tabulaciones todos los campos de un mismo
registro.
5uit 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 confiurado 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 eliiendo la opcin e2portar. Ina ventana de dialoo aparecer" en la que eleiremos
uardar el archivo en tipo te2to. 6l paso siuiente ser" eleir 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 proramas en P#P o Perl ya e2istentes y descarables en la red. 6l m"s popular sin duda es
php(y#dmin. 6ste tipo de scripts son e!ecutados desde un naveador y pueden ser por tanto alberados 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 My5qlManaer.
5e trata de una interface 3indo3s, m"s aradable 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 ''-.
/escarar archivos de http-NN333.php.netNdo3nloads.php$v(
5e recomienda ba!ar los archivos P#P (.).' zip pac:ae y las e2tensiones adicionales P6C0 P6C0 (.).' >in+) binaries
'. Crear directorio en C-P#P y e2traer los archivos de ph (.)'zip pac:ae 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 siuientes variables
shortSopenSta V &n
e2tensionSdir V "c-phpe2t"
ci.forceSredirect V *
G. Copiar php.ini a c-3indo3s o c-3innt
(. 9eistrar la /00 resvr+) php(activescript.dll
H. ,rear 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. Confiuracin 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. Confiurando 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 codio siuiente 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
Eplicamos 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 cdio #4M0 y, como para cualquier otro tipo de lenua!e
incluido en un cdio #4M0, en P#P necesitamos especificar cu"les son las partes constitutivas del cdio escritas en
este lenua!e. 6sto se hace, como en otros casos, delimitando nuestro cdio por etiquetas. Podemos utilizar distintos
modelos de etiquetas en funcin de nuestras preferencias y costumbres. #ay que tener sin embaro en cuenta que no
necesariamente todas est"n confiuradas 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 tenan el valor de traba!ar con Mront Pae ya que,
usando cualquier otro tipo de etiqueta, corremos el rieso de que la aplicacin nos la borre sin m"s debido a que se trata
de un cdio incomprensible para ella.
6l modo de funcionamiento de una p"ina P#P, a randes rasos, 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 naveador va a encararse de interpretar y e!ecutar todo aquello que se encuentre entre las etiquetas
correspondientes al lenua!e P#P. 6l resto, lo enviara sin m"s ya que, asumir" que se trata de cdio #4M0
absolutamente comprensible por el naveador.
&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 cdio 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 inorar ya que no va diriido a l sino a nosotros mismos. 0os
comentarios tienen una ran utilidad ya que es muy f"cil olvidarse del funcionamiento de un script proramado un
tiempo atr"s y resulta muy 7til si queremos hacer r"pidamente comprensible nuestro cdio 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 llear". &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 inorado por el servidor. 9esulta
importante acostumbrarse a de!ar comentarios, es alo que se aradece 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 lenua!es de
proramacin. ,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 contena, una variable puede ser considerada de uno u otro tipo-
Dariables numricas
7lmacenan ci&ras
Enteros =entero>2??28 )umeros sin decimales
Real =real>@.%4%$A8 )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
7rra!s 4on las -ariables 1ue guardan las tablas
=sentidoD%E><-er<8
=sentidoD2E><tocar<8
=sentidoD@E><oir<8
=sentidoD4E><gusto<8
=sentidoD$E><oler<8
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 lenua!es, P#P posee una ran fle2ibilidad a la hora de operar con variables. 6n efecto, cuando
definimos una variable asin"ndole un valor, el ordenador le atribuye un tipo. 5i por e!emplo definimos una variable
entre comillas, la variable ser" considerada de tipo cadena-
8*aria5leG"2"; //esto es "na cadena
5in embaro 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 siue 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 encara durante la e!ecucin de interpretar el tipo de variable necesario
para el buen funcionamiento del prorama.
5in embaro, 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 asinar variables por referencia. 6n ese caso no se les asina un valor, sino otra variable, de
tal modo que las dos varialbles comparten espacio en memoria para el mismo dato.
0a notacin para asinar 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". ,lo 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 asinemos a la
variable. ,simismo, se encara de actualizar autom"ticamente el tipo de la variable cada vez que le asinamos un nuevo
valor.
Por ello, para cambiar el tipo de una variable simplemente le asinamos un valor con un nuevo tipo.
-ota" 5e e2cluyen en este caso el cambio de variables a tipo ,rray porque la sinta2is puede resultar ambiua al e2presar ese cdio, es
decir, puede darse el caso de que una lnea de cdio pueda sinificar 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-
` "inteer"
` "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 lenua!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, KinteerL P fuerza a entero KinteerL
` KrealL, KdoubleL, KfloatL P fuerza a doble KdoubleL
` KstrinL P fuerza a cadena KstrinL
` 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 lenua!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
nin7n 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, alunas sin utilidad aparente y otras realmente interesantes y con una
aplicacin directa para nuestro sitio 3eb. ,qu os enumeramos alunas de estas variables y la informacin que nos
aportan-
Dariable Descripcin
=0##/:94ER:7FE
)#
)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
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.
=0##/:7++E/#:(
7)F97FE
)os de-uel-e la o las abre-iaciones de la lengua
considerada como principal por el na-egador. Esta
lengua o lenguas principales pueden ser elegidas en el
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.
=0##/:REGERER
)os indica la 9R( desde la cual el internauta ha tenido
acceso a la p2gina. 3u! interesante para generar
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.
=0##/:FE#:H7R4
4e trata de un arra! 1ue almacena los nombres !
contenidos de las -ariables en-iadas al script por 9R( o
por &ormularios FE#
=0##/:/I4#:H7R4
4e trata de un arra! 1ue almacena los nombres !
contenidos de las -ariables en-iadas al script por medio
de un &ormulario /I4#
=0##/:+IIJ"E:H7
R4
4e trata de un arra! 1ue almacena los nombres !
contenidos de las cooKies. Heremos 1uC son m2s
adelante.
=/0/:79#0:94ER
7lmacena la -ariable usuario cuando se e&ectBa la
entrada a p2ginas de acceso restringido. +ombinado
con =/0/:79#0:/W resulta ideal para controlar el
acceso a las p2ginas internas del sitio.
=/0/:79#0:/W
7lmacena la -ariable password cuando se e&ectBa la
entrada a p2ginas de acceso restringido. +ombinado
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, alunas de ellas han de ser previamente activadas o definidas por medio de al7n 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 superlobales 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 reisterSlonSarrays.
0a lista de estas variables, e2trada directamente de la documentacin de P#P es la siuiente-
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"loa a la antiua matriz \#44PS569R69SR,95 Kla cual est" todava disponible, aunque no se useL.
/01.'
Rariables proporcionadas al script por medio de #44P @64. ,n"loa a la antiua 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"loa a la antiua 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"loa a la antiua 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"loa a la antiua 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"loa a la antiua 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
confiuracin variablesSorder. 6sta matriz no tiene un an"loo en versiones anteriores a P#P G.'.*. Rea tambin
importSrequestSvariablesKL.
/0%.%%*2-
Rariables reistradas en la sesin del script. ,n"loa a la antiua 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
Eplicamos con detalle el mbito de eistencia de una variable en PHP y distinguimos entre variables
globales y locales.
6n cualquier lenua!e de proramacin las variables tienen un "mbito, que es el luar o luares 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 luar 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 cdio, 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 aluno.
,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 cdio, para evitar que se pueda
prestar a confusin el hecho de usar dentro de una funcin una variable que no ha sido declarada por nin7n 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 aluna
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 siuientes-
(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 luar 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.
5uponamos que tenemos esta declaracin de variables lobales a la p"ina, es decir, fuera de cualquier funcin-
8%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 cdio-
f"nction %if"ncion()Q
//estoy dentro de la f"nciRnE para aceder a las *aria5les "tiliSo 8@TNAS
echo 8@TNAS?"%i*aria5le"B;
echo 8@TNAS?"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" seuida 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 haamos 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 lenua!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 alunos 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 4uma
( Resta
J 3ultiplicaci*n
5 Di-isi*n
K
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 L
Er I
M )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
NN=-ariable
Reduce de uno el -alor de
=-ariable
,'A'4'( Eperadores combinados
Ina forma habitual de modificar el valor de las variables es mediante los operadores combinados-
=-ariable IL %? 4uma %? a =-ariable
=-ariable (L %? Resta %? a =-ariable
=-ariable 'L
<aOado<
+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 cataloado 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
humano-
8sentido?-BG"*er";
8sentido?'BG"tocar";
8sentido?LBG"oir";
8sentido?#BG"+"star";
8sentido?2BG"oler";
6n este caso este array cataloa 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 siuiente 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. Ponamos el
e!emplo siuiente- Dueremos almacenar dentro de una misma tabla el nombre, moneda y lenua 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
proramacin-
<?
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 alunos 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 !uado 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 cdio 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 correirlos o modificarlos meses m"s tarde.
Pasando ya al comentario del prorama, 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 Descripcin
arra!:-alues (mi:arra! (ista los -alores contenidos en mi:arra!
asort(mi:arra! !
arsort(mi:arra!
Irdena por orden al&abCtico directo o in-erso en
&unci*n de los -alores
count(mi:arra! )os da el numero de elementos de nuestro arra!
Ksort(mi:arra! !
Krsort(mi:arra!
Irdena por orden al&abCtico directo o in-erso en
&unci*n de las cla-es
list (=-ariable%6
=-ariable2...>mi:arra!
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
reset(mi:arra! ! end(mi:arra!
)os permiten mo-ernos por dentro del arra! con un
puntero hacia delante6 atras ! al principio ! al &inal.
each(mi:arra!
)os da el -alor ! la cla-e del elemento en el 1ue
nos encontramos ! mue-e al puntero al siguiente
elemento.
/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 eplicacin y un
ejemplo de uso.
Ramos a ver varios e!emplos de traba!o con arrays Karrelos, vectores, matrices o tablas en castellanoL en P#P que
ilustrar"n un poco el funcionamiento de alunas de las funciones de arrays m"s populares que trae consio 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 arrelo tenemos varias funciones. 6ntre ellas, arraySsliceKL la utilizamos
cuando queremos recortar alunas casillas del arrelo, 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 siuiente 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 seundo arraySsliceKL indica que se tomen todos los elementos a partir del ndice ' Kseunda 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 salida-
Miuel
Pepe
.uan
Pepe
.uan
array0shift:;
6sta funcin e2trae el el primer elemento del array y lo devuelve. ,dem"s, acorta la lonitud 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 cdio siuiente 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 seunda del array oriinal
\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 resultado-
0a funcin devuelve- Miuel
Pepe
.uan
.ulio
Pablo
0a funcin devuelve- Pepe
.uan
.ulio
Pablo
unset:;
5e utiliza para destruir una variable dada. 6n el caso de los arrelos, 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 siuiente cdio para conocer cmo definir un array asociativo y eliminar lueo 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 siuiente-
8arcelona PP Cou Camp
9eal Madrid PP 5antiao 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
arrelo.
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 cdio donde se crea un arrelo y se a;aden lueo 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 salida-
0aarti!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 arraySmereKL. , sta se le pasan dos o m"s arrays por
par"metro y devuelve un arrelo con todos los campos de los vectores pasados.
6n este cdio de e!emplo creamos tres arrays y lueo los unimos con la funcin arraySmereKL
<?
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 arraySmereK\tabla, \tabla), \tabla+LZ
foreach K\resultado as \actualL
echo \actual . "WbrY"Z
BY
/a como resultado-
0aarti!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 arrelo por los mtodos habituales de asinar las
nuevas posiciones en el array a las casillas que necesitemos.
6n arrays normales se hara as-
8ta5la G array ("Sa"ce"E"3ino"E"AaranHo");
8ta5la?LBG"Al+arro5o";
6n arrays asociativos-
8estadios$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 cdios 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 strins 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 strins.
Para asinar a una variable un contenido de este tipo, lo escribiremos entre comillas dando luar a declaraciones de este
tipo-
8cadenaG":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 anteriormente-
echo 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 preunta que nos podemos plantear ahora es...ACmo hao entonces para que en vez del valor "((" me sala 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
preunta es tanto m"s interesante cuanto que en alunos de scripts este smbolo debe ser utilizado por una simple razn
comercial Kpao 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 lenua!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
7#ecto en la cadena
t
"ntroduce una tabulaci*n en nuestro
te.to
n +ambiamos de lnea
r Retorno de carro
6stos cambios de lnea y tabulaciones tienen 7nicamente efecto en el cdio y no en el te2to e!ecutado por el naveador.
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 naveador cuando la p"ina
es e!ecutada en el servidor. 0a diferencia entre estos dos elementos puede ser f"cilmente comprendida mirando el
cdio 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 codio fuente del naveador
6l cdio fuente que observaramos seria el siuiente-
<<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 suriendo, es complementada con las funciones de propia cosecha dando como resultado un sinfn
de recursos que son aplicados por una simple llamada.
0as funciones interadas 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 lieramente m"s complicado, pero que resulta sin luar 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 proramas.
,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 siuiente forma-
8tit"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 naveadores.
Por supuesto, la funcin ha de ser definida dentro del script ya que no se encuentra interada en P#P sino que la hemos
creado nosotros. 6sto en realidad no pone ninuna pea 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 include-
requireK"libreria.php"L o includeK"libreria.php"L
6n resumen, la cosa quedara as-
4endramos un archivo libreria.php como siue
<?
//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 codio fuente del naveador
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 correirlas o modificarlas, nos
permite tambin carar 7nicamente el tipo de funcin que necesitamos para el script sin recarar 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 enseuida 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 aluna de las e2istentes para alierar nuestro traba!o.
,s, por e!emplo, e2iste una funcin llamada header que crea un encabezado #4M0 confiurable 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 proramador puede en alunos 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 llear 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,
seuido de el sino "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 tena.
<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. 0ueo, dentro del bucle,
se imprime cada car"cter separado del sino "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 sino "P" Kqueremos conseuir "hPoPlPa" y si no estuviera el
if obtendramos "hPoPlPaP"L.
6n el cdio 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 alunos 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 ninuno. , 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 oriinal no se ve afectada por ese cambio. Puede que se vea me!or con un
e!emplo-
f"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 resultado-
hola
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 oriinal.
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
contenan un dato predefinido, con el que se inicializar"n si no se le pasa nin7n valor en la llamada de la funcin. 0os
valores por defecto se definen asinando 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 asinados por defecto-
pordefecto () // 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 obliados 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
seunda, 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 asinar 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 proramacin e2ie 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
lenua!es. 6n este captulo describiremos someramente alunas 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 prorama, lleado 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 siuiente-
if (condiciRn)
Q
)nstr"cciRn -;
)nstr"cciRn ';
...
U
else
Q
)nstr"cciRn A;
)nstr"cciRn N;
...
U
0leados a este punto, el prorama 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 nero
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 siuiente tipo-
if (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 lieramente la sinta2is que acabamos de ver-
if (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. Ponamos un e!emplo sencillo de utilizacin de
condiciones. 6l siuiente prorama permitira detectar la lenua empleada por el naveador y visualizar un mensa!e en
dicha lenua.
<<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 naveador.
Para leer la lenua aceptada por el naveador lo que hacemos es definir una variable KidiomaL y, mediante la funcin
substr, recoemos las dos primeras letras del cdio correspondiente al idioma aceptado por el naveador
K\#44PS,CC6P4S0,C@I,@6L.
0a tercera parte de script se encara de ver si el naveador est" en espa;ol KesL, francs KfrL o en cualquier otro idioma
que no sea ninuno 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 iual "VV" en luar de un simple "V". 6ste 7ltimo
queda reservado e2clusivamente para asinar 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
proramas 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 siuiente.
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. ,lo 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 siuiente 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 cdio #4M0 en el que la etiqueta font y el mensa!e
que contiene varan a medida que si!e cambia su valor.
6l siuiente 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 lonitud de la cadena que se le pase por
par"metro.
int strlen Kstrin cadL
/evuelve un entero iual a la lonitud 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
lonitud de la cadema. 5i se sali por llear al final de la cadena, la variable \i valdr" lo mismo que la lonitud en
caracteres de esa cadena. 6n el condicional simplemente se comprueba si \i vale o no lo mismo que la lonitud 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 siuiente-
do
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 siuiente 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%. Eplicamos como salir de un bucle, 7rea8 y
continue
6ste es el seundo 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 encara 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 respectivamente-
P%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 cataloados por claves.
0a estructura eneral es la siuiente-
Voreach (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 siuiente 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 encarara 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 forma-
V"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 siuiente. Pueden resultarnos muy pr"cticas en alunas situaciones.
/urante una iteracin de un bucle podemos saltar directamente a la siuiente iteracin, sin seuir 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 siuientes que pudiera haber.
+eferencia" 5i deseas ver la construccin de un bucle for y otros tipos de bucles, en vdeo te recomendamos el siuiente 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 embaro, 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 reulados por un lenua!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
asinado por el script de orien-
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 siuiente-
<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 lenua!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
confiuracin de P#P- reisterSlobals, 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 nin7n tipo de cdioL 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 recoer variables con este array asociativo o utilizar directamente las variables que se definen en nuestra p"ina,
resulta m"s seuro utilizar \#44PS@64SR,95 por dos razones, la primera que as nos aseuramos que esa varible viene realmente de
la I90 y la seunda, que as nuestro cdio 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 alunos 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 sino "[" no puede fiurar tampoco en una I90. ,s pues, tenemos que hacer alo
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 alunos 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 recoidas en una seunda 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
confiuracin de P#P- reisterSlobals, 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--QE<-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 recoer variables con este array asociativo o utilizar directamente las variables que se definen en nuestra p"ina,
resulta m"s seuro utilizar \#44PSP&54SR,95 por dos razones, la primera que as nos aseuramos que esa varible viene realmente de
un formulario y la seunda, que as nuestro cdio ser" m"s claro cuando lo volvamos a leer, porque quedar" especificado que esa
variable estamos recibindola por un formulario.
C'*'*'( GQE<-
, partir de P#P G.'.* se pueden recoer 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 nin7n cdio P#P, simplemente tiene un formulario. Mi!monos en el action del formulario, que
est" diriido 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 cdio es el siuiente-
<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 cdio tampoco resulte e2tra;o. 5implemente se recibe la edad, utilizando el array \SP&54.
0ueo 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 neativo
Kmayor o iual 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 alunos conceptos de proramacin b"sicos, orientados a personas que no saben
proramacin o que tienen poca e2periencia proramando. 6s la tercera de una serie de tres clases ratuitas impartidas
en /esarrollo>eb.com para acercarse al mundo de la proramacin con P#P.
6l ob!etivo es concretar en lneas de cdio, y desde un punto de vista pr"ctico, alunos de los conceptos vistos durante
las dos primeras clases de P#P para noPproramadores, como son las variables, estructuras de control para la toma de
decisin y para hacer bucles o repeticiones. ,dem"s, queremos realizar al7n 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 proramacin de una manera
r"pida y dar referencias para seuir aprendiendo, as como presentar tambin la seunda convocatoria del Curso de P#P
que estamos oranizando en .scuela*'.
6n este artculo encontrar"s los cdios de los e!ercicios realizados en clase y al final del todo, el vdeo de la propia
clase, !unto con el turno de preuntas que nos realizaron los estudiantes.
Comenzamos la clase e2plicando cmo arrancar un servidor 3eb para poder proramar con P#P en local, por si aluien
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 proramacin y del lenua!e P#P, en este e!emplo se
mostraron en cdio conceptos b"sicos de la proramacin.
'. Comentarios
). Rariables y tipos
+. &peradores, aritmticos, de cadena, comparacin, asinacin
G. 6structuras de control para toma de decisiones
(. 8ucles
6l listado de cdio que se realiz en directo es el siuiente-
<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 seundo 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 se7n 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 aluna ocasin. 6l cdio de la p"ina con el formulario #4M0 que realizamos es el siuiente-
<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
interar cdio 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 cdio anteriores, paso
por paso, a lo laro de F* minutos. 6speramos que os sirva para aclarar muchos conceptos y tambin que os resulte
entretenido.
9ecuerda que puedes seuir 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 recoer 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
cdios ordenados.
6n ambos casos, para formularios o envo de datos por la I90, se debe seuir un esquema como este-
P 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 teno que procesar el formulario o las variables de la I90
Para un formulario
Reamos a continuacin como sera el cdio 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 alo 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 cdio 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 seundo 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> <title>Ta5las de %"ltiplicar</title>
</head>
<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 cdio 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 siue iual 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 alo 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 alo 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. Eplicamos en qu# consisten estas c#lebres galletas y describimos
su empleo y utilidad.
5in duda este trmino resultara familiar para muchos. ,lunos lo habr"n ledo u odo pero no saben de qu se trata.
&tros sin embaro 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 naveador 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 naveador una vez ste visita el sitio por seunda vez y
as, en funcin del perfil del cliente dado en su primera visita, el sitio puede adaptarse din"micamente a sus preferencias
Klenua 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:ie-
setcoo;ie("no%5re$de$la$coo;ie"E*alorEexpiracion);
Ponamos un e!emplo sencillo. %mainemos que queremos introducir en una variable coo:ie el nombre del visitante. 6l
nombre ha podido ser previamente recoido por un formulario tal y como hemos visto-
setcoo;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 seundos sumado a un a;o en
seundosL.
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
antiua. /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 embaro de no definir variables en nuestro script con el mismo nombre que las coo:ies
puesto que P#P privileiar" 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 naveadores las aceptan y por otra, se puede deliberadamente impedir al naveador 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 siuiente 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
Eplicaciones 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 alunas claves interesantes sobre este asunto en el artculo utilizacin de cookies, anterior
entrea del temario de /esarrollo>eb.com sobre la proramacin 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 naveador 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
naveador 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 obliatorio 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 seundos 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 seuroL.
%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 lenua!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 naveador del usuario y si es false indica que no ha podido colocarla en el sistema. Pero este valor
no indica que lueo el visitante la haya aceptado o no, puesto que el naveador puede haberlo confiurado para no
aceptar coo:ies y esto no lo puede detectar setcoo:ieKL directamente.
Por e!emplo, estas seran diferentes llamadas a setcoo:ieKL-
setcoo;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 naveador 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 naveador 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 valor-
8$&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 proramas 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 naveadores 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 naveador del cliente.
Cos resulta pues necesario el poder declarar ciertas variables que puedan ser reutilizadas tantas veces como queramos
dentro de una misma sesin. %mainemos un sitio multilinde 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
lenua del naveador 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 naveando 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 laro 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 prolonado o bien, sencillamente, cierra el naveador.
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 luar simult"neamente. 6stas sesiones tienen adem"s su propio identificador de sesin que ser" 7nico y
especfico.
,lunas 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 proramadores de
P#P+ la diferencia mayor es que est"n obliados a estionar ellos mismos las sesiones definir sus propios
identificadores de sesin.
Reamos en el siuiente 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.
/iamos 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 !ueo 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 propaa a travs de la I90. 6sto se puede
confiurar 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 siuiente funcin-
session0start :;
%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 tena 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 rieso de recibir un error, porque al iniciar la sesin se deben leer las coo:ies del usuario, alo 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 siuiente 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 modo-
8$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 reistrar cada variable
por separado con la funcin sessionSreisterKL, envi"ndo por par"metro los nombres de las variables de sesin que desea utilizar desde
P#P.
62isten otras dos confiuraciones del php.ini que afectan al traba!o con variables de sesin, que son trac:Svars y
reisterSlobals. Por defecto trac:Svars est" activado y reisterSlobals est" desactivado. 6ste es el caso normal y el
que suponemos tendr" el servidor donde prorames, pero si esas variables cambian podra cambiar aluna cosita, como
que las variables se tenan que reistrar e2plcitamente con sessionSreisterKL.
6!emplo de cdio 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. 0ueo podremos definir
variables de sesin en culquier luar del cdio 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 cdio hemos inicializado la sesin y lueo en cualquier parte del cdio 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- Cotice-
Indefined 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 siuiente 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 antiuas.
#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 distintas-
P/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 recaramos 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 encara 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 Descripcin
4ession:id( )os de-uel-e el identi&icador de la sesi*n
4ession:destro!(
Da por abandonada la sesi*n eliminando -ariables e
identi&icador.
4ession:unregister(Q-ariabl
eQ
7bandona una -ariable sesi*n
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 oranizarlos, actualizarlos y buscarlos de
una manera mucho m"s simple.
6l lenua!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 cdio 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 !ueos 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"loo a partir de un idioma universal- 5D0 K5tructured Duery 0anuaeL el cual es com7n a
todas las bases de datos. 6ste lenua!e resulta, como veremos en el tutorial de %&L, muy potente y f"cil de aprender. ,
lo laro 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 lenua!e de acceso a datos.
Como base e!emplo de estos captulos hemos eleido 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 seuir" 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 siuientes
operaciones-
P%ntroducidos dentro de My5D0, crearemos la base de datos e!emplo con la siuiente sentencia-
create 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 siuiente sentencia-
create 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 descarado au$.
6'&'*'( /uin de art$culos relativos a las bases de datos en H
, lo laro 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, siuiendo el siuiente uin-
%nsercin de reistros
5eleccin de reistros
,ctualizacin de reistros
8orrado de reistros
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.
71
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 Painacin
de resultados con P#P y My5D0, Proramar 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 siuiente sea llenarla con reistros. Para ello
vamos a ver este artculo, en el que se reciben datos desde un formulario y lueo se insertan con P#P en la base de
datos, en la tabla adecuada.
0os datos del reistro pueden ser recoidos, por e!emplo, a partir de un formulario. ,qu os proponemos un simple
documento #4M0 que recoe los datos y los enva a una p"ina P#P que se encara 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!>
0leados a la p"ina destino del formulario Kinsertar"phpL, lo primero que habr" que hacer es establecer un vnculo entre
el prorama y la base de datos. 6sta cone2in se lleva a cabo con la funcin mysql#connect. , continuacin, deberemos
enerar una orden de insercin del reistro en lenua!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 prorama avisa de la introduccin del reistro 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 reistros, 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, oranizada por tablas, la seleccin de una tabla entera o de un cierto numero de reistros
resulta una operacin rutinaria.
,qu os mostramos una forma bastante cl"sica de mostrar en pantalla a partir de un bucle los reistros 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 reistro- Cone2in a la base y e!ecucin de la
sentencia. 6sta vez, la informacin de dicha e!ecucin ser" almacenada en una variable KresultL.
6l siuiente paso ser" plasmar en pantalla la informacin recoida en \result. 6sto lo haremos mediante la funcin
mysql#fetch#array que devuelve una variable array con los contenidos de un reistro a la vez que se posiciona sobre el
siuiente. 6l bucle while nos permite leer e imprimir secuencialmente cada uno de los reistros.
0a funcin mysql#free#result se encara 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
Eplicamos cmo modificar o actuali!ar un registro eistente 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 reistro 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 recoidos 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 despleable 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 despleable 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 lenua!e 5D0, recomendamos leer el
artculo ,ctualizacin de reistros 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 embaro, para afianzar
estos conocimientos recomendamos ver el vdeo sobre la actualizacin de reistros 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 reistro. Para hacerlo,
5D0 nos propone sentencias del tipo Delete. Re"moslo con un e!emplo aplicado a nuestra aenda.
Cabe se;alar que primero debemos seleccionar el reistro que se desea borrar y lueo realizar el borrado propiamente
dicho. Para ello crearemos un men7 despleable din"mico, donde se podr" seleccionar el elemento que se desea borrar.
0ueo 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 siuiente 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 alinV"center"Y9eistro 8orradoWNdivYWNh'Y
Wdiv alinV"center"YWa hrefV"lectura.php"YRisualizar el contenido de la baseWNaYWNdivY
WN8&/=Y
WN#4M0Y
-ota" Rarios comentarios preuntan por el archivo lectura.php que est" enlazado en el cdio del e!emplo. 4enemos que decir que ese
archivo se coment en el artculo de la 5eleccin y lectura de reistros 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 al7n 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 alunos 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 !ueo 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 antiuas 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 proramacin 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 paradima 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" ninuna 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 prorama, o puedas
tener al7n problema determinado, sino m"s bien es una cuestin de estilo y claridad a la hora de mantener el cdio 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 antiuas, usando
tambin cdio por procedimientos. 5in embaro, como ver"s a continuacin, las funciones son pr"cticamente las
mismas a las que se les ha areado 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" mysli0connect:;
,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" mysli0close:;
4enemos que pasarle como par"metro siempre el ob!eto que obtuvimos al iniciar la cone2in.
%ys,li$close(8conexion);
.jecutar una consulta" mysli0uery:;
6sta funcin es e2actamente iual, aunque en este caso recibe obliatoriamente como primer par"metro el ob!eto de
cone2in a la base de datos que recibimos al conectarnos. 6l seundo 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 reistros en
el caso de un "select".
.=traer un registro del conjunto de resultados" mysli0fetch0array:;
6sta funcin es e2actamente iual, recibe el con!unto de resultados del que queremos sacar un reistro. /evuelve en
este caso un "array", pero est" iualmente mysqliSfetchSob!ectKL que devolvera un ob!eto.
8fila G %ys,li$fetch$array(8res"ltado);
3ontar el n<mero de filas de un resultado" mysli0num0rows:;
4ambin es e2actamente iual, simplemente le pasamos el ob!eto con!unto de reistros del que queremos saber el
n7mero de filas o reistros 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 al7n par"metro suelto aqu y all.
Creo que el paso para usar las nuevas funciones My5D0 es tan r"pido que no tiene sentido seuir usando las funciones
antiuas y adem"s en breve el cambio ser" obliado porque los accesos antiuos 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, proramada 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 aluna ocasin, aunque pretendo dar alunas claves y truquillos que pueden ayudar a
todos, tenan 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 luar 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 aluien 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 alo similar, que cuela 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 preunta 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, seuido 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 escribiendo-
http-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, seuido del nombre del directorio y el nombre del archivo. Por e!emplo, si
creamos un subdirectorio llamado painas y tenemos dentro un archivo llamado pa'.php, podramos acceder a l de la
siuiente manera.
http-NN333.midominio.comNpainasNpa'.php
+eferencia"hay otro concepto interesante que deberamos conocer lleados a este punto, que es el "documento por defecto". aste no es
m"s que el archivo que se enva al naveador si en la I90 accedida no se especificaba nin7n archivo. 5uele llamarse inde2.html o
inde2.php Ko inde2.asp si nuestro servidor soporta proramacin 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 alo m"s sobre el tema de colocar los archivos, quera se;alar que cualquier cosa que ponamos fuera del
directorio de publicacin no podr" ser accedida a travs del naveador. 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 ninuna 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 naveador 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 embaro, colocar alunos contenidos fuera del directorio de publicacin puede ser muy 7til. Por e!emplo,
podramos colocar all copias de seuridad de alunos archivos o documentos que simplemente queremos uardar en el
servidor para acceder a ellos desde cualquier parte y con nuestro prorama 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 proramas trozos de cdio 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 cdio 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 luar 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. 5euramente, si los e!ecutamos por separado no mostraran
nin7n resultado v"lido, incluso podran dar mensa!es de error. Por esta razn merece la pena colocarlos en un luar
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 tenamos 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 naveador y se deberan e!ecutar perfectamente. ,unque cabe se;alar que, tanto P#P como
el servidor donde traba!emos, pueden tener confiuraciones distintas y puede que al7n detalle de la proramacin de
nuestras p"inas no funcione correctamente.
Por e!emplo, nuestro P#P puede declarar o no autom"ticamente las variables que llean a travs de un formulario. 5i en
local si que estaba confiurado para hacer esto y en remoto no, deberamos localizar los luares donde recoemos 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 confiurando el sistema o indicando los pasos a seuir para solventar en nuestros scripts el asunto.
3omentario" el siuiente 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 enloban tanto dentro del Manual de
P#P como del 4aller de My5D0. Por ello, ser" importante disponer de conocimientos de ambas tecnoloas 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 cdio P#P. Para subirla
tendremos que utilizar otros mecanismos. Roy a distinuir 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 al7n 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 miracin 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 siuientes-
Php(y#dmin . Ina aplicacin creada en P#P que podemos instalar en nuestro espacio de alo!amiento para
administrar la base de datos.
(ysl 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 prorama.
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, eliiremos 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 contena 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 aluna 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 aluna 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 naveador se
descarar" 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 forma-
I --------------------------------------------------------
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 a"to$incre%entE
id$artic"lo int(#) (:VA9T =1= ATT A9E
co%entario text ATT A9E
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 (:VA9T =1= ATT A9E
re*isado tinyint(-) (:VA9T =1= ATT A9E
no%5re$co%entario *archar(-11) (:VA9T =Ao%5re no especificado= ATT A9E
e%ail$co%entario *archar(-11) (:VA9T =:%ail sin especificar= ATT A9E
tipo tinyint(-) "nsi+ned (:VA9T =-= ATT A9E
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 contena. 5i deseamos
subir tambin la informacin de la base de datos entonces debemos utilizar otras estrateias, 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 orien no es My5D0 estaramos hablando de una miracin 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 reistros que contiene.
Para ello podemos utilizar mysqldump, se7n se relata en este artculo, o bien PhpMy,dmin, seleccionando la opcin
que indica que el bac:up contena la estructura y los datos K5tructure and data en versiones en inlsL.
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, seuramente dispona y nos indique al7n mecanismo para realizar la tarea
sin luar a errores. Puede ocurrinos con al7n proveedor que nos dia que se encara de todo pero nos e2i!a el pao 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 tenamos 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 miracin 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 estrateia un poco.
0a idea en este 7ltimo caso es instalar My5D0 en local y realizar la miracin desde ,ccess en local a My5D0 en local
y lueo 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 seuro que utilizando el propio ,ccess de puente podramos realizar el traba!o. Primero e2portando de 5D0
5erver a ,cess y lueo desde ,ccess a My5D0.
3'A','( Etras bases de datos u otras tcnicas
5i la base de datos orien 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 oriinal no tiene driver &/8C, o bien no nos funciona correctamente el
proceso y no sabemos cmo arrelarlo, otra posibilidad es e2portar los datos a ficheros de te2to, separados por comas o
alo parecido. Muchas bases de datos tienen herramientas para e2portar los datos de las tablas a ficheros de te2to, los
cuales se pueden lueo introducir en nuestro sistema estor destino KMy5D0L con la ayuda de aluna 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 inlsL.
,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 encarar" 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 miracin tiene que tener en cuenta muy especialmente, como ya se se;al, las maneras que tena 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 alunos datos como pueden ser los campos boleanos, fechas, campos memo Kte2to con
lonitud indeterminadaL, etc, que pueden almacenarse de maneras distintas en cada uno de los sistemas estores, orien
y destino.
6n alunos casos posiblemente tenamos que realizar al7n 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 lenua!e 5D0, a base
de sentencias diriidas contra la base de datos, puede servir para alunas 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 proramacin orientada a ob!etos es una metodoloa de proramacin 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 proramacin orientada a ob!etos permite concebir los proramas de una manera bastante intuitiva y cercana a la
realidad. 0a tendencia es que un mayor n7mero de lenua!es de proramacin adopten la proramacin orientada a
ob!etos como paradima para modelizar los sistemas. Prueba de ello es la nueva versin de P#P K(L, que implanta la
proramacin de ob!etos como metodoloa de desarrollo. 4ambin Microsoft ha dado un vuelco hacia la proramacin
orientada a ob!etos, ya que .C64 dispone de varios lenua!es para proramar y todos orientados a ob!etos.
,s pues, la proramacin 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 lenua!e moderno. 6n este artculo vamos ver alunas nociones sobre
la proramacin 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 proramacin orientada a ob!etos en eneral.
9eferencia- 5e puede acceder a una descripcin de la proramacin 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 proramas.
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 siuiente 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 laro 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 "alo" en la ca!a y lueo 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 cdio "PY".
no%5re$del$o5Heto->no%5re$de$%etodo()
Para acceder a los atributos de una clase tambin se accede con el cdio "PY". /e esta forma-
no%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"alo"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 encaran 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 encara de
inicializar los atributos del ob!eto y realizar cualquier otra tarea de inicializacin que sea necesaria.
Co es obliatorio 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 proramacin 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 ninuno 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 constructor-
f"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, iualando 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 alunos 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 proramacin 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 oriinal.
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 embaro, 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 sinifica volver a codificarlos, es decir, volver a escribir su cdio 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 alunas 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 cdio de ste, lo me!or es llamar al constructor que haba definido en la clase Ca!a oriinal, con lo que se
inicializar"n todos los datos de la clase base, y lueo realizar la inicializacin para los atributos de la propia clase
e2tendida.
Para llamar a un mtodo de la clase padre dentro del cdio de un mtodo que estamos redefiniendo, utilizamos una
sinta2is como esta-
f"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". 0ueo 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 cdio quedara como siue-
f"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 H0 8 H4' 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 lleada de P#P( vino empare!ada de una reestructuracin del Core de P#P, lo que los creadores de P#P llama <end
6nine.
,s como el le!ano P#P+ incluye su <end 6nine *.(, y P#PG el <end 6nine '.*, tenemos <end 6nine ).* 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 ,loK\pL e
\personaPYsetCombreK"/aniel"LZ
f
' \persona V ne3 PersonaKLZ
) \personaPYsetCombreK"Pichonol"LZ
+ ,loK\personaLZ
G echo \personaPYetCombreKLZ
BY
&&'&'*'( TCul es el problema en este cdigo corriendo en H0S
6n la lnea ' instanciamos un ob!eto de la clase Persona.
0ueo le decimos que se llama /aniel.
6l error de implementacin viene con la lnea +. 6l arumento \p que recibe ,lo, no es mas que una copia de
\persona, y eso esta M,0. APorqueB, mnimamente por ) razones.
0a primera razn es que esta estrateia es P&&PCo compatible. Claramente cuando hablamos del Paradima &rientado
a &b!etos, estamos casi descartando que cada ob!eto sea referenciado por su %dentificador.
5in embaro, el <end 6nine '.* 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 arumento 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 6nine '.* 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 ,lo recibe una copia Kun clonL del ob!eto Persona.
0a seunda razn viene empare!ada con la primera, siendo consecuencia de esta.
Cualquier modificacin del ob!eto Persona que se produzca dentro del mtodo ,lo, 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 ,lo 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 \personaPYetCombreKL.
6n nuestro bro3ser veremos "Pichonol".
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 arumentos 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 loran en P#PG y como se loran en P#P(. ,dem"s de e2plicar
profundamente las diferencias en el modelo de ob!etos nos quedan temas pendientes como &pciones de confiuracin
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 !uean a su favor o en contra se7n la situacin en la que se encuentre.
&&'&','( TCual es mi escenarioS
6n el momento de plantearse la preunta, el desarrollador seuramente se ubicar" en aluno 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 cdio 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 eleir P#P para traba!ar en nuestro
proyecto es la ran cantidad de cdio que podemos encontrar en %nternet, y utilizarlo para nuestros traba!os. 4enemos
una ran probabilidad de que ante aluna tarea que se nos plantea, podamos encontrar al7n script que nos solucione la
vida, obviamente adapt"ndolo a nuestras necesidades.
,hora bien, no todo el cdio que vamos a encontrar es compatible con P#P(. /e hecho la ran mayora todava no se
ha adaptado. 6s cierto que con al7n settin en nuestro php.ini podemos ayudar a darle mayor compatibilidad, pero
como contrapartida muchas de estas settins se eliminaran en P#PH.
ADu quedaB #acerlo compatible modificando el cdio, 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 interroantes que el desarrollador se puede plantear podran ser-
P 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 lica de neociosB
Pasemos a discutir venta!as y desventa!as en cada uno de los interroantes-
&&'&'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
6nine 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 estrateias 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 estrateia 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 oblio 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 cdio, 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
sobrecara de e!ecucin en detrimento de la performance.
Como contrapartida, P#P( nos da la posibilidad de sacarle el mayor !uo 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 cdio.
,hora bien, Aque tan costosa es esta reescrituraB /epender" de nuestra estrateia 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,
seuramente el hecho de pensar en mirar 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 preunta que sure 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 proramadores 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 seunda 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 metodoloa de desarrollo incremental Ksoft3are versionadoL, lo ideal es utilizar lo
7ltimo que nos proporciona nuestra plataforma de proramacin. @eneralmente lo que se busca es un cambio radual,
modular, y sostenido.
Por otro lado, si nuestras aplicaciones residen en produccin sin mayores modificaciones Kal7n proceso batch, aluna
aplicacin depurada, al7n aloritmo estableL y estamos conformes con su funcionamiento, quiz"s no sea de nuestro
inters mirar 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 naveador que una
p"ina no e2iste. 6s sencillo enviar por las cabeceras del http un error G*G, pero hay que aseurarse que el cdio de
error est bien enviado para no dar informaciones ambiuas a los clientes que se conecten al servidor.
6sto es importante porque el cdio G*G tambin sirve a los buscadores o motores de b7squeda, para informar que una
p"ina no e2iste. 5i damos informaciones ambiuas a los buscadores puede que redunde neativamente en la
clasificacin de nuestro sitio.
6l problema que queremos comentar ahora es el tpico error "G*G &U". 6sto es una ambidedad- 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 alo que se puede evitar enviando el error correctamente en la cabecera del #44P.
Para enviar un cdio de error G*G por las cabeceras del #44P con P#P tenemos que hacer lo siuiente-
<?
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 ninuna informacin al naveador.
Pero dependiendo de la confiuracin 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 prorama que nos muestre las
cabeceras que se eneran tanto en el cliente como en el servidor. 62isten varios proramas 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 alunas ocasiones enviando esta cabecera el naveador recibe un cdio de error como este-
#44PN'.2 G*G &U
6so es alo que tenemos que evitar, porque es ambiuo. 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 siuiente para conseuir 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 lueo 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 confiuracin 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 cdio 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 seuros de qu cabeceras tenemos que enviar y qu cdio 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 alunos servidores P#P si enviamos slo esta cabecera-
<?
header("Stat"s: #1# Aot Vo"nd");
?>
Cos enva al naveador el cdio-
#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
lleado al naveador es un )** &U que quiere decir p"ina encontrada y correcta.
6n definitiva, cabe estudiar detalladamente este asunto para aseurarnos 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 lenua!es de proramacin, componentes Khabitualmente ,!a2L, etc. 5u 2ito se debe a
que es una e2celente forma para almacenar informacin que deseamos compartir entre distintos componentes o
lenua!es de las aplicaciones 3eb. 5i traba!amos con ,!a2 y aluno 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 silas sinifican .ava5cript &b!ect Cotation Ken espa;ol Cotacin de &b!etos de .ava5criptL, es un
formato liero, 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 lenua!es de
proramacin 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.orN.
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 lueo podramos desde P#P enviar a .avascript el resultado de validar esos datos en
el servidor. Como la validacin puede ser positiva o neativa, as como puede tener m"s o menos cdios 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 carados con notacin .5&C, por medio de unas
funciones de las que dispone el lenua!e, que e2isten de manera predeterminada en los servidores modernos de P#P y
que se pueden utilizar tambin en instalaciones antiuas de P#P, aunque con al7n 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.
? Pauete @%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 lenua!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". &riinariamente escrita por
Michal Miurs:i, en la actualidad se encuentra disponible dentro del frame3or: P#P P6,9-
http-NNpear.php.netNpac:aeN5ervicesS.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 lieramente 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
antiuos 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 descarar del propio sitio de
P6,9, en la I90 http-NNpear.php.netNpac:aeN5ervicesS.5&C
-ota" #emos publicado en /esarrollo>eb.com en pasados artculos alunas referencias 7tiles para instalar P6,9 y utilizar alunos
componentes de este frame3or: P#P.este frame3or: P#P.
62iste un artculo muy interesante, aunque en inls, 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
lenua!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 prorama para desarrollar otros proramas, Code%niter, por tanto,
es un prorama o aplicacin 3eb desarrollada en P#P para la creacin de cualquier tipo de aplicacin 3eb ba!o P#P. 6s
un producto de cdio libre, libre de uso para cualquier aplicacin.
Como cualquier otro frame3or:, Codeiniter contiene una serie de libreras que sirven para el desarrollo de
aplicaciones 3eb y adem"s propone una manera de desarrollarlas que debemos seuir 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 cdio est oranizado 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 proramacin de aplicaciones, utilizado tanto
para hacer sitios 3eb como proramas tradicionales. 6ste sistema tiene sus caractersticas, que veremos en artculos
siuientes.
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 maia, 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 proramemos de una
manera m"s ordenada y contiene diversas herramientas que ayudan a hacer aplicaciones m"s vers"tiles y seuras.
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 cdio 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
,lunos de los puntos m"s interesantes sobre este frame3or:, sobre todo en comparacin con otros productos similares,
son los siuientes-
)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 confiuracin.
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 alunos antiuos. 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
descarar una versin antiua del frame3or:, como Code%niter R '.O.+, que todava era compatible. 6stas versiones est"n en la p"ina
de descaras de Code%niter.
5acilidad de instalacin- Co es necesario m"s que una cuenta de M4P para subir Code%niter al servidor y su
confiuracin se realiza con apenas la edicin de un archivo, donde debemos escribir cosas como el acceso a la base de
datos. /urante la confiuracin 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 rido que otros frame3or:s. /efine una manera de traba!ar especfica,
pero en muchos de los casos podemos seuirla o no y sus relas de codificacin muchas veces nos las podemos saltar
para traba!ar como m"s a usto encontremos. ,lunos 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 liero, lo que permite que el servidor no se sobrecarue interpretando o
e!ecutando randes porciones de cdio. 0a mayora de los mdulos o clases que ofrece se pueden carar de manera
opcional, slo cuando se van a utilizar realmente.
8ocumentacin tutorializada- 0a documentacin de Code%niter es f"cil de seuir 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 aradece 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 eleido este frame3or: P#P para comenzar un
manual que e2plicar" cmo utilizarlo para desarrollar nuestras propias aplicaciones 3eb. 6n siuientes 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 confiuracin de Code%niter. 4ambin puedes ir al Manual de Codeiniter 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 tecnolico, nos encontramos con situaciones que nos amaran la e2istencia,
como por e!emplo- cuando nuestras 3ebs se caen, inreso 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 Carneie
Mellon Iniversity, y .ohn 0anford de %8M.
.l sistema 3aptcha tiene las siguientes caracter$sticas por definicin"
5on completamente automatizados, es decir, no es necesario nin7n 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 aloritmo 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 muinas y humanos;.
6n este escenario, podramos encontrarnos con dos situaciones bien diferentes-
4ener un sitio montado y tener que proteerlo.
Proramar un sitio desde cero.
6scape de las entradas. Para muchos la manera ideal de proteer un site. Como ya hemos visto en aluno de los casos,
no nos es 7til. 0os m"s habituales son el uso de-
addslashesKL N stripslashesKL
htmlentitiesK\strin, 6C4SDI&465L
htmlspecialcharsKL
mysqlSrealSstrinKL
4eniendo activadas las magic0uotes0gpc 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, Fu! clase de configuracin ser$a la ptima para ue un sistema PHP fuera ms seguro contra todo
tipo de atauesG
6stas directivas seran-
2penbase0dir
6sta directiva bien confiurada 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 desplieuen 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 vena por P2%' o 1.' puede ser
una variable potencialmente pelirosa 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 tena muy claro qu se est" haciendo, el uso de /0+.&6.%', pues ah puede entrar
bcualquier cosab que nos vena e2ternamente, y f"cilmente podran introducirnos valores no esperados.
%afe0mode on
6sta directiva activada evitar" la e!ecucin de alunos 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
aqu-
php.netNmanualNenNfeatures.safePmode.functions.php
6special atencin merecen tambin las directivas gsafeSmode[h que componen la familia.
safe mode-
safeSmodeSid
safeSmodeSincludeSdir
safeSmodeSe2ecSdir
safeSmodeSallo3edSenvSvars
safeSmodeSprotectedSenvSvars
Por 7ltimo, unas funciones que, se7n la casustica de nuestro aplicativo pudiera evitarnos al7n 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 cdio remoto o inyeccin de cdio 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 averiuar las posibles vulnerabilidades o e(ploits que puedan afectar a nuestro sistema y servidor 3eb-
0os m"s conocidos son nmap y nessus. 6l funcionamiento de nmap puede llear a ser sencillo, aunque tiene un
desplieue de opciones que, a buen seuro, mucha ente encontrar" interesante.
Ina e!ecucin de este prorama puede dar luar 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 amiable 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 proteer nuestro site y llear 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 amiable. 0os procesos por los que puede gatacarseh pueden
ser varios y los perfiles de ataque i si se tiene la versin de pao 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 tenan 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 en-
333.infosecinstitute.comNbloN)**(N')NfuzzersPultimatePlist.html
In e!emplo lo podemos tener e!ecutando el >ebMuzzer, con licencia @P0, escrito en C-
Nunzip.altervista.orN.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 al7n 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 siuientes-
(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 licas 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 proteer 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 reularmente 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, alunos 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 proramacin slida, y al7n mdulo destinado a la seuridad har"n de nuestro servidor 3eb una fortaleza KcasiL
ine2punable.
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

También podría gustarte