Top Banner
Manual de PHP http://desarrolloweb.com/manuales/manual-php.html Página 1 de 142
142

Manual de PHP - Walter Carnero · sencillo y directo con el que podrías empezar es PHP. Otra de las claves del éxito de PHP es que la mayoría de los CMS más populares (WordPress,

Jun 14, 2020

Download

Documents

dariahiddleston
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Manual de PHP - Walter Carnero · sencillo y directo con el que podrías empezar es PHP. Otra de las claves del éxito de PHP es que la mayoría de los CMS más populares (WordPress,

Manual de PHP

http://desarrolloweb.com/manuales/manual-php.html Página 1 de 142

Page 2: Manual de PHP - Walter Carnero · sencillo y directo con el que podrías empezar es PHP. Otra de las claves del éxito de PHP es que la mayoría de los CMS más populares (WordPress,

Manual de PHP

http://desarrolloweb.com/manuales/manual-php.html Página 2 de 142

Introducción:ManualdePHP

EnestemanualdePHPcubrimostodoslosaspectosesencialesdellenguajeparacomenzareldesarrollodeaplicacioneswebdelladodelservidor.

ConoceráslosprincipiosbásicosdelaprogramaciónenPHPcomosusintaxis,estructurasdecontrol,etc.Ademásexplorarásunnutridoconjuntodecaracterísticasyfuncionalidades,lasnecesariasparadesarrollarlamayoríadelasaplicaciones,comoelaccesoalabasededatos,elsistemadearchivos,etc.

EsunmanualdePHPdeprincipioafin,asequibletantoparaprogramadorescomoparapersonassinexperienciaenlaprogramación,queasientalosfundamentosbásicosdeestepopularlenguaje,elmásextendidoparaeldesarrollodeaplicacioneswebdelladodelservidor.

Encuentrasestemanualonlineen:http://desarrolloweb.com/manuales/manual-php.html

Page 3: Manual de PHP - Walter Carnero · sencillo y directo con el que podrías empezar es PHP. Otra de las claves del éxito de PHP es que la mayoría de los CMS más populares (WordPress,

Manual de PHP

http://desarrolloweb.com/manuales/manual-php.html Página 3 de 142

Autoresdelmanual

Lassiguientespersonashanparticipadocomoautoresescribiendoartículosdeestemanual.

MiguelAngelAlvarez

MiguelesfundadordeDesarrolloWeb.comylaplataformadeformaciónonlineEscuelaIT.Comenzóenelmundodeldesarrollowebenelaño1997,transformandosuhobbyensutrabajo.

RubénAlvarez

RubénesdoctorenquímicayprogramadoraficionadoconexperienciaenPHP.

BrianHernández

Desarrolladordeappsmultiplataforma.

Page 4: Manual de PHP - Walter Carnero · sencillo y directo con el que podrías empezar es PHP. Otra de las claves del éxito de PHP es que la mayoría de los CMS más populares (WordPress,

Manual de PHP

http://desarrolloweb.com/manuales/manual-php.html Página 4 de 142

QuéesPHP

CapítulosintroductoriosdondehablaremossobreloslenguajesdedesarrollodelladodelservidorengeneralparaexplicarPHPenparticularyqueseentiendacuálessumododefuncionamientoylostiposdecosasquesepuedenhacerconestelenguaje.

IntroducciónalaprogramaciónenPHP

ExplicamossomeramentequéeselPHP,suscaracterísticasprincipalesylosmotivosporlosqueesellenguajedeprogramacióndelladodelservidormásextendidodelaweb.

PHPesellenguajedeladoservidormásextendidoenlaweb.Nacidoen1994,setratadeunlenguajedecreaciónrelativamentereciente,aunqueconlarapidezconlaqueevolucionaInternetparezcaquehaexistidotodalavida.Esunlenguajequehatenidounagranaceptaciónenlacomunidaddedesarrolladores,debidoalapotenciaysimplicidadquelocaracterizan,asícomoalsoportegeneralizadoenlamayoríadelosservidoresdehosting,hastalosmássimplesyeconómicos.

LafacilidaddePHPsebasaenquepermiteembeberpequeñosfragmentosdecódigodentrodeloqueseríaunapáginacomúncreadaconHTML.EsosscriptsPHPnospermitenrealizardeterminadasaccionesdeunaformafácilyeficaz,pudiendorealizartodotipodetareas,delasmássimplesalasmáscomplejas.EstacombinacióndePHPdentrodelmarcodeundocumentoHTMLesloquepermiteadesarrolladoressinprácticamentenadadeexperienciacrearcomportamientosatractivosdeunamanerasencilla,unadelasclavesdeléxitodellenguaje.Enresumen,conPHPescribimosscriptsdentrodelcódigoHTML.ComoyaestamosfamiliarizadosconHTML,empezaradesarrollarconPHPesprácticamenteinmediato.Porotraparte,yesaquídonderesidesumayorinterés,PHPofreceunsinfíndefuncionesparalaexplotacióndetodotipoderecursos,entrelosquedestacanlasbasesdedatos,alasquepodremosaccederdeunamanerallana,sincomplicaciones.

PHPesloquesedenominaunatecnologíadelladodelservidor,queahorasesueleenglobardentrodeltérmino"Backend".ExistendiversoscompetidoresdePHPenelmundoBackendytodostienensuscosasbuenasymalas.Resultaríamuyarriesgadodecirqueunatecnologíaounlenguajeseamejoropeorqueotro,perosípodemosdecirquePHPesellenguajepreferidoporelmayornúmerodeprogramadoresdedicadoseneláreaBackend.ComocompetidoresdePHPpodríamosmencionarASP.NET(oASPtradicional),NodeJS,Ruby,Java,Pythonyunlargoetc.Sinembargo,ennuestraopinión,siloquequieresesdesarrollarpáginasweb,elmássencilloydirectoconelquepodríasempezaresPHP.

OtradelasclavesdeléxitodePHPesquelamayoríadelosCMSmáspopulares(WordPress,Joomla!,Drupal)ylossistemasdecomercioelectrónico(Prestashop,Woocommerce,

Page 5: Manual de PHP - Walter Carnero · sencillo y directo con el que podrías empezar es PHP. Otra de las claves del éxito de PHP es que la mayoría de los CMS más populares (WordPress,

Manual de PHP

http://desarrolloweb.com/manuales/manual-php.html Página 5 de 142

Magento),asícomootroscientosdeherramientas,estándesarrolladosenPHP.Porlotanto,usarPHPessinónimodesercapazdeintroducirteenmuchasherramientasgratuitasydecódigoabiertopararealizarcualquiercosaenelámbitodelaweb.

Nota:Enotroartículomásdetalladopodrásencontrardiversosmotivos,yunvídeo,porlosquedecantarteporaprenderPHPcomolenguajeparaeldesarrollobackend.

AlgunosaspectosfundamentalesdePHP

PHP,aunquemultiplataforma,fueconcebidoinicialmenteparaentornosLinuxyesenestesistemaoperativodondesepuedenaprovecharmejorsusprestaciones.LamayoríadelosservidoresdeInternetyloshostingsoportanPHPsobresistemasoperativosLinux,aunquesinembargo,puedesejecutarPHPencualquierotrosistema,obteniendoelmismosoporteylosresultadosidénticos.EstopermitequepuedasdesarrollarPHPencualquierordenador,independientementedesiusasWindows,LinuxoMac.

ElestilodeprogramaciónconPHPestotalmentelibre.Puedesusartantoprogramaciónestructurada(funciones)comoProgramaciónOrientadaaObjetos(clasesyobjetos).Inclusoalgunascaracterísticasdelaprogramaciónfuncionalestánsiendoincorporadasactualmente.EsporelloquecualquiertipodeprogramadorpuedesentirsecómodoconPHP.

PHPpresentaunafilosofíadecódigoabierto.Existenmultituddeherramientas,librerías,frameworksgratuitosquellevanPHPaunnuevonivel.Ademáselpropionúcleodellenguajetieneunadelasmásnutridascantidadesdefuncionesparahacertodotipodeoperaciones.Nonecesitasinvertirnada,dedinero,paradisponerdeunlenguajepoderosoylosmejorescomplementosparaacelerartutrabajo.

Referenciasinteresantesparacomplementarestemanual

EstemanualdePHPestádestinadoaaquellosquequierencomenzardeceroelaprendizajedeestelenguajeyquebuscanenéllaaplicacióndirectaasuproyectodesitiooalamejoradesuweb.Loscapítulossonextremadamentesimples,buscandoseraccesiblesalamayoríadelaspersonas.MástardesilodeseaspodrásseguirlalecturadeotrosmanualesdentrodeDesarrolloWeb.comparaampliartusconocimientosendistintasáreas.

Laformaenlaquehemosredactadoestemanuallohaceaccesibleacualquierpersonanofamiliarizadaconlaprogramación.AunquesiestucasoaquíenDesarrolloWeb.comtienesunexcelentecursodeprogramaciónenvídeo,enunaseriedeclasesqueimpartimosen2015.Aprenderástodoslosconceptosinicialesquedebesconocerparaafrontarelestudiodecualquierlenguaje,comovariables,tiposdedatos,estructurasdecontrol,funciones,etc.

Siellectorsabeprogramarperotienepocaexperiencia,esposiblequeendeterminadosmomentospuedaverseunpocodesorientado.Nuestroconsejoenesecasoesnoobsesionarseconintentarentendertodoantesdepasaralsiguientecapítulo.Solotratadeasimilaralgunosconceptosypracticarparairobteniendosoltura.Siemprepuedesvolveratrásencuantounadudasurjaocuandohayamosolvidadoalgúndetalle.Nuncavienemalleervariasveceslo

Page 6: Manual de PHP - Walter Carnero · sencillo y directo con el que podrías empezar es PHP. Otra de las claves del éxito de PHP es que la mayoría de los CMS más populares (WordPress,

Manual de PHP

http://desarrolloweb.com/manuales/manual-php.html Página 6 de 142

mismohastaquequedebiengrabadoyasimilado.

Antesdecomenzaraleerestemanualestambiénaconsejable,haberleídopreviamenteelmanualsobremanualsobrepáginasdinámicas,enelcualseexplicaagrandesrasgosquéeslaprogramacióndelladodelservidoryportantoquéesPHP.EstoesinteresanteporquePHPesunpocoparticularconrespectoalenguajestradicionales,yaqueparaqueseejecutenecesitamosunservidoryunclientequetienequesolicitarunapáginaaeseservidor.Esoesalgosobreloqueincidiremosenvariospuntosdelmanualyenmultituddeejemplos,perosisetieneclarodeantemanoelflujodevidadeunapáginaweb,desdequesesolicitamedianteelaccesoaunaURLdesdeelnavegador,hastaqueelservidorlaenvíaalcliente,serámuchomejor.

MásadelantetevendrábienconocerelTallerdePHP,destinadoaanalizardemaneraprácticalamásvariadagamadeutilidades.OtrareferenciaalacualharemosalusióneseltutorialdeSQLquenosserádegranayudaparaeltratamientodebasesdedatosyaMySQL,delquepodremosaprendermuchascosasenelTallerdeMySQL.

Paratodosloslectores,peroaunmásparalaspersonasmásinexpertasyconmásdificultadesdeaprendizaje,tenemosademásunarecomendaciónquepuedeayudarlesmucho.SetratadelVideotutorialdePHPqueestamospublicandocondiversosvídeosqueexplicancongrandetallelaprogramaciónenPHP.

Esperamosqueestemanualresultedevuestroagradoyquecorrespondaanuestrasexpectativas:ElpoderacercarPHPatodosaquellosamantesdeldesarrollodewebsquequierendarelpasohacialaswebs"profesionales".

EsteartículoesobradeRubénAlvarezFuepublicadoporprimeravezen26/10/2016Disponibleonlineenhttp://desarrolloweb.com/articulos/12.php

BrevehistoriadePHP

AlgunosapuntesdelahistoriadePHPquepuedanserinteresantesparaellectorqueseaproximaaPHPporprimeravez.

Comolamayoríadelsoftwarelibre,PHPpertenecealacomunidad.Unagrancantidaddepersonashaayudadoalolargodesuvidaacreartantoelnúcleodellenguajecomolaenormecantidaddelibreríasquedispone.Sinembargo,debemosatribuirsucreaciónoriginalmenteaRasmusLerdorf,creadordellenguajeen1994.

PHPnaciócomounCGIescritoenCquepermitíalainterpretacióndeunnúmerolimitadodecomandos.ElsistemafuedenominadoPersonalHomePageToolsyadquiriórelativoéxitograciasaqueotraspersonaspidieronaRasmusquelespermitieseutilizarsusprogramasensuspropiaspáginas.DadalaaceptacióndelprimerPHPydemaneraadicional,sucreadordiseñóunsistemaparaprocesarformulariosalqueleatribuyóelnombredeFI(FormInterpreter)yelconjuntodeestasdosherramientas,seríalaprimeraversióncompactadel

Page 7: Manual de PHP - Walter Carnero · sencillo y directo con el que podrías empezar es PHP. Otra de las claves del éxito de PHP es que la mayoría de los CMS más populares (WordPress,

Manual de PHP

http://desarrolloweb.com/manuales/manual-php.html Página 7 de 142

lenguaje:PHP/FI.

Lasiguientegrancontribuciónallenguajeserealizóamediadosdel97cuandosevolvióaprogramarelanalizadorsintáctico,seincluyeronnuevasfuncionalidadescomoelsoporteanuevosprotocolosdeInternetyelsoportealagranmayoríadelasbasesdedatoscomerciales.TodasestasmejorassentaronlasbasesdePHPversión3.Apesarqueporaquelentoncesellenguajeteníaunlargocaminopordelanteparaconvertirseenunaherramientaindispensable,integrabaunanutridacantidaddefuncionalidades"decasa",demodoquesucomunidaddeprogramadoresfuecreciendo,atraídaporsuutilidadylafacilidadparacomenzaradesarrollarwebs.

PHPensuversión4incorporócomonovedadelmotor"Zend",desarrolladoconmayormeditaciónparacubrirlasnecesidadesdeaquelmomentoysolucionaralgunosinconvenientesdelaanteriorversión.Algunasmejorasdeestanuevaversiónsonsurapidez-graciasaqueprimerosecompilayluegoseejecuta,mientrasqueantesseejecutabamientrasseinterpretabaelcódigo-,sumayorindependenciadelservidorweb-creandoversionesdePHPnativasparamásplataformas-yunAPImáselaboradoyconmásfunciones.

Sinembargo,lamadurezdefinitivadePHPllegóconlaversión5,quepermaneciódurantemásde11añosenelmercadoyadíadehoytodavíaseencuentraenmantenimiento.Laprincipalnovedaddelaversión5fueunamejoradaintegracióndelparadigmadelaProgramaciónOrientadaaObjetos.

Nota:SibienenlaversióndePHP4yasecontabaconherramientasparaprogramarconobjetos,éstaseranmuyrudimentariasynorespondíanalasnecesidadesdelosdesarroladores,asícomotampocoeranequiparablesenpotenciayposibilidadesaotroslenguajes.PHP,ensuintencióndeservirtantoaprogramadoresexperimentadoscomoadesarrolladoresqueempiezandesdecero,todavíaincorporalaposibilidaddedesarrollarconosinprogramaciónorientadaaobjetos.

DurantetodoslosañosdevidadePHP5hubomuchoscambios.Multituddeherramientasseagregaronallenguaje,permitiendohacercosasqueeranaltamentedemandadasporlosdesarrolladoresyqueotroslenguajesmásnuevoshabíanincorporadodesalida.Unodelosejemplosmásclarosfueelautoloaddeclases,loquepermitiólaincorporacióndelgestordepaquetesComposer.

Sinembargo,11añosconlamismaversiónsugeríaqueellenguajesehabíaestancadoyPHPfueperdiendoadeptos,aunqueentérminosestadísticos,númerodedesarrolladoresydemandalaboral,susuperioridadsiguesiendoabrumadora.EntretodoesetiempovariassituacioneshicieronquenosellegaraapresentarPHP6yfinalmentelacomunidaddecidiósaltaresenúmerodeversiónylanzardirectamentePHP7.

PHP7adíadehoyesunarealidad.Lasmejorasencuantoarendimientosonmuynotablesyhasituadodenuevoellenguajeentrelosmáspoderosos.Estádisponibleencantidaddeservidores,perosinembargosuadopcióntodavíanoestotal.ElmotivoesquePHPtienecantidaddelibreríasysoftwarequenohasidototalmenteactualizadooquearrojaerroresalejecutarsebajoesanuevaversión.Enlospróximosmesesoañoslasituacióncambiará,porque

Page 8: Manual de PHP - Walter Carnero · sencillo y directo con el que podrías empezar es PHP. Otra de las claves del éxito de PHP es que la mayoría de los CMS más populares (WordPress,

Manual de PHP

http://desarrolloweb.com/manuales/manual-php.html Página 8 de 142

PHP7esmuydeseableparacualquierproyecto.

ServidoresconPHP

GráficadelnúmerodedominiosydireccionesIPqueutilizanPHP.EstadísticadeNetcraft.

Aunqueestaimagenesalgoantigua,nosindicaqueelnúmerodeservidoresqueutilizanPHPsehadisparado,loquedemuestraquePHPesunatecnologíamuypopular.Estoesdebido,entreotrasrazones,aquePHPeselcomplementoidealparaqueeltándemLinux-Apacheseacompatibleconlaprogramacióndelladodelservidordesitiosweb.Graciasalaaceptaciónquehalogrado,ylosgrandesesfuerzosrealizadosporunacrecientecomunidaddecolaboradoresparaimplementarlodelamaneramásóptima,podemosasegurarqueellenguajeseconvertiráenunestándarquecompartiráloséxitosauguradosalconjuntodesistemasdesarrolladosencódigoabierto.

Adíadehoy,pocasherramientasdeentrelasmásusadasparaeldesarrollodesitiosoaplicacioneswebnoestánrealizadasconPHP.WordPress,Drupal,Magento,Prestashop,etc.sonejemplosdeello.Esatendencianoparadecrecer,peroademásahoraletenemosquesumarunacantidadenormedeframeworkscomoSymfony,LaraveloZend,quehanpermitidoconvertiraPHPenunlenguajetodavíamáspoderoso,productivoycapazdeimplementarlasmejoresprácticasparalasaluddelosproyectos.

ComunidaddePHP

TambiénlacomunidaddedesarrolladoresqueusaPHPhaevolucionadomucho.Muchosdelosprofesionalesquevienenusandoestelenguajealolargodelosañoshancrecido,profesionalynaturalmente,alladodePHP.PodemosdecirquePHPhasidoysiguesiendoelcausantedesuéxitoosustentoprofesional.

Esamadurezdelosdesarrolladorestambiénhasidoimportanteparaellenguaje.EnsusinicioslacomunidaderaatraídaaPHPporsucantidaddeutilidadesylafacilidadconlaquecomenzaratrabajar.Sinembargo,laspersonasnosepreocupabantantoconaspectoscomolaseguridadolamantenibilidaddelasaplicaciones.HoylacomunidadesconscientedelaimportanciadeplataformasrobustasyescalablesyellohapermitidoquePHPhayadadounvuelcoprofesional.MuchadeesatransformaciónseladebemosalosmencionadosframeworksyalacapacidaddePHPdeabsorberytraerparasilomejordeotroslenguajes.

Page 9: Manual de PHP - Walter Carnero · sencillo y directo con el que podrías empezar es PHP. Otra de las claves del éxito de PHP es que la mayoría de los CMS más populares (WordPress,

Manual de PHP

http://desarrolloweb.com/manuales/manual-php.html Página 9 de 142

EnelManualdePHPaprenderásadartusprimerospasosconellenguaje,peroqueremosquenotequedesahíysigasesforzándoteparaaprendermásymás.EnDesarrolloWeb.comtienescantidaddematerialparaseguircreciendo,comoelmanualdelaprogramaciónorientadaaobjetosdePHP5,elManualdeComposerodeframeworkscomoLaravel.Serrigurosocontutrabajoycómousasellenguajeeselmejorfavorqueharásalacomunidadyatimismocomoprofesional.

EsteartículoesobradeMiguelAngelAlvarezFuepublicadoporprimeravezen26/10/2016Disponibleonlineenhttp://desarrolloweb.com/articulos/12.php

TareasprincipalesdellenguajePHP

MencionamoslosprincipalesgruposdefuncionesintegradasenellenguajePHP,anivelgeneral,yloqueellasnosofrecen.

PHPnospermitehacerdetodo.Enunprincipiodiseñadopararealizarpocomásqueuncontadoryunlibrodevisitas,PHPhaexperimentadoenpocotiempounaverdaderarevolucióny,apartirdesusfunciones,enestosmomentossepuedenrealizarunamultituddetareasútilesparaeldesarrollodelweb.

EnesteartículovamosaexponerunapequeñísimamuestradelascosasquePHPteofreceparaeldesarrollodeaplicacionesweb,peronopiensesquesonlasúnicas.SimplementelashemosseleccionadoporserlastareasqueresultanmáshabitualesencualquiertipodeproyectosyquehansidoresueltasenPHPtradicionalmentedeunamanerasencillayalalcancedecualquierpersona,inclusosindemasiadosconocimientosdeprogramación.

Además,todaslasfuncionalidadesrecogidasenelpresenteartículopermitenhacerseunaideadeltipodecosasqueaprenderásenelManualdePHPbásico.

Funcionesdecorreoelectrónico

Podemosconunafacilidadasombrosaenviarune-mailaunapersonaolistaparametrizandotodaunaseriedeaspectostalescomoele-maildeprocedencia,asunto,personaaresponder...

Otrasfuncionesmenosfrecuentesperodeindudableutilidadparagestionarcorreoselectrónicossonincluidasensulibrería.

Gestióndebasesdedatos

Resultadifícilconcebirunsitioactual,potenteyricoencontenidoquenoesgestionadoporunabasededatos.EllenguajePHPofreceinterfacesparaelaccesoalamayoríadelasbasesdedatoscomercialesyporODBCatodaslasbasesdedatosposiblesensistemasMicrosoft,apartirdelascualespodremoseditarelcontenidodenuestrositioconabsolutasencillez.

Gestióndearchivos

Page 10: Manual de PHP - Walter Carnero · sencillo y directo con el que podrías empezar es PHP. Otra de las claves del éxito de PHP es que la mayoría de los CMS más populares (WordPress,

Manual de PHP

http://desarrolloweb.com/manuales/manual-php.html Página 10 de 142

Crear,borrar,mover,modificar...cualquiertipodeoperaciónmásomenosrazonablequesenospuedaocurrirpuedeserrealizadaapartirdeunaamplialibreríadefuncionesparalagestióndearchivosporPHP.TambiénpodemostransferirarchivosporFTPapartirdesentenciasennuestrocódigo,protocoloparaelcualPHPhaprevistotambiéngrancantidaddefunciones.

Tratamientodeimágenes

EvidentementeresultamuchomássencilloutilizarPhotoshopparaunaeltratamientodeimágenespero...¿Ysitenemosquetratarmilesdeimágenesenviadaspornuestrosinternautas?

Laverdadesquepuederesultarmuytediosouniformarentamañoyformatomilesdeimágenesrecibidasdíatrasdía.TodoestopuedesertambiénautomatizadoeficazmentemediantePHP.

Tambiénpuedeparecerútilelcrearbotonesdinámicos,esdecir,botonesenlosqueutilizamoselmismodiseñoysolocambiamoseltexto.Podremosporejemplocrearunbotónhaciendounaúnicallamadaaunafunciónenlaqueintroducimoselestilodelbotónyeltextoaintroducirobteniendoautomáticamenteelbotóndeseado.

Apartirdelalibreríadefuncionesgraficaspodemoshacerestoymuchomás.

Ymuchomás...

MuchasotrasfuncionespensadasparaInternet(tratamientodecookies,accesosrestringidos,comercioelectrónico...)oparapropósitogeneral(funcionesmatemáticas,explotacióndecadenas,defechas,correcciónortográfica,compresióndearchivos...)sonrealizadasporestelenguaje.Aestainmensalibreríacabeahoraañadirtodaslasfuncionespersonalesqueunovacreandopornecesidadespropiasyqueluegosonreutilizadasenotrossitiosytodasaquellasintercambiadasuobtenidasenforosositiosespecializados.

Comopuedeverse,lasposibilidadesquesenospresentansonsorprendentementevastas.Loúnicoquesenecesitaesunpocodeganasdeaprenderyalgodepacienciaennuestrosprimerospasos.Elresultadopuedesermuysatisfactorio.

EsteartículoesobradeRubénAlvarezFuepublicadoporprimeravezen01/01/2001Disponibleonlineenhttp://desarrolloweb.com/articulos/12.php

Page 11: Manual de PHP - Walter Carnero · sencillo y directo con el que podrías empezar es PHP. Otra de las claves del éxito de PHP es que la mayoría de los CMS más populares (WordPress,

Manual de PHP

http://desarrolloweb.com/manuales/manual-php.html Página 11 de 142

CómoinstalarPHPyMySQL

EnlossiguientescapítulosvamosaexplicarcómocreartuentornodetrabajoparaempezaratrabajarconPHP.ExplicaremosdiversosmodosqueexistenparainstalarPHPylabasededatosMySQL,complementohabitualenlasaplicacioneswebconPHP.Comenzaremosconunrepasogeneralatodaslasalternativasposiblesparacreareseentornodetrabajo,condistintosnivelesdecomplejidadyadaptadosadistintosperfilesdedesarrolladoresynecesidadesdeequiposdetrabajo.Luegoiremosalapartemáspráctica,queconsisteeninstalarprogramasquenosfacilitanlainstalación,conunúnicopaso,detodaslasherramientasnecesariasparaejecutarPHPenunordenador,sinnecesidaddeentrarenningunaconfiguraciónenlamayoríadeloscasos.

GuíadefinitivaparacreartuentornodedesarrolloparaPHP

GuíacompletaparalacreacióndetuentornodedesarrolloconPHPparasistemasWindows,LinuxyMac,tantoparapersonasqueseiniciancomoparadesarrolladoresexperimentados.

HallovidomuchodesdequeredactamosnuestroManualdePHPbásico.Alolargodetodosestosañoshacambiadomuchonuestramaneradetrabajarconestelenguajeytambiénlasherramientasdisponiblesparasermásproductivosytrabajarenentornosmásprofesionales.

EnesteartículopretendemosnosoloactualizarnuestraguíadePHP,sinotambiénofrecerunavistadepájarodetodaslasopcionesdisponiblesenlaactualidadparainstalarPHPyMySQLmásunservidorwebdondepoderejecutarlossitiosquevayamosdesarrollando.Ademásqueremosclasificarlasdistintasmanerassegúnsudificultad,demodoqueanalizaremostantolosentornosmásbásicosysencillosdeusar,comolosmásavanzadosyprofesionales.

EnesteartículonopretendodarunaguíapasoporpasoparainstalarPHP,algoqueyasehaexplicadoenotrosartículosyapublicadosenDesarrolloWeb.com,sinoaclararlasdistintasalternativasdecreacióndetuentornodedesarrollo,básico,intermedioyavanzado.Deestemodoelinteresadopodrátenerunabuenaideadecómopuedecrearsuentornodedesarrolloparacomenzarycuálesseríanlossiguientespasosyposibilidadessiquiereincrementarlasprestaciones,enunentornomásproductivooprofesional.Cadaunadelasposibilidadesdeinstalaciónseacompañarádeenlacesareferenciasconguíasespecíficasparaconseguirunarápidaysencillaconfiguración.

Page 12: Manual de PHP - Walter Carnero · sencillo y directo con el que podrías empezar es PHP. Otra de las claves del éxito de PHP es que la mayoría de los CMS más populares (WordPress,

Manual de PHP

http://desarrolloweb.com/manuales/manual-php.html Página 12 de 142

QuéprogramasnecesitasinstalarparatrabajarconPHP

Antesquenada,paraayudaralosusuariosmásinexpertos,convieneaclararqueprogramasnecesitasparapoderempezaradesarrollarconPHP.Sonpocos:

PHP,elpropiolenguaje.Unabasededatos,quesueleserMySQLperoquepodríasercualquierotra.Esimportanteporquecualquierproyectobásicosueleapoyarseparasudesarrolloenunsistemagestordebasededatosdondealmacenarlainformación.Unservidorweb,quepuedesercomúnmenteApacheoNginx.Esimportanteporqueparaquesepuedaservirunaweb,elnavegadortienequeaccederaunservidor.Además,PHPlomásnormalesqueseinstalecomomódulodeunservidorweb,demodoquelaspáginasgeneradasporelservidorsepuedanprocesarmediantePHP.

ComoservidorweblaalternativamáscomúncondiferenciaesApache,aunquesepodríaejecutarPHPsobreotraseriedeservidoresweb.ElpropioApacheesmultiplatadorma,igualquePHP,ylotenemosdisponibleenLinux,MacoWindows.Ademásdeserlasoluciónmáshabitual,Apacheestambiénlaquetienemásopcionesavanzadas.AunquehoylaalternativaNginxnosofreceunservidorligeroyrápido,preferidopormuchaspersonas.EnentornosWindowstambiénpodríasinstalarPHPsobreunIIS,aunqueesaalternativaesmenoscomún.

Noobstante,nodebesmarearteportantasposibilidadesencuantoaservidores,yaqueelfuncionamientodePHPesindependientedelservidordondeseestéejecutando.Tengasunouotro,elprocesadoyresultadodeejecucióndePHPseráelmismo.

Quétipodeentornosdedesarrollopodemosusar

UnavezaclaradoslosdistintosprogramasquenecesitasyantesdeentrareneldetallesobrecómoinstalarPHPquierodescribirbrevementelasposibilidadesdeinstalacióndePHP.Ensiguientespuntosdeesteartículoentraremosendetalleconcadapunto,peroantesqueremosqueseconozcantodos.

Nota:Ahoraobservarásqueteindicovariasalternativas.NoquieroconellodespistaryparecerquecomenzarconPHPesdifícil,sinoofrecerunpocodeculturageneralyclarificarcuálesseríanlossiguientespasossiahondasenelmundodePHP.Sitodoestoteparece"hablarenchino",notepreocupes,quédateconlaopción"instaladorestodo-en-uno"yverásquetienesPHPfuncionandoentuordenadoren5o10minutos.

Page 13: Manual de PHP - Walter Carnero · sencillo y directo con el que podrías empezar es PHP. Otra de las claves del éxito de PHP es que la mayoría de los CMS más populares (WordPress,

Manual de PHP

http://desarrolloweb.com/manuales/manual-php.html Página 13 de 142

Instaladorestodo-en-uno

Lomáscómodo,rápidoydirectoesinstalartodoslosprogramasnecesariosdeunaúnicavez,atravésdeunodelosmuchospaquetesdeinstalaciónqueluegomencionaremos.Estaalternativaeslamásrecomendadaparalamayoríadelaspersonasqueempiezanysonmuyútilesporquepermitencontar,enunúnicopaso,contodoloquenecesitasparatrabajarNosoloteinstalarátodoslosprogramasmencionadosantes,sinoqueademáslosconfiguraráncorrectamenteparatrabajarentreellos.

ConestosinstaladorestodoenunopodrásenminutostenerPHP,ApacheyMySQLycomenzaradesarrollarsincomplicaciones.SiestásempezandoconPHPyquieresaprenderadesarrollareslaopciónmásinteresante.

Instalacióndetodoslosprogramasporseparado

SoloparalosusuariosdeLinuxmirecomendaciónseríainstalartodoloquenecesitasporseparado,pormediodeloscorrespondientesrepositorios.EsmuysencilloysitrabajasenLinuxsegurosabesdeloqueestoyhablando.ExistenTodo-en-unoparaLinuxperonoeslamaneranaturaldetrabajarenestesistema.

Virtualización

Paralosusuariosmásavanzadosexistelaposibilidaddevirtualizar.BásicamenteconsisteeninstalarentuordenadorunamáquinavirtualyejecutartusaplicacionesdesarrolladasconPHPenesamáquinavirtualizada(guest)ynoentusistemareal(host).

Lavirtualizaciónesmuyútilporquenospermitetrabajarenunentornodedesarrolloqueserálomásparecidoalentornodeproducción(aqueldondevasaponertuaplicaciónwebenfuncionamiento).Eselentornomásprofesionalynosahorradeterminadascomplicacioneshabitualesqueenumeramosacontinuación.

1. AunquePHPfuncionaigualencualquiersistemacuandoestásdesarrollando,puedestenerdiversosmódulosinstaladosqueigualnoseencuentranenelentornodeproducción,oviceversa.Esopuedehacerquetuspáginasfuncionenenunsitioynoenotro.

2. Paraequiposdetrabajo,dondecadaunodesarrollaconunsistemaoperativoyconprogramasdediversostipos,trabajarconunavirtualizaciónpermitiríaatodoelequipoejecutelaaplicaciónenelmismoentornovirtualizado,conlasmismaslibrerías,servidores,mismasversiones,etc.Esoahorralaposiblidaddequeunaaplicaciónnofuncioneaundesarrolladorysíaotro.

3. Finalmente,altrabajarconunentornovirtualizadoteobligasatrabajarconundominioreal,noaccederásatuproyectoconlocalhostycadaproyectopodrátenersuspropiasconfiguraciones,sinqueunosinterfieranenotros.Alpasardeunproyectoaotrosimplementeapagarásunamáquinavirtualyencenderásotra,seránindependientesynocorreselriesgoque,alcambiarconfiguracionesparaunproyecto,dejedefuncionarelotro.

Page 14: Manual de PHP - Walter Carnero · sencillo y directo con el que podrías empezar es PHP. Otra de las claves del éxito de PHP es que la mayoría de los CMS más populares (WordPress,

Manual de PHP

http://desarrolloweb.com/manuales/manual-php.html Página 14 de 142

Lavirtualizaciónlaconsideromuyútilcuandosedesarrollanaplicacionesrealmentecomplejas,dondetienesgrannúmerodedependencias,peroagregadificultadparaempezar.Esmuyimportantecuandosetrabajaenequipo,sobretodoamedidaquecreceelnúmerodedesarrolladores.PeronolarecomendaríaparaunapersonaqueestáempezandoconPHP,aunquesímepareceimportantequeseconozcaqueexisteesaposibilidad.

Editoresonline

Noquieroperderlaoportunidaddenombrarotraalternativainteresanteenlaactualidad,siloquequieresesprobarPHPotrabajardesdecualquierordenadorynodependerdellevartedeunlugaraotrotucódigoylainstalacióndeservidores.

LoseditoresonlinepermitencomenzarausarPHPsintenerqueinstalarnadayprogramarsinsalirtedelpropionavegador.Estánmuybien,porquepermitenaprovechartodaslasventajasdelanubeyademás,comoenlavirtualización,trabajarconentornosmásreales,similaresalosqueusaríasenproducción

Loseditoresonlinetienenhabitualmenteentornosdedesarrolloyalistosparatrabajarynonecesitasinstalarnada,simplementehacerlogineneleditoronlineycomenzarausarlo.Peroadecirverdadpuedenserunpocosofisticadosparaquienesestáncomenzando,yaquelamayoríaestánenfocadosadesarrolladoresconalgodeexperiencia.Sierescomoyo,quetodalaofimáticatelahasllevadoalanube,apreciaráslaposibilidaddetrabajarconeditoresonline,yaquepodrásdelmismomodotrabajarremotamenteencualquierordenador,oinclusoeneltablet,sobreelmismoproyecto.Aunque,adecirverdad,aunqueloheintentado,nohellegadonuncaausarlosparaningúnproyecto.

ReferenciasparainstalacióndetuentornodetrabajoconPHP

Ahoraqueyatedebenquedarclaraslasposibilidades,quieroponeralgunasreferenciasparaquepuedassabercómocomenzarrealmenteentutareadeponerapuntotuordenadorparatrabajarconPHP.

InstaladorestodoenunoparaWindows

ParaWindowsyorecomiendoXampp,quemepareceelmáscompletoytambiénelmásusado,porloquesitienescualquiernecesidaddeconfiguraciónavanzadaesmásprobablequeencuentresdocumentaciónyayudasdeotraspersonasquehayantenidoesamismanecesidadoproblema.EncuentramásinformacióndeXampp.AunquesinotefuncionaporcualquiermotivohayotrasalternativascomoWamp.Nosonlosúnicosdelmercado,perocreoquesílosmásimportantesyrecomendables.

InstaladorestodoenunoparaMac

EnelcasodeMacelqueesmásusadocondiferenciaesMamp,queresultamuyinteresante.Laversióngratuitaesmuysencilla,perotieneloquenecesitasparacomenzar.Laversióndepagoesmuyavanzadaytieneunasprestacionesmuyelevadasyconfiguracionesrealmenteútilesquepuedeshaceragolpederatón.SideverdadtededicasprofesionalmenteaPHPcreo

Page 15: Manual de PHP - Walter Carnero · sencillo y directo con el que podrías empezar es PHP. Otra de las claves del éxito de PHP es que la mayoría de los CMS más populares (WordPress,

Manual de PHP

http://desarrolloweb.com/manuales/manual-php.html Página 15 de 142

queteinteresatenerlaversiónprofesional.AprendemássobreMamp.

InstalarenPHPenLinux

Comodecíaantes,sitrabajasenLinuxterecomiendoinstalarPHP,aunqueseaparacomenzar,pormediodelosrepositoriosdetudistro.EsmuysencilloytienesunaguíapasoapasoaquíparainstalarPHPenUbuntu(odistrosbasadasenDebiancomoelpropioDebianoMint).

Entornospormediodevirtualización

SideseasexplorarestaposibilidadterecomendamoscomenzarconVagrant,queeslaalternativamássencilladecrearentornosdedesarrolloquepuedescompartirfácilmenteconelrestodelequipo,paraquetodostrabajensobreunavirtualizaciónidéntica.Esgratuitayademásexistendiversasherramientasrelacionadasquenospermitencrearvirtualizacionespormediodeasistentesmuysencillosdeusar.

Editoresonline

ExistenvariosperocreoqueunabuenaalternativaparacomenzaraexplorarlosesCloud9.Puedesencontrarmásinformacióndecloud9aquí.

Conclusión

EsperoqueconestaseriedeposibilidadestehayamosaclaradoelcaminosobrecuálessonlasopcionesparatrabajarconPHP.Esperoquetantasalternativasnohayanservidopaadespistar,sinoparacubrirunamplioespectrosobreelquepuedasdecidir.

AcontinuaciónenelManualdePHPencontrarásmásinformacióndetalladasobrecadaunadeestasalternativasprincipales.Noscentraremosenaquellasquenospermtieninstalartodoslosprogramascómodamenteconunaúnicainstalación,yenLinuxlaalternativadeinstalarlossoftwaresporseparado,yaqueesmásrecomendable.

EsteartículoesobradeMiguelAngelAlvarezFuepublicadoporprimeravezen31/10/2016Disponibleonlineenhttp://desarrolloweb.com/articulos/guia-crear-entorno-desarrollo-php.html

InstalarPHPfácilmenteenWindows

CómoinstalarPHPensencillospasosenunordenadorconWindows.En5minutostendrásunainstalaciónrápidaysencilladePHPconXamppoWampServer.

EnesteartículovamosaabordarunpardeprogramasparalainstalaciónsencilladePHPenunsistemaoperativoWindows,conlaquepuedescreartuentornodedesarrollofácilmentey

Page 16: Manual de PHP - Walter Carnero · sencillo y directo con el que podrías empezar es PHP. Otra de las claves del éxito de PHP es que la mayoría de los CMS más populares (WordPress,

Manual de PHP

http://desarrolloweb.com/manuales/manual-php.html Página 16 de 142

empezaradesarrollarPHPenpocosminutos.

Usaremosprogramasdeinstalaciónautomática,quenospermitencontarconPHP,MySQLyelservidorwebApache,enunsolopasoyademásconfiguradoscorrectamenteparaquenotengamosquepreocuparnospornada,solocomenzaradesarrollar.Enelmercadoexistenvariasalternativaspararealizarestoynosotroscomentaremosunpardeellas,quesonlasmástradicionalesparaWindows:XamppyWamp.Existenotras,quevanapareciendo(ytambiéndesapareciendo),porloquepreferimoscontaroslasqueanosotrosnoshanfuncionadobiensiempreysonproyectosconbastantebuenasaludhastalafecha.

Tenencuentasoloqueestasinstalacionessonindicadasparatuordenadorpersonal,aqueldondevasadesarrollarconPHP.ParaelservidordondepondrástuaplicaciónPHPenfuncionamientonoseríanindicadas.Ademásque,aunquePHPfuncioneperfectamentesobreWindows,losservidoresdePHPenproducciónsuelenejecutarsesobreelsistemaLinux.

InstalarPHPenWindowsConXampp

AntesdeXampp,uotrasherramientassimilares,instalarPHPenWindowseraunatareamedianamentecompleja,querequeríavariospasos.HayqueinstalarelservidorwebApache,luegoelpropioPHP,configurarlosparatrabajarjuntos,etc.Adicionalmente,tendrásqueinstalarunmotordebasededatoscomoMySQLocualquierotrosistemagestorqueprefierasusar.Sinembargo,situobjetivoesdisponerdePHPenelordenadordondevasadesarrollaraplicacionesweb,esmuchomásrecomendableusaruninstaladorrápido.

NuestropreferidoyelqueterecomendamosenprincipioesXampp,aunquenoeselúnicoycadadesarrolladorpuedetenerunaopinióndistinta.Puedesobtenerestepaquetedesdesupropiapáginaweb:https://www.apachefriends.org/es/index.html

EstamossegurosquecualquierpersonaquesepainstalarunprogramaenWindowssabrátambiéninstalarPHPconXampp,puesesunsencilloprogramaconunasistentequetienesqueseguirpasoporpaso,comocualquierotroinstalador.Teofrecepocasopcionesdeconfiguraciónynuestroconsejoesquealprincipiolasaceptestodaslasquetevienendemanerapredeterminada(almenosparapersonasqueestánempezando).

Nota:LaúnicapartequequizáscambiaríadeXamppescuandotedicelosmódulosquequieresinstalar.Sisabesquealgonovasanecesitarpuedessimplementequitarlo,paraahorrarespacioendisco,peroporlodemás,siempreconvieneiralasopcionespordefecto.Loquenocambiaríaeslarutadelacarpetadondeestaránlosarchivosdelaweb,tudocumentroot.SialgunavezquierespersonalizarcosasdetuXamppybuscastutorialesmásavanzadosenInternet,generalmenteteguiarándandoporhechoqueeldocumentrooteselquesehamarcadopordefecto.

ParaexplicarotrosdetallesdeXamppterecomendamoslalecturadelartículodedescripcióndeXampp,queesantiguoperobastanteactualizado,yaquenohancambiadoprácticamentenada.

EnDesarrolloWeb.comencontrarástambiénotrosartículosdedicadosacosasmásavanzadas

Page 17: Manual de PHP - Walter Carnero · sencillo y directo con el que podrías empezar es PHP. Otra de las claves del éxito de PHP es que la mayoría de los CMS más populares (WordPress,

Manual de PHP

http://desarrolloweb.com/manuales/manual-php.html Página 17 de 142

arealizarconXampp,comoeselcasodecreardominiospersonalizadosparalossitiosquetengasendesarrollo,loquetepermiteentrarmedianteundominiodeInternet(comoacualquierotrositioweb)enlugardedesdelocalhost.Esoesbuenoporqueasípodrásejecutartusaplicacionesconunentornomásrealyparecidoacomoestaránpublicadasunavezlaspongasenproducción.Siteinteresasabermás,consultaelartículoConfigurarvirtualhostenApacheparaWindows.AdemástenemosunvideotutorialdeXamppquetambiéntepuedeserdeutilidad

Nota:Amododeadvertencia,yaqueesunerrormuyrecurrenteyaunqueyalohemostratadoenotrasocasionesenDesarrolloWeb...Apacheusaelpuerto80parafuncionar.Siesepuertoestáocupadoporotroprograma,yaseaSkypeoIISocualquierotroprograma,nosepodráarrancar.LasoluciónseríacambiarelpuertodondeApachefuncionaomejor,cambiarlaconfiguraciónodetenereseotroprogramaquecauseinterferencias.ElpropioXamppcuandoloejecutastieneunasencillaherramientaparadetectarlospuertosabiertosdondepuedesverquéprogramaeselquetieneocupadoelpuerto80,siesquehasencontradoesteproblemaentuequipo.

LasiguienteimagentemuestralaherramientadegestióndepuertosdeXamppalaquehacemosreferencia:

InstalarPHPfácilmenteenWindowsconWamp

ParalosquenohaninstaladonuncaPHPhayquecomentarquenotenganmiedoparanadaallenguaje,queesmuysencilloyagradecido.NocabetampocotenermiedodelainstalaciónoconfiguracióndePHP,porqueenesteartículovamosaexplicarunmododerealizarlaen5minutosysinnecesidaddeconocimientosiniciales.

OspasounasnotasrápidassobreelprocesodeinstalacióndePHPenWindowspormediodeunprogramaquesellamaWampServer2,queosfacilitarálatarea.PodráscomenzaratrabajarconPHPen5minutos!!

Nota:VolvemosainsistirquenuestropreferidoesXampp,queestámuchomásactualizado.NoencuentrounmotivoparainstalarWampquenoseaqueelpropioXamppteestédandoproblemasentusistema,encuyocasopuedesprobarconWampcomoalternativa.

Page 18: Manual de PHP - Walter Carnero · sencillo y directo con el que podrías empezar es PHP. Otra de las claves del éxito de PHP es que la mayoría de los CMS más populares (WordPress,

Manual de PHP

http://desarrolloweb.com/manuales/manual-php.html Página 18 de 142

LoprimeroesentrarenlapáginadeWampServer,queeslasiguiente:http://www.wampserver.com/en/

Comohabíacomentado,WampServeresunprogramaqueinstalaenunsólopasoApache+PHP+MySQLylosconfiguraparatrabajarjuntos.

HabríaquehacerladescargadelaúltimaversióndeWampServeren:http://www.wampserver.com/en/download.php

Enlapáginadedescargateespecificaclaramentelalistadeprogramasquevaainstalar,asícomolasversionesdelosmismos.EnelmomentodeescribiresteartículoibanporlaversiónWampServer2.0,queinstalaestalistadeprogramas:

Apache2.2.8PHP+PECLSQLitemanagerMySQL5.0.51bPhpmyadmin

Nota:LalistadeprogramasoversionesdeloslenguajesqueteofreceWamppuedevariarduranteeltiempoacriteriodelosmantenedoresdelsoftware.

Unavezdescargadoelprograma,loejecutamospararealizarlainstalacióndeWampServer2.Lainstalaciónsebasaenunasistentenormalquenossolicitarávariosdatostípicosdeinstalaciones,comoqueaceptemoslostérminosdelalicencia.LuegonossaldrálaventanaparaacabarquemarcaremosqueejecuteWampServerinmediatamente.

Page 19: Manual de PHP - Walter Carnero · sencillo y directo con el que podrías empezar es PHP. Otra de las claves del éxito de PHP es que la mayoría de los CMS más populares (WordPress,

Manual de PHP

http://desarrolloweb.com/manuales/manual-php.html Página 19 de 142

Sitodohafuncionado,en1minutomáspodremoscomprobarsiPHP5estáfuncionandoennuestroordenador.Sólotendríamosqueencenderlosservicios.ParaelloWampServertieneunpaneldecontrolqueseaccededesdeuniconodeprogramaresidentedelabarradetareas.Tieneunaformarara,comouncuentakilómetros.Loveremosenestaimagen:

Pulsamoseliconoconelratón(botónizquierdo,clicnormal)yveremosabajodeltodounainstrucciónquepone“PutOnline”,quepondrátodoslosserviciosenfuncionamiento.

Page 20: Manual de PHP - Walter Carnero · sencillo y directo con el que podrías empezar es PHP. Otra de las claves del éxito de PHP es que la mayoría de los CMS más populares (WordPress,

Manual de PHP

http://desarrolloweb.com/manuales/manual-php.html Página 20 de 142

Ahora,paracomprobarquelosserviciosfuncionansólonosquedaabrirunnavegador.VamosaescribirlasiguientedirecciónURLenlabarradedirecciones:

http://localhost

EntoncesnostienequesalirlapáginadeiniciodelservidorApacheconPHP5,personalizadaporWamp,queesalgocomoesto:

Page 21: Manual de PHP - Walter Carnero · sencillo y directo con el que podrías empezar es PHP. Otra de las claves del éxito de PHP es que la mayoría de los CMS más populares (WordPress,

Manual de PHP

http://desarrolloweb.com/manuales/manual-php.html Página 21 de 142

Sinonosalenadapuedequehayahabidounproblemaounerroraliniciarlosservicios,generalmenteelApache,queutilizaelpuerto80queavecesestáocupadoporotroprogramacomoSkypeoIIS.LeelaFAQ:NofuncionaelWampServer2.

AhorapodremoscolocarennuestroservidortodaslaspáginasPHPquequeramosprobarolosproyectosquehayamoscreadoanteriormente.Eldirectoriodondegeneralmenteselocalizalaraízdepublicaciónes:C:/wamp/www

EnesacarpetapodríamossubircualquierarchivoPHP4oPHP5ydeberíaejecutarseperfectamente.OtracosaquepuedefallaresquelosiniciosdebloquesdecódigoPHPquedebéisutilizarsoncon“<?php”ynosólocon“<?”,queestádeshabilitadopordefecto.

OsaseguroqueleeresteartículoosllevarámástiempoqueinstalarPHP5envuestroordenador.ConWampServer2esmuyfácil.

EsteartículoesobradeMiguelAngelAlvarezFuepublicadoporprimeravezen31/10/2016Disponibleonlineenhttp://desarrolloweb.com/articulos/instalar-php-5.html

InstalarLamp,Apache-MySQL-PHP,enLinux

Cómoinstalartodoslosprogramasquenecesitasparacomenzaradesarrollar

Page 22: Manual de PHP - Walter Carnero · sencillo y directo con el que podrías empezar es PHP. Otra de las claves del éxito de PHP es que la mayoría de los CMS más populares (WordPress,

Manual de PHP

http://desarrolloweb.com/manuales/manual-php.html Página 22 de 142

conPHPenentornosLinux:Apache,PHPyMySQL,loqueseconocecomoLamp.ParaDistribucionesbasadasenDebiancomoUbuntuoLinuxMint.

EnDesarrolloWeb.comhemosexplicadoendiversosartículoscómoinstalartodoslosprogramasnecesariosparaempezaratrabajarconPHPenlocalsobresistemasWindows,puestradicionalmentehemosorientadonuestrostutorialesalosusuariosdedichosistema.Sinembargo,nodebemosdeolvidarnosdelosusuariosdecualquieradelosotrossistemasoperativosyenesteartículoletocaaGNU/Linux.

Dehecho,sisemepermitelaapreciación,aunquePHPesmultiplataforma,suentornomásnaturalparaejecuciónesLinux,yaquelamayoríadelosservidoresPHPcorrenbajoesesistemaoperativo.Porello,paralosquesomosdesarrolladoresyqueademásnosinteresaaprenderunpocodeadministracióndeservidores,nonosvendríanadamaltenernuestroPHPejecutandobajounainstalacióndeLinux.Además,setratadealgorealmentesencillo.

Nota:ExistenotrostutorialesdiversosenDesarrolloWeb.comquepuedeninteresartesiloquequieresesinstalarPHPenotrossistemasoperativos.

DebehaberdecenasdemanerasdeinstalarApache,PHPyMySQLsobreGNU/LinuxyenInternetencontraremosunagrancantidaddeinformaciónaesterespecto.Nosotrosvamosadestacarunaacontinuaciónquenoshafuncionadosiemprebien,conalgunosdetallesadicionalesquenospuedenfacilitardiversaslaboresdedesarrolloennuestrossistemas.Además,complementaremoslainformacióncomentandolospasosparainstalarotraherramientafundamental,comoeselPhpMyAdmin.

Instalarlospaquetesporlíneadecomandosconapt-get

VamosainstalartodoslospaquetesnecesariosparapodertrabajarconPHPyloharemossobrelíneadecomandos,queesunmétodoquedifícilmentepodráfallarnos.Paraelloutilizaremoselcomandoapt-getdesistemasbasadosenDebian.

Nota:YoestoytrabajandosobreUbuntu,porellovoyautilizaruncomandoquevienedesistemasDebianparaladescargadepaquetesqueeselapt-get.Esecomando,comodecía,estádisponibleenlasdistrosDebian,perotambiénenaquellasbasadasenDebian,comoUbuntuoLinuxMint.Ubuntueseltercersistemaoperativomásutilizado,creadoporCanonical,yMintseríaelcuartoenimportanciaanivelmundial.SiutilizasotrosistemaGNU/LinuxquenoestébasadoenDebian,estainformaciónquizásnoteservirádemucho.

ConvienedecirqueestarecetalahemosobtenidodelsitiowebHowtoForge.Yolahetraducidolibrementeylahecomplementadoconexplicacionesadicionalesyalgunospasosextraqueheconsideradodeinterés.

Comounprimerpaso,podemoslanzaruncomandoparaobtenerlosprivilegiosderootparalaadministraciónatravésdelalíneadecomandos.

Page 23: Manual de PHP - Walter Carnero · sencillo y directo con el que podrías empezar es PHP. Otra de las claves del éxito de PHP es que la mayoría de los CMS más populares (WordPress,

Manual de PHP

http://desarrolloweb.com/manuales/manual-php.html Página 23 de 142

sudo su

Nospedirálaclavedenuestrousuario,queeslamismaclavequeusamosalarrancarelequipo.

Paso1:InstalacióndeMySQL

AhorainstalaremosMySQL,paraloqueejecutamoselsiguientecomando:

apt-get install mysql-server mysql-client

DuranteelprocesodeinstalacióntendrásqueintroducirlaclavequedeseasconfiguraralusuariorootdeMySQL.

Paso2:InstalarApache

AhoratocainstalarelservidorwebApache,ensuversión2.ParainstalarApache2lanzamoselsiguientecomando:

apt-get install apache2

Enestepunto,unavezinstaladoApache,puedeshacerunaprimeracomprobación,quenospermitirásabersielservidorwebestáfuncionadocorrectamente.ParaelloabreunnavegadorcualquieraeintroducelaURLdelocalhostolaIPlocaldetuordenador:

http://localhost

Obien:

http://192.168.0.55 (sustituye esa IP por la IP de tu máquina)

Nota:SinosabescuálestuIPderedlocal,tienesatudisposiciónenLinuxelcomandoifconfig.

AlaccederacualquieradeesasdosURLdeberíasalirteelmensajedeApachediciendoqueestáfuncionado(Itworks!).

Paratuinformación,eldirectoriopredeterminadodondeseguardanlosdocumentosdelservidorwebenApachees/var/wwwyelficherodeconfiguracióndelservidorestáen/etc/apache2/apache2.conf.Otrasconfiguracionesestánalmacenadasenotrossubdirectorios

Page 24: Manual de PHP - Walter Carnero · sencillo y directo con el que podrías empezar es PHP. Otra de las claves del éxito de PHP es que la mayoría de los CMS más populares (WordPress,

Manual de PHP

http://desarrolloweb.com/manuales/manual-php.html Página 24 de 142

de/etc/apache2como/etc/apache2/mods-enabledparalosmóduloshabilitados,/etc/apache2/sites-enabledparalos"virtualhosts"y/etc/apache2/conf.dparalasconfiguracionesglobalesqueafectaránatodoslosvirtualhost.

Nota:ExisteenDesarrolloWeb.comunmanualsobrelainstalacióndeApacheenWindows,quenoteayudarámuchosiestásenLinux,peroquetienemuchainformaciónsobrelaconfiguracióndeApache.Teservirádeayudapuestoquelamayoríadelosarchivosdeconfiguraciónfuncionanexactamenteigualylasvariablesdeconfiguraciónsonexactamentelasmismas.

Paso3:InstalarPHP

ElsiguientepasoesInstalarPHP.Laversiónactualenelmomentodeescribiresteartículoesla5,queseinstalaríaconelsiguientecomando.

apt-get install php5 libapache2-mod-php5

DespuésdelainstalacióndePHP5comomódulodeApache,debemosreiniciarelservidorwebyparaellolanzamosesteotrocomando.

/etc/init.d/apache2 restart

Comopuedesver,hacemosun"restart",perotambiénpodríashacerprimeroun"stop"yluegoun"start".

Llegadoestepunto,podemoscrearyaundocumentowebquenossirvaparacomprobarsiPHPestácorrectamenteinstaladoennuestrosistemayparaellopodemosutilizarlalíneadecomandosyeleditorqueprefieras.AalgunaspersonaslesgustaeleditorllamadoVi,peroyosoydelosqueprefiereotrosmássencilloscomoelJoe.

Nota:ParaconocermásacercadelprogramaJoe,puedesvisitarlaFAQ:¿SabéisdeunaalternativaaVi?

Encualquiercaso,tendrásquecrearunarchivoenlarutapordefectodepublicacióndelApache,queyadijimoses/var/www.Puedesllamarlecomodesees,porejemploinfo.php,enelquecolocaráslassiguienteslíneasdecódigo.

<?php

phpinfo();

?>

Page 25: Manual de PHP - Walter Carnero · sencillo y directo con el que podrías empezar es PHP. Otra de las claves del éxito de PHP es que la mayoría de los CMS más populares (WordPress,

Manual de PHP

http://desarrolloweb.com/manuales/manual-php.html Página 25 de 142

EsafuncióndePHPphpinfo()temostrarámuchainformaciónútilsobrelainstalacióndePHPquetienesentumáquina,comomódulosincluidosydiferentesconfiguracionesenfuncionamiento.

Nota:paracrearelarchivoPHPtambiénpuedesutilizareleditorgráficoquedesees,queteseráinclusomáscómodoquecualquierprogramaquetrabajeconelterminal.Elúnicodetalleesaplicarlelospermisosnecesariosalacarpeta/var/wwwparaqueseapropiedaddetuusuarioypuedasciertascosasconella.Tenencuentaqueponersecomousuariodueñodelacarpetaserecomiendasolositiosquenoesténenproducción.Loharíasconelcomando:

sudo chown -R $USER:$USER /var/www

Silodeseas,tambiénpuedeshacerelcomando:

echo $USER

Paraverelnombredelusuarioenelqueestásyelquevasaponercomoduelodelacarpeta/var/www.

Unavezcreadoelarchivodetextoinfo.phpconelcódigoindicado,podemosaccederaéldesdeunnavegadorconunaURLcomoesta:

http://localhost/info.php

Tambiénpuedessustituir"localhost"portudirecciónIPderedlocal.

Page 26: Manual de PHP - Walter Carnero · sencillo y directo con el que podrías empezar es PHP. Otra de las claves del éxito de PHP es que la mayoría de los CMS más populares (WordPress,

Manual de PHP

http://desarrolloweb.com/manuales/manual-php.html Página 26 de 142

SivestodaunaseriedeinformacióndetuinstalaciónPHP,comoenlaimagenanterior,esquehaspodidoinstalarPHPencorrectascondiciones.

Paso4:InstalarmóduloPHP5-mysqlyotrasextensionesPHPnecesarias

Sihacesscrollhaciaabajoenlapáginadelphpinfo()podrásverellistadodemódulosPHPquetienesdisponibles.PuedequenotengastodoslosquenecesitasyenconcretopodrásobservarquenotieneshabilitadoelmódulodeMySQL,porloquepodrásinstalarlo.

Sihaceselcomando:

apt-cache search php5

PodrásencontrarellistadodeextensionesdePHPdisponiblesenlosrepositorios,puedeselegiraquellosquedeseeseinstalarlosconlalínea:

apt-get install php5-mysql php5-curl php5-gd php-pear php5-imagick php5-sqlite php5-tidy php5-xmlrpc php5-xsl

Acontinuacióndebesreiniciarelservidorparaqueloscambiostenganefecto.

/etc/init.d/apache2 restart

Page 27: Manual de PHP - Walter Carnero · sencillo y directo con el que podrías empezar es PHP. Otra de las claves del éxito de PHP es que la mayoría de los CMS más populares (WordPress,

Manual de PHP

http://desarrolloweb.com/manuales/manual-php.html Página 27 de 142

Sirefrescaslapáginadelphpinfo()podrásencontrarlosnuevosmódulosinstalados.

Paso5opcional:InstalarPhpMyAdmin

SeguramenteagradeceráscontarconunacopiadePhpMyAdminparagestionartusbasesdedatosMySQL.Paraellopuedesinvocarelcomando:

apt-get install phpmyadmin

Verásacontinuaciónunaseriedepreguntas,comotuservidorweb.UnavezinstaladopuedesaccederalgestorpormediodeunaURLcomoesta:

http://localhost/phpmyadmin/

Conclusión

ConesteprocesotendrásatudisposicióntodoslosmaterialesparacomenzaradesarrollarconPHPentuLinux.

Simplementeseñalarundetalleimportante,queyaseapuntóderefilón,peroquequieroremarcar.EsposiblequeenestainstalacióndeApacheyPHPquierasdesarrollarsitioswebyutilizarparaprogramardichossitiosuneditorparaprogramadoresconinterfazgráficacomoKomodoEditoEclipse.Enestecasorecuerdaque,paraeditarocreararchivosenlacarpeta/var/wwwdesdeesosprogramas,tendrásqueponertuusuariocomodueñodelacarpeta,conchown.Esoseexplicóenunanotaanterior.

Referencia:ParaoptimizarlaconfiguracióndetuApacheenLinuxdeunamaneramuyprácticaparatuservidordedesarrollo,teaconsejamoslalecturadelartículoConfiguracióndeApacheenLinuxconcarpetasexternas.

Demomentoestodo!Esperoquetesirva!

EsteartículoesobradeMiguelAngelAlvarezFuepublicadoporprimeravezen19/04/2012Disponibleonlineenhttp://desarrolloweb.com/articulos/instalar-php-apache-mysql-linux.html

InstalarPHPenMacconMamp

InstalarPHPconApacheyMySQLenunordenadorMacOSXusandoelpaquetetodoenunoMamp.PrimerospasosyconfiguracionesdeMamp.

Page 28: Manual de PHP - Walter Carnero · sencillo y directo con el que podrías empezar es PHP. Otra de las claves del éxito de PHP es que la mayoría de los CMS más populares (WordPress,

Manual de PHP

http://desarrolloweb.com/manuales/manual-php.html Página 28 de 142

UnodelostemasmásrecurrentesdentrodeDesarrolloWeb.comeslainstalacióndePHP.TenemosdecenasdeartículosyFAQscreadasalolargodelosyacasi15añosdehistoriadeestesitioweb.Sinembargo,nuncahabíamosabordadolainstalacióndePHPsobreMacOSX,tutorializadaypasoapasocomonosgustasiempreofrecertelainformación.

Ahorapues,vamosconunadelaspendenciasparacompletarlosprimerospasosparalosqueseintroducenenPHPqueyateofrecemosatravésdelManualdePHPBásico.Parasimplificarlascosasyhaceroslavidamásfácilatodos,abordaremosesteasuntoatravésdeunodeesosinstaladorestodo-en-unoquenosayudanatenerenpocosinstantesinstaladosyconfiguradostodoslospaquetesdesoftwarenecesariosparapoderejecutarPHPennuestroordenador.

EnMacseusatradicionalmenteelsistemallamadoMamp,queeselqueosvamosaenseñarenesteartículo,sinembargo,tampocoeselúnico.Lociertoesquetodoslos"maqueros"queconozcousanMamp,perolaverdadesquesisedeseatambiénsepuedeencontrarversionesparaOSXdepaquetespopularescomoXampp.

Realmente,parainstalarelMamppocotetememosquedecir.SiyaeresusuariodeMacdesdehacetiemponoencontrarásproblemaalguno,yaqueeselprocesoquehasusadoendecenasdeprogramasquetendrásinstaladosentumáquina.Porelloyparadarleunpocomásdeutilidadaestetexto,teexplicaremostambiéncuálessonlosprimerospasosylasconfiguracionesbásicasquepuedesquererhacercuandoempiecesausarMamp.Alfinaldeestetextoencontrarástambiénunvídeoquehegrabadoparaexplicarestasmismascosasperodemaneravisual.

MampoMampPro

Comodecimossiempre,paratrabajarconPHPlomáscómodoestenerenlocalunservidorweb,dondecrearástuspáginasdurantelaetapadedesarrollo.LuegolaspáginaslassubirásaunservidorwebdeInternetparaqueesténdisponiblesparatodoelmundoyacualquierhora.Portanto,paratrabajarconPHPnecesitarásdetreselementosbásicos.Apachequeesunservidorweb,elmódulodePHP(paraqueApacheseacapazdeinterpretaryejecutarpáginasconPHP),yMySQL(unabasededatosconlaqueconstruirtusaplicaciones).

EstostresprogramaslostienesenMampparainstalartodoenunoydemanerasencilla.Ademástelosentreganconfiguradosperfectamenteparaquepuedascomenzarausarlosenelinstante.Tantolaversión"Mamp"comosuhermanomayor"MampPro"contienenestostresingredientesbásicos,portanto,cualquieradelasdosserásuficiente.Mamp(asecas)esgratuito,porloquerepresentalamejoropciónparacomenzar.¿EntoncesquémásconsigositengoMampPro?

Page 29: Manual de PHP - Walter Carnero · sencillo y directo con el que podrías empezar es PHP. Otra de las claves del éxito de PHP es que la mayoría de los CMS más populares (WordPress,

Manual de PHP

http://desarrolloweb.com/manuales/manual-php.html Página 29 de 142

RealmentepocaspersonasqueconozcousanMampPro,peronuestrocompañerodelacomunidaddeDesarrolloWeb.comyprofesordeEscuelaIT@micromanteusaelMampPro,porquetienealgunacosillaqueaéllevienebienprofesionalmente.ElprecioesmásquerazonableytienevariasmejorasinteresantescomoconfiguracióndelservidordeemailparaenvíodecorreodesdepáginasPHP,posibilidaddeelegirentremuchasversionesdePHP,accesoalservidoratravésdeturedlocal,etc.Perolaquemásmehallamadolaatenciónporsuutilidadyporqueesalgoqueaveceshaceramanotedaalgúnqueotroproblemillaeslaposibilidaddeusarloquesellaman"virtualhost".

Nota:SieresnuevoenPHPseguramentenotediganadaesodel"virutalhost".Enesecasonotepreocupes,peroparalosquequieransaberaquémerefieroescrearunaespeciedeservidorindependienteparacadaunodelossitiosquequierasalojar(paracadaproyectodecadacliente).Deesemodopuedesaccederalproyectoconunnombrededominioalgocomomicliente.example.com,loqueteofreceunentornobastantemásparecidoacomotendráspublicadoelsitiounavezestéenelservidorremotoydominiodefinitivo.Además,alserhostindependientestieneslaoportunidaddeconfigurarcosastambiéndemaneraindependiente,sinqueafecteaotrosproyectosquetengasentumismoordenador.

PrimerospasosconMamp

LaversiónbásicadeMampesmuysencilla,perohayunaspocascosasquepuedessaberparafacilitarteunpocomássuuso.

Encenderyapagarlosservicios:

DesdelaventanadeadministracióndeMamppuedesencenderyapagarlosservicios(ApacheyMySQL).Hayunsencillobotónparaestatareaquenotendrásproblemasenlocalizardesdelaventanaprincipal.Solotenencuentaqueelservidorwebsoloestarádisponible(asícomotodaslaspáginasquecuelguesdeél)cuandoelservidorestéencendido.Unproblematípicodenopoderaccederaunapáginaentuservidoresquetehayasolvidadodeiniciarlosservicios.

Puerto:

ElMampconfigurademanerapredeterminadaApacheparaescucharenunpuertodeterminado,pordefectoel8888.Esporelloquelarutadetuservidorenlocales:

http://localhost:8888

Lapalabra"localhost"esunaliasdetuordenadorlocalyluegocon":8888"indicaselpuertodondetuservidorwebestáconfigurado.EstepuertolopuedescambiartambiéndesdelainterfazdeadministracióndelMamp.

Nota:generalmentelosservidoreswebtrabajanconelpuerto80.Enesoscasosnoesnecesarioindicarelpuerto,porquetunavegadorlousarádemanerapredeterminadaparaaccederalossitiosweb.Soloenelcasoqueelservidorwebestéconfiguradoenunpuertodiferente,esnecesarioindicarloenlaURL.Osea,http://localhosteslomismoqueescribir

Page 30: Manual de PHP - Walter Carnero · sencillo y directo con el que podrías empezar es PHP. Otra de las claves del éxito de PHP es que la mayoría de los CMS más populares (WordPress,

Manual de PHP

http://desarrolloweb.com/manuales/manual-php.html Página 30 de 142

http://localhost:80\.MampconfiguraApacheenotropuertoparaquenotengasincompatibilidadesconotrasaplicacionesquepuedanestarusandotambiénesemismopuerto.

Directoriodepublicación:

Otradelascosasquedebesaprenderesalocalizareseldirectorio"raíz"depublicacióndetuservidorweb.EsmuyfácildelocalizarenlainstalaciónbásicadeMamp.Simplementevasa"Preferencias/Apache"yloencontrarás.Demanerapredeterminadaestáentudiscoduro,directorio"aplicaciones/MAMP/htdocs".Silodeseaspuedescambiarlo,parasituarloenotracarpetadiferente,peronoterecomiendohacerloanoserqueyatengasunpoquitodeexperiencia.

Loimportantedeldirectoriodepublicaciónesqueesellugardondevasacolocartodoslosarchivosquequieresqueesténdisponiblesatravésdetuservidorweb.EnesacarpetapodrásmetertantopáginasHTMLcomoPHP,archivosCSS,imágenes,JS,etc.Osea,todoloquehayaentuproyectooencadaunodelosproyectosquetendrásenelservidor.Paraaccederaestosarchivosbastaconescribirlarutadetuservidorhttp://localhost:8888yluegolarutaparaaccederaesearchivodesdeeldirectorioraízdepublicación.

http://localhost:8888/directorio/archivo.php

Creoqueconestosconceptosinicialestienessuficienteparacomenzarsintemoraliartemásdelacuenta.RecuerdaqueenDesarrolloWeb.comtienesmuchasotrasayudasparaprofundizarenPHPenlasecciónPHPaFondo.

VídeodeinstalacióndeMamp

EnelsiguientevídeopuedesvercomounnovatocomoyoenlossistemasOSXinstalaMampen3minutos.Ademásteexplicarélascosasmásimportantesquedebessaberparanoliarteentusprimerospasosusandotuservidorweblocal.

Paraverestevídeoesnecesariovisitarelartículooriginalen:http://desarrolloweb.com/articulos/instalar-php-mac-mamp.html

EsteartículoesobradeMiguelAngelAlvarezFuepublicadoporprimeravezen18/08/2014Disponibleonlineenhttp://desarrolloweb.com/articulos/instalar-php-mac-mamp.html

Page 31: Manual de PHP - Walter Carnero · sencillo y directo con el que podrías empezar es PHP. Otra de las claves del éxito de PHP es que la mayoría de los CMS más populares (WordPress,

Manual de PHP

http://desarrolloweb.com/manuales/manual-php.html Página 31 de 142

PrimerospasosconellenguajePHP

Empezamosatrabajarconellenguajedeprogramación.EnlossiguientescapítulosdelManualdePHPexplicaremoslasgeneralidadessobreellenguaje,comosusintaxis,lasvariablesquepodemoscrearysustiposdedatos,lasvariablesdelsistemaqueestándisponiblessobreelservidor,operadores,etc.

IntroducciónalasintaxisPHP

ExplicamoslaspautasprincipalesaseguirparaincluirPHPenelcódigodenuestrapágina,laformadeintroducircomentarios.

DespuésdevarioscapítulosdelManualdePHPenlosquehemosintroducidoellenguaje,suscaracterísticasycómoinstalarnuestroentornodetrabajo,estamossegurosquetendrásmuchasganasdecomenzaravercódigo.Asíquevamosconello!

EnestecapítulovamosaexplicarlasintaxisbásicaycómoenunapáginaHTMLpodemosmezclarelcódigodellenguajedemarcación(HTML)conelcódigodelladodelservidor(PHP).Verásqueesbiensencillo,motivoporelcualalosdesarrolladoresqueyasabenHTMLlesresultamuysencillocomenzarconPHP.AdemásveremosalgunascosasbásicasyconsejosinteresantesparaquetucódigoPHPsepuedaejecutarperfectamenteencualquiertipodeservidor.

AperturaycierredelcódigoPHP

PHPseescribedentrodelapropiapáginaweb,juntoconelcódigoHTMLy,comoparacualquierotrotipodelenguajeincluidoenuncódigoHTML,enPHPnecesitamosespecificarcuálessonlaspartesdelcódigoescritasenestelenguaje.Estosehace,comoenotroscasos,delimitandonuestrocódigoporetiquetasdeaperturaycierre.Podemosutilizardistintosmodelosdeetiquetasenfuncióndenuestraspreferenciasycostumbres.Hayquetenersinembargoencuentaquenonecesariamentetodasestánconfiguradasinicialmente,algodeloquehablaremosenseguida.

EstossonlosmodosdeabrirycerrarlasetiquetasquedelimitanelcódigoPHP:

<? y ?>

<?php y ?>

ElmododefuncionamientodeunapáginaPHP,agrandesrasgos,nodifieredelclásicoparaunapáginadinámicadeladoservidor:ElservidorvaareconocerlaextensióncorrespondientealapáginaPHP(Generalmente.php,peropodríaconfigurarseelservidorparaquebusque

Page 32: Manual de PHP - Walter Carnero · sencillo y directo con el que podrías empezar es PHP. Otra de las claves del éxito de PHP es que la mayoría de los CMS más populares (WordPress,

Manual de PHP

http://desarrolloweb.com/manuales/manual-php.html Página 32 de 142

códigoPHPenotrasextensionesdearchivo...)paraejecutarlosbloquesdescriptsPHP.

Elservidor,antesdeenviarlapáginaalnavegadorseencargarádeinterpretaryejecutartodoaquelloqueseencuentreentrelasetiquetascorrespondientesallenguajePHP.Elresto,loenviarasinmásyaque,asumiráquesetratadecódigoHTMLabsolutamentecomprensibleporelnavegador.

Nota:EnPHP7seeliminaronotrosestilosdeaperturaycierredelcódigoPHP:<%y%>,asícomo<script language="php">.

EnPHPlaaperturadelcódigoconeltagensuversióncorta(<?)noseencuentrasiempreactivadopordefecto.EsalgoquedependedelservidorydelaversióndePHPqueestéinstaladaenél.ParaevitarproblemasdebidosalaplataformadondeseejecutaPHPnoterecomendamosutilizarlo.Noobstante,sitieneslaoportunidaddealterarlaconfiguracióndellenguajePHP(mediantelaedicióndelarchivophp.inicorrespondiente,delquehablaremosenotromomento),podríasdefinirquetambiénseinterpreteesaetiquetamedianteladirectiva"short-open-tags".

Usode;paradelimitarsentencias

OtracaracterísticageneraldelosscriptsenPHPeslaformadesepararlasdistintasinstrucciones.Parahacerlo,hayqueacabarcadainstrucciónconunpuntoycoma";".Paralaultimaexpresión,laquevaantesdelcierredeetiqueta,esteformalismonoesnecesario.

<?php echo 'código PHP' ?>

Aunquelasentencia"echo"anterior(quesirveparaescribirdesdePHPsalidaenlapropiapágina)noacabaen";"elcódigoesperfectamenteválido,porqueinmediatamentedespuéstenemoselcierredelscriptPHP.

ComentariosenPHP

Incluimostambiénenestecapitulolasintaxisdecomentarios,quefuncionanmuysimilaresalosdeotroslenguajescomoJava,CoJavascript.

Nota:Uncomentario,paraaquellosquenolosepan,esunafraseopalabraquenosotrosincluimosenelcódigoparacomprenderlomásfácilmentealvolverloaleeruntiempodespuésyque,porsupuesto,elordenadortienequeignoraryaquenovadirigidoasuejecución,sinoanosotrosmismosuotrosdesarrolladoresquepuedanleeresecódigomásadelante.Loscomentariostienenunagranutilidadyaqueesmuyfácilolvidarsedelfuncionamientodeunscriptprogramadountiempoatrásyresultamuyútilsiqueremoshacerrápidamentecomprensiblenuestrocódigoaotrapersona.

Page 33: Manual de PHP - Walter Carnero · sencillo y directo con el que podrías empezar es PHP. Otra de las claves del éxito de PHP es que la mayoría de los CMS más populares (WordPress,

Manual de PHP

http://desarrolloweb.com/manuales/manual-php.html Página 33 de 142

Puesbien,laformadeincluirestoscomentariosesvariabledependiendosiqueremosescribirunalíneaomás.Veamosestoconunprimerejemplodescript:

<?php

$mensaje="Tengo hambre!!"; //Comentario de una linea

echo $mensaje; #Este comentario también es de una linea

/*En este caso

mi comentario ocupa

varias lineas, lo ves? */

?>

Siusamosdoblebarra(//)oelsímbolo#podemosintroducircomentariosdeunalínea.Mediante/y/creamoscomentariosmultilínea.Porsupuesto,nadanosimpidedeusarestosúltimosenunasolalínea.

Noospreocupéissinocomprendéiseltextoentrelasetiquetas,todollegará.OsadelantamosquelasvariablesenPHPsedefinenanteponiendounsímbolodedólar($)yquelainstrucciónechosirveparasacarenpantallaloquehayescritoacontinuación.

Recordamosquetodoeltextoinsertadoenformadecomentarioescompletamenteignoradoporelservidor.Resultaimportanteacostumbrarseadejarcomentarios,esalgoqueseagradececoneltiempo.

EjemplocompletodeunapáginaPHP

AhoraveamosuncódigocompletodeloquepodríaserunapáginaPHP.VerásquecomenzamosconunapáginabásicaescritaconHTMLenlaquehemosinsertadouncódigoPHP.Elcódigodemomentoeslodemenos,loimportanteesvercómoseintegraelcódigoPHPenunapáginaHTML.

<!doctype html>

<html lang="es">

<head>

<meta charset="UTF-8">

<title>Primera página PHP</title>

</head>

<body>

<h1>Esto es HTML</h1>

<?php

echo '<p>Esto viene de PHP</p>';

?>

</body>

</html>

ParapoderprobarestapáginaPHPdeberíasnombrarlaconextensión".php".Podríaseralgocomo"pag1.php"o"index.php".Luegotendrásquecolocarlaeneldirectoriodepublicacióndetuservidor("documentroot"eninglés),cuyodependedecuálseaelservidorqueestésusandoparapodercomenzarconPHP.Normalmenteesacarpetasellamaalgocomo"httpdocs",

Page 34: Manual de PHP - Walter Carnero · sencillo y directo con el que podrías empezar es PHP. Otra de las claves del éxito de PHP es que la mayoría de los CMS más populares (WordPress,

Manual de PHP

http://desarrolloweb.com/manuales/manual-php.html Página 34 de 142

"httpd","htdocs","www",etc.Luego,teniendoelservidorApache(oelservidorquetengasentucaso)encendido,tendrásqueaccederalapáginaatravésde"http://localhost/pag1.php".Aunqueestodependemuchodecómotengasconfiguradotuentornodetrabajo.EnlosartículosdeinstalacióndePHPseofrecenmásdetallessobrecómopuedesconfigurarelentornodetrabajoycuálesseríanlosdirectoriosymodosdeaccesoatusarchivosPHPdesdecadatipodeservidor.

Nota:Otracosaquenosgustaríamencionar,aunquepuedaresultaruntantoavanzada,esqueenlaprácticaesinteresanteseguirunaseriedebuenasprácticas,comolaseparacióndelcódigoporresponsabilidadesoelusodesistemasdetemplates.Quizásesdemasiadoprontoparamencionarlo,perolociertoesqueelhechodePHPpermitirnosmezclarelcódigoHTMLconelcódigoPHPpuedeproduciralalargaproyectosconundifícilmantenimiento.Ahoranoeselmomentodepreocuparteporello,siesqueestásempezandoconPHP,peroesbuenoquelotengasencuentaparamásadelanteyqueconsultes,aquíenDesarrolloWeb.comartículosymanualesmásavanzadosdondeteexplicamoscómocodificardemodoqueteaseguresquetuproyectoseráordenadoyllegodebuenasprácticas.Siempreestábientenerunamiradacríticaennuestrotrabajoafindeexploraraquellasprácticasyherramientasquenospermitansermejoresprofesionales.

EsteartículoesobradeRubénAlvarezFuepublicadoporprimeravezen29/10/2016Disponibleonlineenhttp://desarrolloweb.com/articulos/12.php

VariablesenPHP

Tiposdevariables,característicasgeneralesyaspectosespecíficosdePHPdeestoselementosbásicosdelaprogramación.

LasvariablessonunodelosprimerostemasquetenemosqueconocerenPHPyenlamayoríadeloslenguajesdeprogramación.AsíqueacontinuaciónvamosatrataresteasuntodentrodelManualdePHP,explicandotambiénlostiposdedatosquepodremosencontrarenellenguaje.

AnteriormenteenDesarrolloWeb.com,enelmanualdepáginasdinámicas,yahabíamosintroducidoelconceptodevariable.Noobstantepodemosentenderunavariablecomoundatoalmacenadoenunareferencia.Técnicamenteunavariableapuntaaunaposicióndelamemoria,dondesealmacenaundato.Lasvariablesseutilizanenloslenguajesdeprogramaciónparadarleunnombreaesedato,aesaposicióndelamemoria,demaneraquesepuedaentenderosaberloquecontiene.Alfinal,esosdatosalmacenadossonlosqueseutilizanparaconseguirlosresultadosdelosprogramas.

Porsuparte,untipodedatoseslacaracterísticadeundatoalmacenado.Esdecir,siesdeunaformaconcreta,numérica,alfanumérica,etc.Todosloslenguajestipandealgunamaneralosdatos,aunquealgunossonmáspermisivosqueotrosalahoraderealizaroperacionesconvariablesdedistintostipos.

Nota:Sitienescualquierdudasobreloquesonlasvariablesolostiposdedatosterecomendamosasistiralagrabacióndeestaexcelenteclasedondeteloexplicandeunamaneradetallada.Variablesytiposenloslenguajesdeprogramación.

Page 35: Manual de PHP - Walter Carnero · sencillo y directo con el que podrías empezar es PHP. Otra de las claves del éxito de PHP es que la mayoría de los CMS más populares (WordPress,

Manual de PHP

http://desarrolloweb.com/manuales/manual-php.html Página 35 de 142

$enelnombredelasvariables

Enelcapítuloanterioryacomentábamosque,paraPHP,lasvariableserandefinidascomenzandosiempreporelsímbolodólar($).Esquizásunadelascaracterísticasmásfuertesdellenguaje.AlvereldólaralprincipiodelnombredecualquiervariablepodrásrápidamentededucirquetalcódigoestáescritoenPHP.

Lasvariablessiempredeberíantenerunnombredescriptivosobreloqueellasvanaalmacenar.Portanto,alnombredeunavariableenPHPlecolocaremoselsímbolo$.

<?php $total = 300 ?>

TiposdedatosenPHP

Dependiendodelainformaciónquecontenga,unavariablepuedeserconsideradadeunouotrotipo:

Variablesnuméricas

Estetipodevariablesalmacenacifras,números,quepuedentenerdosclasificacionesdistintas:

Enteros$entero=2002;NumerossindecimalesReales$real=3.14159;Numerosconosindecimal

Variablesalfanuméricas

Estetipodedatosalmacenatextoscompuestos,cadenasdecaracteres,quepuedencontenerletras,símbolosynúmerosocifras.

CadenasAlmacenanvariablesalfanuméricas$cadena="Holaamigo";

Boleanas

Estetipodevariablesalmacenaunvalorlógico,quepuedevalerverdaderoofalso.Esmuycomúnenlaprogramaciónestetipodevariablesboleanas.

Boleanoverdadero$verdadero=true;Boleanofalso$falso=false;

Matrices,tablasoarrays

Esuntipodedatosenelque,enlugardetenerundato,podemosalmacenarunconjuntodeellos,alosqueaccedemosatravésdeíndices.Cadaunadelascasillasdeunarrayolosdatosdenuestramatrizasuvezalmancenaninformacionesnuméricasy/oalfanuméricas,pudiendo

Page 36: Manual de PHP - Walter Carnero · sencillo y directo con el que podrías empezar es PHP. Otra de las claves del éxito de PHP es que la mayoría de los CMS más populares (WordPress,

Manual de PHP

http://desarrolloweb.com/manuales/manual-php.html Página 36 de 142

mezclartiposdevariablesdemaneraarbitrariaentresusdistintascasillas.

ArraysSonlasvariablesqueguardanlastablas$sentido[1]="ver";$sentido[2]="tocar";$sentido[3]="oir";$sentido[4]="gusto";$sentido[5]="oler";

MásadelanteencontraráscapítulosenterosdedicadosalosarraysenPHP.

Objetos

Setratadeconjuntosdevariablesyfuncionesasociadas.Presentanunacomplejidadmayorquelasvariablesvistashastaahoraperosuutilidadesmásqueinteresante.Entraremoscondetalleenlosobjetosmásadelante,yaquesucomplejidadhacedifícilexplicarlasahora.

PHPtienetipadodinámico

Adiferenciadeotroslenguajes,PHPposeeunagranflexibilidadalahoradeoperarconvariables.Enefecto,cuandodefinimosunavariableasignándoleunvalor,elordenadorleatribuyeuntipo.Siporejemplodefinimosunavariableentrecomillas,lavariableseráconsideradadetipocadena:

$variable="5"; //esto es una cadena

Sinembargo,sipedimosennuestroscriptrealizarunaoperaciónmatemáticaconestavariable,noobtendremosunmensajedeerrorsinoquelavariablecadenaseráasimiladaanumérica(PHPharátodoloposibleporinterpretarnuestraoperación,aunquetécnicamentenotengamuchosentidohacerdeterminadasoperaciones):

<?

$cadena="5"; //esto es una cadena

$entero=3; //esto es un entero

echo $cadena+$entero

?>

Estescriptdarácomoresultado"8".Lavariablecadenahasidoasimiladaenentero(aunquesutiposiguesiendocadena)parapoderrealizarlaoperaciónmatemática.Delmismomodo,podemosoperarentrevariablestipoenteroyreal.Nodebemospreocuparnosdenada,PHPseencargadurantelaejecucióndeinterpretareltipodevariablenecesarioparaelbuenfuncionamientodelprograma.

Nota:LoslenguajescomoPHPquepermitenmayorflexibilidadenlostiposdelasvariablessedicenquetienentipadodinámico.Enellosunavariablepuedetenerdistintostiposalolargodesuvida,esdecir,amedidaqueelprogramaseejecutaunavariablepodrácambiardetipo.Generalmenteduranteelprocesamientodelprogramasevainfiriendolostiposdelasvariables,entiempodeejecución,segúneltipodedatosdelvalorqueseleasignaolasoperacionesqueserealizansobreellas.Otramaneradereferirseaestetipodelenguajesdeprogramaciónes"débilmentetipados",aunqueestasegundadenominaciónesmenoscorrecta,porquepuedeinduciraunacomprensiónerrónea,yaque

Page 37: Manual de PHP - Walter Carnero · sencillo y directo con el que podrías empezar es PHP. Otra de las claves del éxito de PHP es que la mayoría de los CMS más populares (WordPress,

Manual de PHP

http://desarrolloweb.com/manuales/manual-php.html Página 37 de 142

enlarealidadlasvariablessiempretienentipos,aunqueestospuedanvariarconeltiempo.

PHPessensiblealasmayúsculasyminúsculas

PHPentiendedemaneradistintalasmayúsculasyminúsculas.Enelcasodelnombrequeledamosaunavariable,noeslomismoescribirlaconmayúsculaominúscula,omezclandomayúsculasyminúsculasdedistintamanera.Portanto,hayquetenermuchocuidadoalahoradeescribirlosnombresdevariables,ynocambiarmayúsculasporminúsculas,yaquePHPentenderádosvariablesdistintasaunquenosotrospodamosintentarreferirnosalamisma.Cuandoestamosempezandoquizásseaunbuenconsejotrabajarasignandonombresalasvariablessiempreenminúsculas,paraevitarestetipodemalentendidosavecesmuydifícilesdelocalizar.

Enelcasoquetengamosunavariableconunnombrecompuestodevariaspalabras,enPHPesunaprácticacomúncolocarlavariabletodaenminúsculaysepararlaspalabrasporguionesbajos.

<?php $mi_variable_bonita = "me gusta PHP" ?>

Variablesasignadasporreferencia

EnPHPtambiénpodemosasignarvariablesporreferencia,aunqueadecirverdadnoesunacaracerísticaqueseusemucho.Enesecasonoselesasignaunvalor,sinootravariable,detalmodoquelasdosvariablescompartenespacioenmemoriaparaelmismodato.

Lanotaciónparaasignarporreferenciaescolocarun"&"antesdelnombredelavariable.

<?php

$foo = 'Bob'; // Asigna el valor 'Bob' a $foo

$bar = &$foo; // Referencia $foo vía $bar.

$bar = "Mi nombre es $bar"; // Modifica $bar...

echo $foo; // $foo también se modifica.

echo $bar;

?>

Estodarácomoresultadolavisualizacióndosvecesdelstring"MinombreesBob".Algocomo:

MinombreesBobMinombreesBob

Nota:TenemosunvideotutorialquenoshabladelasvariablesPHP

EsteartículoesobradeRubénAlvarezFuepublicadoporprimeravezen30/10/2016Disponibleonlineenhttp://desarrolloweb.com/articulos/12.php

Page 38: Manual de PHP - Walter Carnero · sencillo y directo con el que podrías empezar es PHP. Otra de las claves del éxito de PHP es que la mayoría de los CMS más populares (WordPress,

Manual de PHP

http://desarrolloweb.com/manuales/manual-php.html Página 38 de 142

CambiodeltipodelasvariablesenPHP

FormasenqueunavariabledePHPpuedevervariadosutipo.

EnelartículoanteriordelManualdePHPcomenzamosaexplicarcómosetrabajaconvariablesenestelenguaje.YacomentamosquePHPtieneuntipadodinámico,perohayalgunascosasquepuedesnecesitarhacereneldíaadíayquedebessaberparacubrirelconocimientofundamentaldevariablesytiposdedatosenPHP.

PHPnorequierequeindiquemoseltipoquevaacontenerunavariable,sinoquelodeducedelvalorqueasignemosalavariable.Asimismo,seencargadeactualizarautomáticamenteeltipodelavariablecadavezqueleasignamosunnuevovalor.Estoesbásicamenteloquesellama"tipadodinámico"o"tipadodébil",característicanosólodePHP,sinodemuchosotroslenguajescomoJavascript.

Porello,paracambiareltipodeunavariablesimplementeleasignamosunvalorconunnuevotipo.

$cadena = 'esto es una cadena';

$cadena = 34 //La variable $cadena cambió de tipo

Nota:SeexcluyenenestecasoelcambiodevariablesatipoArrayporquelasintaxispuederesultarambiguaalexpresaresecódigo,esdecir,puededarseelcasodequeunalíneadecódigopuedasignificardoscosas.

$a = "1";

//$a es una cadena

$a[0] = "f";

//¿Estamos editando el índice de la cadena o forzando a array?

Enesteartículoveremosdostiposposiblesdealteracióndeltipodevariables,másalládelpropioquehacePHPconelcomportamientoderivadodesutipadodinámico.Aestaoperaciónselaconocehabitualmentecomo"Forzado".

Forzado

Variareltipodedatosquecontieneunavariableconeltiempoesunacosaquenosiempreesaconsejable,porquesinotenemoscertezadesiunavariablecontieneundatodeuntipouotro,aveceslosresultadosobtenidospuedennoserlosesperados.

Paraevitarproblemasenmuchasocasionespuedevenirbienrealizarelforzadodeunavariableauntipoenconcreto,demaneraexplícita,loquenospermitirásaberquecuandollegaelflujodelprogramaaunpuntodado,aquellavariabletendráeltipodedatosesperado.EnPHPexistendiversasmanerasdeforzarunavariableauntipo.

Page 39: Manual de PHP - Walter Carnero · sencillo y directo con el que podrías empezar es PHP. Otra de las claves del éxito de PHP es que la mayoría de los CMS más populares (WordPress,

Manual de PHP

http://desarrolloweb.com/manuales/manual-php.html Página 39 de 142

Establecereltipoconsettype()

Podemosforzarunavariableparaquecambiedetipoconlafunciónsettype().

settype($variable,"nuevo_tipo");

lafunciónsetType()actualizaeltipode$variablea"nuevo_tipo"ydevuelveunboleanoindicandosihuboéxitoonoenlaconversión.

Entre"nuevo_tipo"tenemos:

"integer""double""string""array""object"

Castingdevariables

Hayotramaneraderealizarunforzado,paraqueunavariablesecomportecomountipodeterminado.AhoravamosaverotromecanismodeforzadoqueessimilaraldeotroslenguajescomoCoJava.

$variable = "23";

$variable = (int) $variable;

Losforzadospermitidosson:

(int),(integer)-fuerzaaentero(integer)(real),(double),(float)-fuerzaanúmerocondecimales(comaflotante)(string)-fuerzaacadena(string)(array)-fuerzaaarray(array)(object)-fuerzaaobjeto(object)(unser)-fuerzaanull(binary)-fuerzaa"binarystring"

Conclusión

SiestáscomenzandoconPHPylaprogramaciónengeneral,quizásestetemadelcambiodetipoyelforzadopuedeparecerunainformaciónuntantoavanzadaosinunaaplicaciónclara.Siesasínotepreocupesdemasiadoporahora,perotenpresentequetúcomoprogramadorerescapazdecambiarlostiposdelasvariables,paraquetusprogramashaganexactamenteloquetúdeseas.

CuandohayunaincongruenciadetiposPHPsiempreintentahacerlomásadecuadoconelcódigoqueejecuta,peronosiemprelasoluciónqueéltomaeslaquetúpudieraspensar.En

Page 40: Manual de PHP - Walter Carnero · sencillo y directo con el que podrías empezar es PHP. Otra de las claves del éxito de PHP es que la mayoría de los CMS más populares (WordPress,

Manual de PHP

http://desarrolloweb.com/manuales/manual-php.html Página 40 de 142

esoscasos,elforzadoserárealmenteimportante.Sindudacuandotengasmásexperienciaconellenguajeestassituacionesiránapareciendo.

EsteartículoesobradeMiguelAngelAlvarezFuepublicadoporprimeravezen01/12/2016Disponibleonlineenhttp://desarrolloweb.com/articulos/12.php

ÁmbitodelasvariablesenPHP

ExplicamoscondetalleelámbitodeexistenciadeunavariableenPHPydistinguimosentrevariablesglobalesylocales.

Encualquierlenguajedeprogramaciónlasvariablestienenunámbito,queesellugarolugaresdondetienenvalidez.Elámbitovaríaenfuncióndedondesehayancreadoesasvariables,pudiendoserglobalesolocales.

EnPHP,todaslasvariablescreadasenlapágina,fueradefunciones,sonvariablesglobalesalapágina.Porsuparte,lasvariablescreadasdentrodeunafunciónsonvariableslocalesaesafunción.

Lasvariablesglobalessepuedenaccederencualquierlugardelapágina,mientrasquelasvariableslocalessólotienenvalidezdentrodelafuncióndondehansidocreadas.Demodoqueunavariablegloballapodemosaccederdentrodecualquierpartedelcódigo,mientrasquesiintentamosaccederaunavariablelocalfueradelafuncióndondefuecreada,nosencontraremosconqueesavariablenotienecontenidoalguno.

Ahorabien,siintentamosaccederaunavariableglobaldentrodeunafunción,enprincipiotambiénnosencontraremosconquenosetieneaccesoasuvalor.EstoesasíenPHPpormotivosdeclaridaddelcódigo,paraevitarquesepuedaprestaraconfusiónelhechodeusardentrodeunafunciónunavariablequenohasidodeclaradaporningúnsitiocercano.

Nota:talvezresultendesconocidoslosconceptossobrefunciones,quesetratanmásadelanteenestemanual:funcionesenPHP

Entonces,siqueremosutilizarunavariableglobalalapáginadentrodeunafunción,tenemosqueespecificardealgunamaneraqueesavariablequevamosautilizaresunaglobal.ExistenenPHPunpardemanerasdeutilizarvariablesglobalesalapáginadentrodeunafunción.Sonlassiguientes:

MatrizGLOBALS

ExisteunarrayenPHPllamado$GLOBALS,queguardaunareferenciaatodaslasvariablescreadasdemaneraglobalalapágina.Esunamatrizoarrayasociativo,delosqueenlugarde

Page 41: Manual de PHP - Walter Carnero · sencillo y directo con el que podrías empezar es PHP. Otra de las claves del éxito de PHP es que la mayoría de los CMS más populares (WordPress,

Manual de PHP

http://desarrolloweb.com/manuales/manual-php.html Página 41 de 142

índicesnuméricosutilizaníndicesdetexto,dondecadaíndiceeselnombrequehemosdadoalavariableycadavaloreselcontenidodecadavariable.

Supongamosquetenemosestadeclaracióndevariablesglobalesalapágina,esdecir,fueradecualquierfunción:

$mivariable = "pepe";

$otravariable = 1234;

Siqueremosaccederaesasvariablesdentrodeunafunciónutilizandoelarray$GLOBALStendríamosestecódigo:

function mifuncion(){

//estoy dentro de la función, para aceder a las variables utilizo $GLOBALS

echo $GLOBALS["mivariable"];

echo $GLOBALS["otravariable"];

}

Comosepuedever,seaccedealcontenidodelasvariablesglobalesconelarray$GLOBALS,utilizandocomoíndicesdelamatrizlosnombresdevariablesquedeseamosmostrar.

Estoimprimiríaporpantallaeltexto"pepe1234",elvalordelasdosvariablesunodetrásdelotro.

Declaracióndeusodevariablesglobalesdentrodeunafunción

Otracosaquepodemoshacerparaaccederavariablesglobalesdentrodeunafunciónesespecificaralcomienzodedichafunciónlalistadevariablesquevamosautilizardentro.Paraespecificaresasvariablesutilizamoslapalabra"global"seguidadelalistadevariablesquesevanautilizardelentornoglobal.

function mifuncion(){

global $mivariable, $otravariable;

//con esa línea dentro de la función, declaramos el uso de variables globales

echo $mivariable;

echo $otravariable;

}

Comovemos,con"global"seespecificaquevamosautilizarunasvariablesquefuerondeclaradascomoglobalesalapágina.Unavezhechoesto,yapodemosaccederaesasvariablesglobalescomosiestuvierandeclaradasdentrodelafunción.

Cualquieralteraciónquehagamosalasvariablesdentrodelafunciónpermanecerácuandosehayasalidodelafunción,tantosiaccedemosatravésdelarray$GLOBALSodeclarandocon"global"elusodeesasvariables.

Page 42: Manual de PHP - Walter Carnero · sencillo y directo con el que podrías empezar es PHP. Otra de las claves del éxito de PHP es que la mayoría de los CMS más populares (WordPress,

Manual de PHP

http://desarrolloweb.com/manuales/manual-php.html Página 42 de 142

EsteartículoesobradeMiguelAngelAlvarezFuepublicadoporprimeravezen25/04/2006Disponibleonlineenhttp://desarrolloweb.com/articulos/12.php

VariablesdesistemaenPHP

Quésonyparaquésirvenestasvariablesdelservidor.Comentamosalgunasdelasmásútiles.

EnlosanterioresartículosdelManualdePHPhemosabordadoeltemadelasvariables.Hastaahorahemosexplicadocómocrearnuestraspropiasvariablesyalmacenarvalores,perosihablamosdevariablesenPHPnopodemosdejardemencionaralasvariablesdesistema.

ParaentenderlasvariablesdesistematienesqueapreciarquePHPesunlenguajequeseejecutaenelservidor,bajodemandadeuncliente.Portanto,laejecucióndePHPseproducedentrodeunmarcomuyconcreto,dondeintervienenvariosactores,principalmenteelcliente(generalmenteelusuarioqueentrausandosunavegador)yelservidor(dondeseejecutaelcódigoPHP,quebásicamentedebeproducirlasalidaqueseenviaráalcliente).

AhoraquehasasimiladolanaturalezadePHPcomolenguajedeladoservidor,debesdeentenderqueenesemarcoexistendiversasinformacionesquepuedenserútilesalahoradeejecutaraplicacionesweb.DentrodeunapáginaPHPtendremosportantoaccesoatodaunaseriedevariablesquenosinformansobrenuestroservidorysobreelclientequehasolicitadounadeterminadapágina.Aestasinformaciones,quepodemosrecogerenformadevariables,lesllamamos"variablesdesistema".

Nota:Lainformacióndeestasvariablesesatribuidaporelservidoryenningúncasonosesposiblemodificarsusvaloresdirectamentemedianteelscript.Parahacerloesnecesarioinfluirdirectamentesobrelapropiedadquedefinen.

$_SERVER

Lamayoríadelasvariablesdesistemalaspodemosrecibirapartirdeunarraydenominado$_SERVER.

Nota:$_SERVEResunarrayasociativo,cuyosíndicessoncadenasdetextoynonúmeros.AúnnohemosabordadoeltemadearraysenPHP,peroloveremoscondetallamásadelante.

Técnicamente$_SERVERseconocecomouna"variablesuperglobal",delaquehablaremosenestemismoartículounpocodespués.Existenmultituddedatosasociadosalarray$_SERVER,algunossinutilidadaparenteyotrosrealmenteinteresantesyconunaaplicacióndirectapara

Page 43: Manual de PHP - Walter Carnero · sencillo y directo con el que podrías empezar es PHP. Otra de las claves del éxito de PHP es que la mayoría de los CMS más populares (WordPress,

Manual de PHP

http://desarrolloweb.com/manuales/manual-php.html Página 43 de 142

nuestrasaplicacionesweb.Aquíosenumeramosalgunasdeestasvariablesylainformaciónquenosaportan:

$_SERVER["HTTP_USER_AGENT"]Nosinformaprincipalmentesobreelsistemaoperativoytipoyversióndenavegadorutilizadoporelinternauta.Suprincipalutilidadradicaenque,apartirdeestainformación,podemosredireccionarnuestrosusuarioshaciapáginasoptimizadasparasunavegadororealizarcualquierotrotipodeacciónenelcontextodeunnavegadordeterminado.$_SERVER["HTTP_ACCEPT_LANGUAGE"]Nosdevuelvelaolasabreviacionesdelalenguaconsideradacomoprincipalporelnavegador.Estalenguaolenguasprincipalespuedenserelegidasenelmenúdeopcionesdelnavegador.Estavariableresultatambiénextremadamenteútilparaenviaralinternautaalaspáginasescritasensulengua,siesqueexisten.$_SERVER["HTTP_REFERER"]NosindicalaURLdesdelacualelinternautahatenidoaccesoalapágina.Muyinteresanteparagenerarbotonesde"Atrás"dinámicosoparacrearnuestrospropiossistemasdeestadísticasdevisitas.$_SERVER["PHP_SELF"]NosdevuelveunacadenaconlaURLdelscriptqueestásiendoejecutado.Muyinteresanteparacrearbotonespararecargarlapágina.$_SERVER["HTTP_GET_VARS"]SetratadeunarrayquealmacenalosnombresycontenidosdelasvariablesenviadasalscriptporURLoporformulariosGET.$_SERVER["HTTP_POST_VARS"]SetratadeunarrayquealmacenalosnombresycontenidosdelasvariablesenviadasalscriptpormediodeunformularioPOST.$_SERVER["HTTP_COOKIE_VARS"]Setratadeunarrayquealmacenalosnombresycontenidosdelascookies.Veremosquésonmásadelante.$_SERVER["PHP_AUTH_USER"]Almacenalavariableusuariocuandoseefectúalaentradaapáginasdeaccesorestringido.Combinadocon$_SERVER["PHP_AUTH_PW"]resultaidealparacontrolarelaccesoalaspáginasinternasdelsitio.$_SERVER["PHP_AUTH_PW"]Almacenalavariablepasswordcuandoseefectúalaentradaapáginasdeaccesorestringido.Combinadocon$_SERVER["PHP_AUTH_USER"]resultaidealparacontrolarelaccesoalaspáginasinternasdelsitio.$_SERVER["REMOTE_ADDR"]MuestraladirecciónIPdelvisitante.$_SERVER["DOCUMENT_ROOT"]Nosdevuelveelpathfísicoenelqueseencuentraalojadalapáginaenelservidor.$_SERVER["PHPSESSID"]Guardaelidentificadordesesióndelusuario.Veremosmásadelanteenquéconsistenlassesiones.

Notodasestasvariablesestándisponiblesenlatotalidaddeservidoresoendeterminadasversionesdeunmismoservidor.además,algunasdeellashandeserpreviamenteactivadasodefinidaspormediodealgúnacontecimiento.Así,porejemplo,lavariable$HTTP_REFERERnotendráunvalordefinido,amenosqueelinternautaaccedaalscriptapartirdeunenlacedesdeotrapágina.

Siquieresvercuáleselconjuntocompletodelasvariablesdelsistemaquedisponesdentrode$_SERVERentuentorno,essuficienteconescribiryejecutarunapáginaPHPquecontengaestecódigo:

Page 44: Manual de PHP - Walter Carnero · sencillo y directo con el que podrías empezar es PHP. Otra de las claves del éxito de PHP es que la mayoría de los CMS más populares (WordPress,

Manual de PHP

http://desarrolloweb.com/manuales/manual-php.html Página 44 de 142

<?php

var_dump($_SERVER);

?>

Esorealizaráunlistadodetodoelcontenidodelarrayasociativo$_SERVERylomostrarácomosalidaenlapáginaweb.

Variablessuperglobales

ApartirdePHP4.1.0,sedisponedeunconjuntodevariablesdetipoarrayquemantieneninformacióndelsistema,llamadas"superglobales"porquesedefinenautomáticamenteenunámbitoglobalyalasquesepuedeaccederdesdecualquierpuntodelcódigoPHP.

Nota:EstasvariablesyaexistíananteriormenteenPHP,aunqueseaccedíandesdeotrosarrays.SileesartículosantiguosdePHP,oyaconocesPHPdesdehacemuchotiempo,tepuedeaclararquealgunasdeestasvariablessuperglobalesseaccedíanaccedíanantespormediodelosarraysdeltipo$HTTP_*_VARS.Porejemplo$_GETantesera$HTTP_GET_VARSo$_POSTeraantes$HTTP_POST_VARS.Laformaantiguadereferenciaalasvariablessuperglobalestodavíasepuedeactivarenalgunosservidores,desdeelphp.iniconladirectivaregister_long_arrays.

LalistadeestasvariablessuperglobalesdePHPeslasiguiente:

$GLOBALS

Contieneunareferenciaacadavariabledisponibleenelespectrodelasvariablesdelscript.Lasllavesdeestamatriz(índicesdelarray)sonlosnombresdelasvariablesglobales.$GLOBALSexistedesePHP3.

$_SERVER

Variablesdefinidasporelservidorwebódirectamenterelacionadasconelentornoendonelscriptseestaejecutando.Esequivalentealoqueantesseconocíacomo$HTTP_SERVER_VARS.Sonlasvariablesdesistemaquehemosexplicadoantesenesteartículo.

$_GET

VariablesproporcionadasalscriptpormediodeHTTPGET.Esequivalentealoqueantesseconocíacomo$HTTP_GET_VARS.

$_POST

VariablesproporcionadasalscriptpormediodeHTTPPOST.Esequivalentealoqueantesseconocíacomo$HTTP_POST_VARS.

Page 45: Manual de PHP - Walter Carnero · sencillo y directo con el que podrías empezar es PHP. Otra de las claves del éxito de PHP es que la mayoría de los CMS más populares (WordPress,

Manual de PHP

http://desarrolloweb.com/manuales/manual-php.html Página 45 de 142

$_COOKIE

VariablesproporcionadasalscriptpormediodeHTTPcookies.Esequivalentealoqueantesseconocíacomo$HTTP_COOKIE_VARS.

$_FILES

VariablesproporcionadasalscriptpormediodelasubidadeficherosviaHTTP.Esequivalentealoqueantesseconocíacomo$HTTP_POST_FILES.

$_ENV

Variablesproporcionadasalscriptpormediodelentorno.Esequivalentealoqueantesseconocíacomo$HTTP_ENV_VARS.

$_REQUEST

Variablesproporcionadasalscriptpormediodecualquiermecanismodeentradadelusuario.Lapresenciayelordenenqueaparecenlasvariablesenestamatrizesdefinidoporladirectivadeconfiguraciónvariables_order.EstamatriznotieneunanálogoenversionesanterioresaPHP4.1.0.

Nota:Comoen$_REQUESTsepuedenmezclarvariablesquepuedenvenirdevarioslugares,nosuelesermuyrecomendableusarla,porquenospuedeninyectardatosdediversasmaneras.Silosdatossabemosquenosllegandeunformulariolosuyoesusar$_POST,quenosaseguraqueningunaentradaporotrolugarnoscontaminaráeseconjuntodevariables.Solopodríasconfiaren$_REQUESTsilaoperaciónquequieresrealizaresrealmentepococríticaparalaseguridaddetuaplicación.

$_SESSION

Variablesregistradasenlasesióndelscript.Esequivalentealoqueantesseconocíacomo$HTTP_SESSION_VARS.VeatambiénlasecciónFuncionesparaelmanejodesessionesparamásinformación.

Conclusión

Demomentodejamosesteconocimientoenelaire.Abordaremoscadaunadeestasvariablessuperglobalesenelfuturo,endiversaspartesdelmanual.Porejemplo$_SESSIONloveremoscuandohablemosdelasesiónenPHP,$_POSTcuandoseexpliqueelenvíodeformularios,etc.

EsteartículoesobradeRubénAlvarezFuepublicadoporprimeravezen01/01/2001

Page 46: Manual de PHP - Walter Carnero · sencillo y directo con el que podrías empezar es PHP. Otra de las claves del éxito de PHP es que la mayoría de los CMS más populares (WordPress,

Manual de PHP

http://desarrolloweb.com/manuales/manual-php.html Página 46 de 142

Disponibleonlineenhttp://desarrolloweb.com/articulos/12.php

OperadoresenPHP

Listadescriptivadelosoperadoresmásfrecuentementeutilizados

ParaavanzarnuestroconocimientoenellenguajePHPtenemosquedetenernosaexplicarlosoperadores,quesonlossímbolosquenospermitenexpresartodotipodeoperacionesentredatos.

Cuandoseestudiaunlenguajedeprogramación,aprenderlosoperadoresesalgoquegeneralmenterealizassobrelamarcha,esdecir,amedidaquevashaciendoejemplosvasaplicandooperadoresysumemorizaciónesalgoquesurgedemaneranatural,sintenerquerealizarmuchosesfuerzos.

Esportanto,queenelManualdePHPnosvamosadeteneracomentarcuálessonlosoperadoresenPHP,perolasprácticasvendránpocoapocoalolargodesucesivosartículos.Nopretendasmemorizarlostodos,simplementetenlosencuentayvuelveaquímásadelantepararefrescarelconocimiento.

TambiénadvertimosquelosoperadoresenPHPsonmásricosdeloquesevaaverenesteartículo,esdecir,existenmásoperadoresquenovamosaincluirenesteartículo.Sinembargo,hayqueaclararqueenel99.9%delasocasionesqueusasoperadoresseránsiemprelosquevamosaconoceracontinuación.

Quésonoperadores

Unoperadornospermiterealizarunaoperaciónentreunoomásvalores.Eloperadortomaesosvaloresdeentradaylosrelacionaentresi,realizandounaoperaciónyaplicandootrovalorcomoresultado.Paraentendernos,operadoressonlossímbolosqueusamosenlasmatemáticasparaexpresarcuentasconnúmeros,comolossímbolosquenosindicanciertasoperaciones:suma,resta,multiplicación,división...

Enunlenguajedeprogramaciónlosvaloresquevamosarelacionarmedianteoperadorespuedenestarcontenidosenvariables,oescritosenelpropiocódigo.Losoperadorestomanesosvaloresylosmodificangenerandonuevosvalores.Avecessonconocidasoperacionesmatemáticas,peroavecessonoperacioneslógicasodeasignación,porponervariosejemplos.

OperadoresenPHPportiposdeoperaciones

Enloscapítulosanterioresyahemosutilizadoennuestrosejemplosalgunosoperadores.Ahoralesvamosaponernombres,agrupadosatendiendoaltipodeoperaciónquerealizan.

Operadoresaritméticos

Nospermitenrealizaroperacionesnuméricasconnuestrasvariables.Sonlosmásfácilesdeasimilar,porquegeneralmentetodosconocemosesasoperaciones.

Page 47: Manual de PHP - Walter Carnero · sencillo y directo con el que podrías empezar es PHP. Otra de las claves del éxito de PHP es que la mayoría de los CMS más populares (WordPress,

Manual de PHP

http://desarrolloweb.com/manuales/manual-php.html Página 47 de 142

+Suma-Resta*Multiplicación/División%Módulo(restodeladivisión)**Exponenciación(2**3,elevar2laatercerapotencia)

Nota:Eloperadoraritméticoquepuederesultarmásdesconocidoparaloslectoreseseloperador%.Explicamosconmayordetenimientosufuncionamientoyunejemploenelqueesútileneltaller:ListasdeelementosconcoloresalternosenPHP.

Operadoresdeasignación

Losoperadoresdeasignaciónsonlosmáshabitualesynospermitentraspasarvaloresenvariables.Asignareselprocesoporelcualcolocamosunvalorenunavariable.

=Asignación

Enelpasadoyahabíamoscreadovariablesyasignadovalores,porloquelodebesdereconocer.Lousamosasí:

$valor = 'Esto es lo que se va a asignar a la variable';

Además,enlaasignaciónpodríadarseelcasoqueelvaloraasignarfueseelresultadoderealizarunaoperación.

$a = 23;

$b = 3;

$c = $a - $b;

Nota:Despuésdelaejecucióndeesecódigo¿Cuálseráelvalordelavariable$c?.Seguroquededuceselvalor20.Siesasíestásenlocierto.Elresultadodelaoperaciónde$a(quevale23)menos$b(quevale3)esiguala20,queseasignatodoseguidoalavariable$c.Loquehasvistocomovaloraasignara$c($a-$b)esloqueseconocecomounaexpresión.Antesdeasignarserealizaelcómputodelaexpresiónyluegoseasignaelvalor.

Comohaspodidover,asignaresunaoperaciónbiensimple,loqueestáaladerechadeloperadorseasignaalavariablequeestáalaizquierda.Notienemás.Sinembargo,PHPincluyeunaseriedeoperadoresdeasignaciónconunaoperaciónasociada,quenospermitenrealizaresaoperaciónyunaasignaciónenunúnicopaso.

+=Sumayasignación

Page 48: Manual de PHP - Walter Carnero · sencillo y directo con el que podrías empezar es PHP. Otra de las claves del éxito de PHP es que la mayoría de los CMS más populares (WordPress,

Manual de PHP

http://desarrolloweb.com/manuales/manual-php.html Página 48 de 142

-=Restayasignación*=Multiplicaciónyasignación/=Divisiónyasignación%=Móduloyasignación.=Concatenaciónyasignación

$x = 5;

$x += 5; //$x valdrá 10

$cadena = "Hola ";

$cadena .= "mundo"; //$cadena ahora vale "hola mundo"

Nota:Miramásabajo"operacionessobrecadenas"paraentenderlaconcatenación.

Operadoresdecomparación

Seutilizanprincipalmenteennuestrascondicionesparacomparardosvariablesyverificarsicumpleonolapropiedaddeloperador.

==Compruebasisoniguales!=Compruebasisondistintos===Compruebasisonigualesydeexactamenteelmismotipo!==Compruebasisondistintosodedistintotipo<>Diferente(igualque!=)<Menorqué,compruebasiunvaloresmenorqueotro>Mayórqué<=< code=""> Menor o igual>=Mayoroigual<=>Comparadordeorden.(PHP7)??unooelotro(PHP7)

Enesteconjuntodeoperadoresdecomparaciónencontramosvariosoperadoresnuevos,incorporadosenPHP7.Losestudiaremosaparte.Perolosquemásseutilizansonlosotros,querealmentesonbastantesencillosdeaprender,aunqueparaverejemplosinteresantestenemosqueentenderlasestructurasdecontrol.

Vamosaadelantarnosunpoco,presentandoaquíuncódigoenelqueusamoslaestructuradecontrolcondicionaldePHP,quenosserviráparacompararvaloresdadosenunaexpresiónyhacercosascuandocumplaonociertacondición.

$a = 20;

$b = 30;

if($a < $b) {

Page 49: Manual de PHP - Walter Carnero · sencillo y directo con el que podrías empezar es PHP. Otra de las claves del éxito de PHP es que la mayoría de los CMS más populares (WordPress,

Manual de PHP

http://desarrolloweb.com/manuales/manual-php.html Página 49 de 142

echo '$a es menor que $b';

}

Ejecutandoesecódigoobtendremoslasalida"$aesmenorque$b",porquelaoperacióndecomparaciónserealizóysuresultadofueafirmativo.

Esinteresante,aunqueincidiremosmásadelante,laexistenciadelosoperadores===y!==quenosolocompruebansialgoesigualaotracosa,sinoqueademástienenencuentalostiposdelasvariables.Miraprimeroestecódigo:

$a = 20;

$b = "20";

if($a == $b) {

echo '$a es igual que $b'; // (sin tener en cuenta los tipos)

}

ComoresultadodeejecuciónPHPnosdirá"$aesigualque$b".Estoesporquelaoperacióndecomparaciónrealizadaconeloperador==notieneencuentalostiposdelasvariables.ParaPHP20y"20"eslomismo.Sinembargo,ahoramiraelsiguientecódigo:

$a = 20;

$b = "20";

if($a === $b) {

echo '$a es igual que $b, y del mismo tipo';

} else {

echo '$a es distinto que $b, o de distinto tipo';

}

Alejecutaresecódigoobtendremoslasalida"$aesdistintoque$b,odedistintotipo".Porquealusareloperador===síleestamospidiendoaPHPquetengaencuentalostiposparadecirnossialgoesigualaotracosa.

Nota:Puedessabermássobrelaestructura"if"enelartículosobrelaestructuracondicionaldePHP.

Operadoreslógicos

Losoperadoreslógicossirvenpararealizaroperacioneslógicas,valgalaredundancia.Sonoperacionesquealfinalvanadevolverun"sí"oun"no",positivoonegativo.Seusanencombinaciónconlosoperadoresdecomparacióncuandolaexpresióndelacondiciónlorequiere.

Page 50: Manual de PHP - Walter Carnero · sencillo y directo con el que podrías empezar es PHP. Otra de las claves del éxito de PHP es que la mayoría de los CMS más populares (WordPress,

Manual de PHP

http://desarrolloweb.com/manuales/manual-php.html Página 50 de 142

andOperaciónlógica"y",seráverdaderosiambossonverdaderos.orOperaciónlógica"o",seráverdaderosiunodeellosesverdaderoxorOperaciónlógica"xor",seráverdaderosiunodeellosesverdadero,peronoambos.!Operacióndenegación,sieraverdaderopasaafalsoyviceversa.&&Operaciónlógica"y"||Operaciónlógica"o"

Losoperadoreslógicostambiénseusangeneralmenteenexpresionesquevasausarparaevaluarenestructurasdecontrol.Suoperacióntienesentidogeneralmentecuandotrabajamosconvaloresboleanos(síono)oexpresionesqueunavezevaluadasproducenvaloresboleanos.

$a = true;

$b = false;

if($a && $b) {

echo '$a y $b son los dos verdaderos';

} else {

echo 'o uno de $a o $b son falsos, o los dos son falsos';

}

Esecódigonosdiráque"ounode$ao$bsonfalsos,olosdossonfalsos".

Nota:PuedeparecercuriosoqueenPHPhayadosoperadoresquesirvenparalaoperaciónlógica"y"ydosparalaexpresiónlógica"o".Dehechoesbastanteextraño.Elmotivoesquecadaoperadortieneunaprecendenciadeoperadoresdistinta.

Operadoresdeincremento

Sirvenparaaumentarodisminuirenunaunidadelvalordeunavariable.Sonatajosparahacerunaoperacióntípicaenlosrecorridosdebucles,deaumentarodisminuirunvalorqueusamosparallevarlacuentadelasiteracionesrealizadas.

++$aPre-incremento$a++Post-incremento--$aPre-decremento$a--Post-decremento

Estosoperadoressoninteresantes,porquerealizandoscosas,igualquelosoperadoresdeasignacióncombinadaquevimosantes.Porunladoundecrementooincrementoyporotroladosedevuelvenellosmismoscomoresultadodeloperador.Locuriosoesqueexistenlos"pre"ylos"post"yesquefuncionandemaneraunpocodistinta.

Cuandotenemosunpre-incrementoopre-decremento,primeroserealizaelincremento/decrementoyluegosedevuelveesevalor.Conelpost-incrementoopost-decremento,primerosedevuelveelvalororiginalyluegoserealizaelincremento/decremento.

Page 51: Manual de PHP - Walter Carnero · sencillo y directo con el que podrías empezar es PHP. Otra de las claves del éxito de PHP es que la mayoría de los CMS más populares (WordPress,

Manual de PHP

http://desarrolloweb.com/manuales/manual-php.html Página 51 de 142

Paraacabardeentenderloesmejorexaminarestecódigo:

$a = 3;

$b = ++$a;

echo "\$a vale $a y \$b vale $b"; //$a vale 4 y $b vale 4

$a = 3;

$b = $a++;

echo "\$a vale $a y \$b vale $b"; //$a vale 4 y $b vale 3

Enestecódigocomosalidaobtenemoscosasdistintasporelpre-incrementoyelpost-incremento.Lasalidaapareceallado,enelcomentario.Analízaloypodrásentendercómoesposible.

Operadoresdecadenas

Cuandotrabajamosconcadenasdecaracterestenemosunoperadorespecialqueeseldelaconcatenación.Sirveparaunirunacadenaalaotra.

.Concatenación

$saludo = "Hola ";

$nombre = "DesarrolloWeb.com";

$saludoCompleto = $saludo . $nombre; // vale "Hola DesarrolloWeb.com"

Precedenciadeoperadores

Cuandoseaprendeunleguajedeprogramacióndebemosprestaratenciónespecialalapredecenciadeoperadores,queesbásicamenteunconjuntodereglasyordenporelqueseiránevaluandolosoperadorescuandotrabajamosconexpresionesqueincluyenvariosdeellos.

Igualqueenlasmatemáticas,enocasiones,sihacemoslasoperacionesenunordenuotro,losvaloresfinalespuedentambiéntenercambios.Enlenguajesdeprogramación,dependiendodelordenenelqueseapliquenesosoperadores,lasexpresionespuedendarpiearesultadosdistintos.

Porejemplo,tomalaexpresión:2 * 3 + 10

Siseresuelveprimerolasumasería2*13=26.Siseresuelveprimerolamultiplicaciónsería6+10=16.

¿cuáldeesasdosopcionesserálaquePHPdaporválida?Laprecedenciadeoperadoressirveparaaclararesadudayquelosprogramadoressepanaprioricómoellenguajevaaresolverlasexpresiones,siendocapacesdeescribirlasdemodoquelasoluciónsealaqueellosesperaban.

Sinembargo,nosiemprelapredecenciadellenguajeeslaquenosotrosdeseamosquese

Page 52: Manual de PHP - Walter Carnero · sencillo y directo con el que podrías empezar es PHP. Otra de las claves del éxito de PHP es que la mayoría de los CMS más populares (WordPress,

Manual de PHP

http://desarrolloweb.com/manuales/manual-php.html Página 52 de 142

aplique.Parafacilitarlascosasexistenlosparéntesis,quenospermitendefinirnuestrasexpresionesmarcandoquéoperadoresdebenresolverseantes.Dichodeotromodo,siemprequeusemosparéntesisestaremosobligandoalcompiladoraresolverantesdeterminadasoperaciones,apesardelaprecedenciaqueéltengadefinidademanerapredeterminada.

Laexpresióndeantes,escritadeestemodo:(2 * 3) + 10notendríalugaradistintasinterpretaciones.Obviamente,debemosconocerlaprecedenciadeoperadoresparanodarlugaracasosdondeelintérpretedePHPpuedaobtenerresultadosnoesperados.Osino,estaremosobligadosausarsiempreparéntesis,produciendoexpresionesdecomplejidadsuperioralanecesaria.

Nota:Tambiénpuededarseelcasoque,aunquesepamosbienlapredecencia,colocarunosparéntesispuedeayudaralalegibilidaddelcódigo,dadoquecualquierlectorhumano,alverlosparéntesissabráinmediatamentequeesepedazodeexpresiónseevaluaráantes.

TerecomendamosleerladocumentacióndePHPparaaprendermássobrelaprecedenciayconsultarlatablacompleta,queesunpocolargacomoparareflejarlaaquí.

EsteartículoesobradeMiguelAngelAlvarezFuepublicadoporprimeravezen12/12/2016Disponibleonlineenhttp://desarrolloweb.com/articulos/operadores-php.html

Page 53: Manual de PHP - Walter Carnero · sencillo y directo con el que podrías empezar es PHP. Otra de las claves del éxito de PHP es que la mayoría de los CMS más populares (WordPress,

Manual de PHP

http://desarrolloweb.com/manuales/manual-php.html Página 53 de 142

Arraysycadenas

NosdetenemosparavercómosonlosarraysenPHP,laestructuradedatosmásesencialqueexiste.AdemásaprenderemosatrabajarconcadenasenPHP.

TablasoArraysenPHP

Creacióndetablaspormediodevariablestipoarray.UtilidaddelosarraysenlenguajesdeprogramaciónengeneralyenPHPenparticular,juntoconalgunasfuncionesrelacionadas.

Untipodevariablequeyahemosdescritoperopuedeserrelativamentecomplicadoaasimilar,conrespectoalamayoría,sonlosarrays.EnésteyotraseriedeartículosdelManualdePHPvamosaabordarquésonlosArraysycómousarlosenellenguajePHP.

Comohaspodidoentenderantes,unavariablegeneralmentealmacenaundato,yaseadetipocadena,numérico,etc.Bueno,puesunarrayescomounavariablecapazdealmacenarunconjuntodedatos.Tambiénlospodemosconocerconelnombrede"arreglo","tabla"o"matriz".

Dadoqueenarraysomoscapacesdealmacenarvarioselementos,esnecesarioelusodeuníndiceparapoderreferirnosacadaunodeellos.Eseíndiceavecesseconocecomo"clave".ExistenenPHParraysconíndicesnuméricos(losarraysmáscomunes)yconíndicesalfanuméricos(tambiénllamadosarraysasociativos,muyútiles,peromenoscomunes),queveremostambiénenesteartículo.

Arrayscomunes,índicesnuméricos

Encapítulosanterioresponíamoselejemplodeunarrayllamadosentidoqueconteníalosdistintossentidosdelserhumano:

$sentido[1]="ver";

$sentido[2]="tocar";

$sentido[3]="oir";

$sentido[4]="gustar";

$sentido[5]="oler";

Enestecasoestearraycatalogasuselementos,comúnmentellamadosvalores,pornúmeros.Losnúmerosdel1al5sonporlotantolasclavesylossentidos("tocar","oir"...)sonlosvaloresasociados.

Arraysasociativos

Page 54: Manual de PHP - Walter Carnero · sencillo y directo con el que podrías empezar es PHP. Otra de las claves del éxito de PHP es que la mayoría de los CMS más populares (WordPress,

Manual de PHP

http://desarrolloweb.com/manuales/manual-php.html Página 54 de 142

Silodeseamos,esposibleemplearnombres(cadenas)paraclasificarloselementosdelarray.Loúnicoquedeberemoshaceresentrecomillarlasllavesalfanuméricasyentoncestendremosunarrayasociativo:

$moneda["espana"]="Peseta";

$moneda["francia"]="Franco";

$moneda["usa"]="Dolar";

Otraformadedefiniridénticamenteestemismoarrayyquenospuedeayudarparalacreacióndearraysmáscomplejoseslasiguientesintaxis:

<?

$moneda=array("espana"=> "Peseta","francia" => "Franco","usa" => "Dolar");

?>

Arraysmultidimensionales

Unaformamuypracticadealmacenardatosesmediantelacreacióndearraysmultidimensionales(tablasomatricesconmásdeunadimensión).Pongamoselejemplosiguiente:Queremosalmacenardentrodeunamismatablaelnombre,monedaylenguahabladaencadapaís.Parahacerlopodemosemplearunarrayllamadopaísquevendrádefinidoporestastrescaracterísticas(claves).Paracrearlo,deberíamosescribirunaexpresióndelmismotipoquelavistaanteriormenteenlaquemeteremosunaarraydentrodelotro.Esteprocesodeincluirunainstrucciondentrodeotrasellamaanidaryesmuycorrienteenprogramación:

<?

$pais=array

(

"espana" =>array

(

"nombre"=>"España",

"lengua"=>"Castellano",

"moneda"=>"Peseta"

),

"francia" =>array

(

"nombre"=>"Francia",

"lengua"=>"Francés",

"moneda"=>"Franco"

)

);

echo $pais["espana"]["moneda"] //Saca en pantalla: "Peseta"

?>

Antesdeentrareneldetalledeestepequeñoscript,comentemosalgunospuntosreferentesalasintaxis.

Page 55: Manual de PHP - Walter Carnero · sencillo y directo con el que podrías empezar es PHP. Otra de las claves del éxito de PHP es que la mayoría de los CMS más populares (WordPress,

Manual de PHP

http://desarrolloweb.com/manuales/manual-php.html Página 55 de 142

Comopuedeverse,enestasecuenciadescript,nohemosintroducidopuntoycoma";"alfinaldecadalínea.Estoessimplementedebidoaqueloquehemosescritopuedeserconsideradocomounasolainstrucción.Enrealidad,somosnosotrosquienesdecidimoscortarlaenvariaslíneaspara,así,facilitarsulectura.Laverdaderainstrucciónacabaríaunavezdefinidocompletamenteelarrayyesprecisamenteahídondehemoscolocadoelúnicopuntoycoma.Porotraparte,podéisobservarcómohemosjugadoconeltabuladorparaseparardelladoizquierdo(indentar)unaslíneasmásqueotras.Estotambiénlohacemosporcuestionesdeclaridad,yaquenospermiteverquépartesdelcódigoestánincluidasdentrodeotras.Esimportanteacostumbrarseaescribirdeestaformadelmismomodoqueaintroducirloscomentariosyaquelaclaridaddelosscriptsesfundamentalalahoradedepurarlos.Unpocodeesfuerzoalahoradecrearlospuedeahorrarnosmuchashorasalahoradecorregirlosomodificarlosmesesmástarde.

Pasandoyaalcomentariodelprograma,comopodéisver,éstenospermitealmacenartablasy,apartirdeunasimplepetición,visualizarlasundeterminadovalorenpantalla.

Lautilidaddelosarraysenlenguajesdeprogramaciónesenorme.Conellosseresuelventodotipodenecesidades:contarconestructurasdedatosquenospermitanrealizardeterminadostiposdeaccionesyrealizaralgoritmoscapacesderesolverdeunamaneraelegantelamásvariadagamadeprocedimientos.

FuncionesdeArrayenPHP

PHPincluyeunnutridoconjuntodefuncionesparatrabajarconArrays.Enellasnospodemosapoyarpararealizartodaunaseriedeoperacionestípicascomoordenarelementosporordenalfabéticodirectooinverso,porclaves,contarelnumerodeelementosquecomponenelarrayademásdepodermovernospordentrodeélhaciadelanteoatrás.

MuchassonlasfuncionespropuestasporPHPparaeltratamientodearrays,novamosaentraraquíenunadescripcióndelasmismas.Sóloincluiremosestapequeñatablaquepuedesercomplementada,sinecesario,conladocumentaciónqueyahemosmencionado.

Degranutilidadestambiénelbucleforeachquerecorredeformasecuencialelarraydeprincipioafin.

ParacomplementarestainformaciónresultarádegraninteréselartículoTrabajocontablasoarraysenPHPyparalosqueprefieranlaformaciónenvídeo,recomendamosverlosvideotutorialessobrelosarraysenPHP.Másadelante,cuandoleassobrelasestructurasde

Page 56: Manual de PHP - Walter Carnero · sencillo y directo con el que podrías empezar es PHP. Otra de las claves del éxito de PHP es que la mayoría de los CMS más populares (WordPress,

Manual de PHP

http://desarrolloweb.com/manuales/manual-php.html Página 56 de 142

controlenelManualdePHP,tambiénencontrarásdiversosejemplosderecorridosaarrays.

EsteartículoesobradeRubénAlvarezFuepublicadoporprimeravezen12/12/2016Disponibleonlineenhttp://desarrolloweb.com/articulos/arrays-en-php.html

TrabajocontablasoarraysenPHP

Vemosalgunasdelasfuncionestípicasdeltrabajoconarraysatravésdeunapequeñaexplicaciónyuncódigodeejemplodeuso.

Enelartículoanterior,sobreArraysenPHP,explicamoscómoeralasintaxisparalacreacióndeestetipodeestructurasdedatosenPHP.Ahoraqueyasabescómocreararrays,tantoconíndicesnuméricoscomoconíndicesasociativos,vamosavervariosejemplosdetrabajoenPHPqueilustraránunpocoelfuncionamientodealgunasdelasfuncionesdearrays(arreglos,vectores,matricesotablasencastellano).

EsteartículoademásteserviráparaconoceryaprenderausaralgunasdelasfuncionesmásútilesquetraeconsigoPHPparaeltrabajoymanipulacióndearrays.Tenemosqueadvertirque,siestáscomenzandoconPHPleyendoelManualdePHPdeDesarrolloWeb.com,algunosdelosejemplosverásquetienencódigoconelementosdellenguajequenohemostocadotodavía,comolasestructurasdecontrolparahacerbuclesconlosquerecorrerloselementosdeunarreglo.Esperamosquenotedespiste.Recuerdaquemásadelanteenestemanualpodrásencontrarexplicacionessobretodoello.Dichoeso,vamossinmásaintroducirnosenmateriaconvariosejemplosinteresantes.

Losejemplosquepodrásencontrarestándivididosendossecciones,aumentarelnúmerodeposicionesdeunarrayoreducirelnúmerodecasillasdisponibles.

Reducireltamañodeunarray

Conlassiguientesfuncionesconsiguesquitarelementosenunarray.Veremoscómoretirarcasillasdearraysdetresmanerasdistintas,perorecuerdaquetienesmuchasmásalternativassileesladocumentacióndefuncionesparatrabajoconArrays.

array_slice()

Paradisminuirelnúmerodecasillasdeunarreglotenemosvariasfunciones.Entreellas,array_slice()lautilizamoscuandoqueremosrecortaralgunascasillasdelarreglo,sabiendolosíndicesdelascasillasquedeseamosconservar.

Recibetresparámetros.Elarray,elíndicedelprimerelementoyelnúmerodeelementosatomar,siendoesteúltimoparámetroopcional.

Enelejemplosiguientetenemosunarrayconcuatronombrespropios.Enlaprimeraejecucióndearray_slice()estamosindicandoquedeseamostomartodosloselementosdesdeelíndice0

Page 57: Manual de PHP - Walter Carnero · sencillo y directo con el que podrías empezar es PHP. Otra de las claves del éxito de PHP es que la mayoría de los CMS más populares (WordPress,

Manual de PHP

http://desarrolloweb.com/manuales/manual-php.html Página 57 de 142

(elprincipio)hastaunnúmerototalde3elementos.

Elsegundoarray_slice()indicaquesetomentodosloselementosapartirdelíndice1(segundacasilla).

<?php

$entrada = array ("Miguel", "Pepe", "Juan", "Julio", "Pablo");

//modifico el tamaño

$salida = array_slice ($entrada, 0, 3);

//muestro el array

foreach ($salida as $actual)

echo $actual . "<br>";

echo "<p>";

//modifico otra vez

$salida = array_slice ($salida, 1);

//muestro el array

foreach ($salida as $actual)

echo $actual . "<br>";

?>

Tendrácomosalida:

MiguelPepeJuan

PepeJuan

array_shift()

Estafunciónextraeelelprimerelementodelarrayylodevuelve.Además,acortalalongituddelarrayeliminandoelelementoqueestabaenlaprimeracasilla.Siemprehacelomismo,portanto,norecibirámásqueelarrayalquesedeseaeliminarlaprimeraposición.

Enelcódigosiguientesetieneelmismovectorconnombrespropiosyseejecutadosveceslafunciónarray_shift()eliminandounelementoencadaocasión.Seimprimenlosvaloresquedevuelvelafunciónyloselementosdelarrayresultantedeeliminarlaprimeracasilla.

<?php

$entrada = array ("Miguel", "Pepe", "Juan", "Julio", "Pablo");

//quito la primera casilla

$salida = array_shift ($entrada);

//muestro el array

echo "La función devuelve: " . $salida . "<br>";

foreach ($entrada as $actual)

echo $actual . "<br>";

echo "<p>";

Page 58: Manual de PHP - Walter Carnero · sencillo y directo con el que podrías empezar es PHP. Otra de las claves del éxito de PHP es que la mayoría de los CMS más populares (WordPress,

Manual de PHP

http://desarrolloweb.com/manuales/manual-php.html Página 58 de 142

//quito la primera casilla, que ahora sería la segunda del array original

$salida = array_shift ($entrada);

echo "La función devuelve: " . $salida . "<br>";

//muestro el array

foreach ($entrada as $actual)

echo $actual . "<br>";

?>

Dacomoresultado:

Lafuncióndevuelve:MiguelPepeJuanJulioPablo

Lafuncióndevuelve:PepeJuanJulioPablo

unset()

Seutilizaparadestruirunavariabledada.Enelcasodelosarreglos,sepuedeutilizarparaeliminarunacasilladeunarrayasociativo(losquenotieneníndicesnuméricossinoquesuíndiceesunacadenadecaracteres).

Veamoselsiguientecódigoparaconocercómodefinirunarrayasociativoyeliminarluegounadesuscasillas.

<?php

$estadios_futbol = array("Barcelona"=> "Nou Camp","Real Madrid" => "Santiago Bernabeu","Valencia" => "Mestalla","Real Sociedad" => "Anoeta");

//mostramos los estadios

foreach ($estadios_futbol as $indice=>$actual)

echo $indice . " -- " . $actual . "<br>";

echo "<p>";

//eliminamos el estadio asociado al real madrid

unset ($estadios_futbol["Real Madrid"]);

//mostramos los estadios otra vez

foreach ($estadios_futbol as $indice=>$actual)

echo $indice . " -- " . $actual . "<br>";

?>

Lasalidaserálasiguiente:

Barcelona--NouCampRealMadrid--SantiagoBernabeuValencia--MestallaRealSociedad--Anoeta

Barcelona--NouCampValencia--MestallaRealSociedad--Anoeta

Aumentareltamañodeunarray

Page 59: Manual de PHP - Walter Carnero · sencillo y directo con el que podrías empezar es PHP. Otra de las claves del éxito de PHP es que la mayoría de los CMS más populares (WordPress,

Manual de PHP

http://desarrolloweb.com/manuales/manual-php.html Página 59 de 142

Tenemostambiénanuestradisposiciónvariasfuncionesquenospuedenayudaraaumentarelnúmerodecasillasdeunarreglo.

array_push()

Insertaalfinaldelarrayunaseriedecasillasqueseleindiquenporparámetro.Portanto,elnúmerodecasillasdelarrayaumentaráentantoselementoscomosehayanindicadoenelparámetrodelafunción.Devuelveelnúmerodecasillasdelarrayresultante.

Veamosestecódigodondesecreaunarregloyseañadenluegotresnuevosvalores.

<?php

$tabla = array ("Lagartija", "Araña", "Perro", "Gato", "Ratón");

//aumentamos el tamaño del array

array_push($tabla, "Gorrión", "Paloma", "Oso");

foreach ($tabla as $actual)

echo $actual . "<br>";

?>

Dacomoresultadoestasalida:

LagartijaArañaPerroGatoRatónGorriónPalomaOso

array_merge()

Ahoravamosavercómounirdosarraysutilizandolafunciónarray_merge().Aéstaselepasandosomásarraysporparámetroydevuelveunarreglocontodosloscamposdelosvectorespasados.

Enestecódigodeejemplocreamostresarraysyluegolosunimosconlafunciónarray_merge()

<?php

$tabla = array ("Lagartija", "Araña", "Perro", "Gato", "Ratón");

$tabla2 = array ("12","34","45","52","12");

$tabla3 = array ("Sauce","Pino","Naranjo","Chopo","Perro","34");

//aumentamos el tamaño del array

$resultado = array_merge($tabla, $tabla2, $tabla3);

foreach ($resultado as $actual)

echo $actual . "<br>";

?>

Dacomoresultado:

Page 60: Manual de PHP - Walter Carnero · sencillo y directo con el que podrías empezar es PHP. Otra de las claves del éxito de PHP es que la mayoría de los CMS más populares (WordPress,

Manual de PHP

http://desarrolloweb.com/manuales/manual-php.html Página 60 de 142

LagartijaArañaPerroGatoRatón1234455212SaucePinoNaranjoChopoPerro34

Unaúltimacosa.Tambiénpuedenintroducirsenuevascasillasenunarregloporlosmétodoshabitualesdeasignarlasnuevasposicionesenelarrayalascasillasquenecesitemos.

Enarraysnormalesseharíaasí:

$tabla = array ("Sauce","Pino","Naranjo");

$tabla[3]="Algarrobo";

Enarraysasociativos:

$estadios_futbol = array("Valencia" => "Mestalla","Real Sociedad" => "Anoeta");

$estadios_futbol["Barcelona"]= "Nou Camp";

Veremosmásadelanteotrasposibilidadesdeltrabajoconarrays.

Referencia:eneltallerdePHPtenemosartículossobreeltrabajoconarraysenPHP.Entreotrosencontrarásunoquetratauntemadefrecuenteconsulta:losdistintostiposdeordenacióndearraysenPHP:OrdenararraysconPHP

EsteartículoesobradeMiguelAngelAlvarezFuepublicadoporprimeravezen09/10/2003Disponibleonlineenhttp://desarrolloweb.com/articulos/funciones-para-trabajo-arrays-php.html

CadenasostringsenPHP

AspectosrelevantesdelascadenasostringsenPHP,untipodevariablesmuyutilizado.Listadecaracteresprotegidos.

Unodelostiposdedatosmáscorrientesenlamayoríadeloslenguajessonlosstrings.Tambiénpodremosconocerlasconelnombredecadenaso"cadenasdecaracteres".Nosonmásqueinformaciónquecontienetexto,concaracteresalfanuméricos,cualquiermezcladecaracteresalfabéticos,símbolosycaracteresnuméricos.

Pordecirloconotraspalabras,engeneral,cuandoguardamoscualquiertextoenunavariable,loqueestamosguardandotécnicamentesoncadenasostrings.Esuntipodedatosmuyimportante,yaquemuchadelainformaciónconlaquetenemosquetrabajarenlasaplicacionesestexto.

Paraasignaraunavariableuncontenidodetipocadena,loescribiremosentrecomillas,valiendotantolascomillasdoblescomolascomillassimples.Encódigodalugarasentenciasdeestetipo:

Page 61: Manual de PHP - Walter Carnero · sencillo y directo con el que podrías empezar es PHP. Otra de las claves del éxito de PHP es que la mayoría de los CMS más populares (WordPress,

Manual de PHP

http://desarrolloweb.com/manuales/manual-php.html Página 61 de 142

$cadena="Esta es la información de mi variable de tipo string";

SiqueremosmostrarenpantallaelvalordeunavariableobienunmensajecualquierausaremoslainstrucciónechocomoyalohemosvistoenejemplosdiversoshastaelmomentoenelManualdePHP:

echo $cadena; //sacaría "Esta es la información de mi variable"

Nota:EnPHPexistendiversosmecanismosparaproducirsalida(escribirtextoenlapáginaweb).Lainstrucción"echo"eselmássencilloqueexiste,válidocuandoestásdentrodecódigoPHP.

Alasentenciaecholepodemospasarnosolounavariabledetipocadena,puesenrealidadsacaporpantallacualquiercosa:Sinoesunacadenaharáloquepuedaparaproducirunasalidaadecuada.Inclusopodemospasarleunliteraldecadena:

echo "Esta es la información de mi variable"; //daría el mismo resultado

Nota:enlenguajesdeprogramaciónengeneral,un"literal"serefiereaundatoescritotalcualenelcódigo.Unliteraldetipocadenaseescribeentrecomillas,perounliteralnuméricoseescribesinlascomillas.

Literalesdecadenaconcomillasdoblesocomillassimples

AlgocaracterísticodePHPesquepermiteusartantocomillassimplescomocomillasdoblesy,dependiendodecómolohayamoshechoPHPinterpretarálascadenasdemaneradistinta.EsalgoquedebemosdeaprendercuantoantesaltrabajarenPHP,porquesino,puedequenosdealgunosproblemasosurjansituacionesenlasqueelresultadodeunprogramanoseaelqueseesperaba.

Cadenasconcomillasdobles

SiusamoscomillasdoblesparadelimitarcadenasdePHPharemosqueellenguajesecomportedeunamaneramás"inteligente".Lomásdestacadoesquelasvariablesquecoloquemosdentrodelascadenassesustituiránporlosvalores.Esmejorverloconuncódigo.

$sitioweb = "DesarrolloWeb";

$cadena = "Bienvenidos a $sitioweb";

echo $cadena;

Page 62: Manual de PHP - Walter Carnero · sencillo y directo con el que podrías empezar es PHP. Otra de las claves del éxito de PHP es que la mayoría de los CMS más populares (WordPress,

Manual de PHP

http://desarrolloweb.com/manuales/manual-php.html Página 62 de 142

Esecódigoproducirácomosalida"BienvenidosaDesarrolloWeb".Esdecir,PHPinterpolaráenlavariable$cadenaelvalordelavariable$sitioweb,sustituyendo$sitiowebporsucorrespondientevalor:"DesarrolloWeb".

Dentrodelascadenasdelimitadasporcomillasdobleshayunagrancantidaddecaracteresdeescape,medianteloscualespodemoscolocarencadenasdecaracterescosascomosaltosdelínea,tabuladoresosímbolos"[[--body--]]quot;quenoseríanconsideradoscomoiniciodelnombredeunavariable.Luegodaremosmásdetallesobreesto.

Cadenasconcomillassimples

Cuandoencierrasunliteraldecadenaconcomillassimpleslacosacambiabastante.Lomásdestacableesqueningunadetusvariablessesustituiráporsuvalor.Puedesverloenelsiguientecódigofuente:

$sitioweb = 'DesarrolloWeb';

$cadena = 'Bienvenidos a $sitioweb';

echo $cadena;

Estecódigofuenteesprácticamenteigualqueelanterior,conlasalvedadqueestamosusandocadenasdelimitadasporcomillassimples.Lasalidaessensiblementedistinta,enestecasonosmostraría"Bienvenidosa$sitioweb",dadoquenorealizalainterpolacióndelavariable.

Comopuedesver,dentrodeunacadenaindicadaconcomillassimplesnopuedesinsertarvaloresdevariablesdemaneratansencilla,sinoquetendríasqueromperlacadenayconcatenarconlavariable.Enseguidahablaremosdecómoconcatenarounircadenas,peroparaquequedeyaelejemplo,paraconseguirelresultadodelscriptequivalenteperoconcomillasdobles,tendríasqueescribiralgocomoesto:

$sitioweb = 'DesarrolloWeb';

$cadena = 'Bienvenidos a ' . $sitioweb;

echo $cadena;

¿Quéusar,comillassimplesodobles?

Larespuestaesbiensencilla.Porlogeneralserecomiendausarcomillassimples,puestoqueaPHPlecostarámenosusarlas,dadoquenointentarásustituirvaloresdevariablesdentrodeellas.Solosiquieresbeneficiartedelasventajasdelainterpolaciónsencilladevariablesseríarecomendableusarlascadenasconcomillasdobles,dadoquegenerarásuncódigomuchomássencillodeleerporloshumanosydemantenerdurantelavidadelaaplicación.

Concatenacióndecadenas

Podemosyuxtaponeroconcatenarvariascadenasutilizandoeloperadordeconcatenacióndestrings,quetieneelsímbolopunto".":

Page 63: Manual de PHP - Walter Carnero · sencillo y directo con el que podrías empezar es PHP. Otra de las claves del éxito de PHP es que la mayoría de los CMS más populares (WordPress,

Manual de PHP

http://desarrolloweb.com/manuales/manual-php.html Página 63 de 142

$cadena1="Perro";

$cadena2=" muerde";

$cadena3=$cadena1.$cadena2;

echo $cadena3; //El resultado es: "Perro muerde"

Aunqueyalohemosdicho,usandocomillasdoblespodríascolocaresasvariablesdentrodenuestracadena.Dejamosaquíotroejemplo:

$a=55;

$mensaje="Tengo $a años";

echo $mensaje; //El resultado es: "Tengo 55 años"

Lapreguntaquenospodemosplantearahoraes...¿Cómohagoentoncesparaqueenvezdelvalor"55"mesalgaeltexto"$a"?Enotraspalabras,cómosehaceparaqueelsímbolo$nodefinaunavariablesinoqueseatomadotalcual.Estapreguntaestantomásinteresantecuantoqueenalgunosdescriptsestesímbolodebeserutilizadoporunasimplerazóncomercial(pagoendólaresporejemplo)ysiloescribimostalcual,elordenadorvaapensarqueloquevienedetrásesunavariablesiendoquenoloes.

Caracteresdeescape

Paraincluirelsímbolo$,lacontrabarrayotroscaracteresutilizadosporellenguajedentrodelascadenasynoconfundirlosseusanloscaracteresdeescape.

Parainsertaruncaracterdeescapetenemosqueindicarlocomenzandoconelsímbolodelacontrabarra(barrainvertida)yluegoeldelcaracterdeescapequedeseemosusar.

Loscaracteresdeescapedisponiblesdependendeltipodeliteraldecadenaqueestemosusando.Enelcasodelascadenasconcomillasdoblessepermitenmuchosmáscaracteresdeescape.Losencuentrasenlasiguientetabla:

Page 64: Manual de PHP - Walter Carnero · sencillo y directo con el que podrías empezar es PHP. Otra de las claves del éxito de PHP es que la mayoría de los CMS más populares (WordPress,

Manual de PHP

http://desarrolloweb.com/manuales/manual-php.html Página 64 de 142

Estoscambiosdelíneaytabulacionestienenúnicamenteefectoenelcódigoynoeneltextoejecutadoporelnavegador.Enotraspalabras,siqueremosquenuestrotextoejecutadocambie

delíneahemosdeintroducirunecho "<br>"yno .

Nota:Elcaracterdeescapedesaltodelínea sólocambiadelíneaenelcódigoHTMLcreadoyenviadoalnavegadorcuandolapáginaesejecutadaenelservidor.EsesaltodelíneanotienevalorenelHTML,porloquesolamenteloveríasalexaminarelcódigofuenteproducidoalejecutarelscript.

Enelcasodelascadenasexpresadasconcomillassimpleshaymuchosmenoscaracteresdeescape.Primeroporquenosonnecesarios(comoelsímbolo$,quenopuedeserconfundidoconeliniciodeunavariable,yaquenolastieneencuenta)ysegundoporquesimplementenoseencuentrandisponibles.

Acontinuaciónpuedesverlatabladecaracteresdeescapepermitidosenunacadenaencerradamediantecomillassimples:

Page 65: Manual de PHP - Walter Carnero · sencillo y directo con el que podrías empezar es PHP. Otra de las claves del éxito de PHP es que la mayoría de los CMS más populares (WordPress,

Manual de PHP

http://desarrolloweb.com/manuales/manual-php.html Página 65 de 142

Sintaxiscomplejadelasllaves

Otracosaútilquenosconvieneaprendercuandotrabajamosconcadenaseslaposibilidaddeinterpolarvalorescomplejosdevariablesuntantoespeciales.EnladocumentacióndePHPlellamanaestola"sintaxiscompleja",peronoconvieneasustarseporqueenrealidadesbiensimple.

Miraelsiguientecódigo:

$array = array(1, 2, 40, 55);

$cadena = "La posición tres contiene el dato $array[2]";

echo $cadena; //escribe La posición tres contiene el dato 55

Aquínosurgeningúnproblemaalexpandirelvalordelaposición3delarrayenlacadena,usando(esosí)comillasdobles.Inclusoaunqueelarraynecesiteuníndice,PHPsabequeloquetienequemostrarahíesunacasilladelarray.Peroahoraobservaelsiguientecódigo:

$array = array('uno' => 1, 'dos' => 2, 'tres' => 40, 'cuatro' => 55);

$cadena = "La posición 'tres' contiene el dato $array['tres']"; //esto produce un error!!

EnestecasonuestroscriptproduciráunerroralserinterpretadoporPHP,puestoqueunarrayconíndicealfanumérico(arrayasociativo)noescapazdeprocesarlobiencuandoloescribimosdentrodeunacadena.

Parasalvarestasituaciónentranenjuegolamencionadasintaxiscomplejadelasllaves.SimplementevamosaescribirelarrayaasociativoquedeseamosquePHPsustituyaencerradoentrellaves.AsíPHPloreconoceráperfectamente.

$array = array('uno' => 1, 'dos' => 2, 'tres' => 40, 'cuatro' => 55);

$cadena = "La posición 'tres' contiene el dato {$array['tres']}"; //Ahora funciona bien

echo $cadena; //escribe La posición 'tres' contiene el dato 40

Quizásenunprimermomentoestasintaxisdelasllavesnoteparezcamuyútil,peroteaseguramosqueentudíaadíaconPHPlavasausarbastante,porquemuchasvecesenPHPtienesdatosquetevienendearraysasociativos,odeotrostiposdeestructurasquenoseinterpolancorrectamentecuandoestásescribiendovaloresdentrodecadenas(siempreconcomillasdobles).

Aunquenohemostratadotodavíacómoserecibendatosquetellegandeformularios,podemosadelantaraquíuncódigosencillo.Imaginaqueestásrecbiendounformularioytienesuncampollamado"teléfono"eneseformulario.Enlapáginaquerecibeseseformulario,tellegacomo$_POST['telefono'].Siquierescolocareseteléfonodentrodeunacadenapodríasusaruncódigocomoeste:

$telefonoPrefijo = "(+34) {$_POST['telefono']}";

Page 66: Manual de PHP - Walter Carnero · sencillo y directo con el que podrías empezar es PHP. Otra de las claves del éxito de PHP es que la mayoría de los CMS más populares (WordPress,

Manual de PHP

http://desarrolloweb.com/manuales/manual-php.html Página 66 de 142

Funcionesdecadenas

Lascadenaspuedenasimismosertratadaspormediodefuncionesdetodotipo.PHPesunlenguajemuyricoenestesentido,queincluyemuchasposiblesaccionesquepodemosrealizarsobreellascontansoloejecutarunafunción:Dividirlasenpalabras,eliminarespaciossobrantes,localizarsecuencias,remplazarcaracteresespecialesporsucorrespondienteenHTML,etc.

PorejemploaquípuedesverelusodeunafunciónbastanteútilalprogramarenPHPyproducirsalidaenHTML,enlaquecambiamostodosloscaracteresespecialesdelasentidadesHTML(útilparaevitarqueseinyectecódigoHTMLaldocumentoquenoqueremosqueaparezcaformateado,sinoescritoenlapáginaconsusetiquetasytodo).

$cadenaOriginal = '<b>Me gusta PHP</b>';

$cadenaRetocada = htmlspecialchars($cadenaOriginal);

echo $cadenaRetocada; //escribe &lt;b&gt;Me gusta PHP&lt;/b&gt;

Másadelanteveremosalgunosnuevosejemplosdefuncionesdecadenas.Perocomosiemprerecomendamos,recuerdamantenerteinformadotambiénconladocumentación:funcionesdestring.

EsteartículoesobradeMiguelAngelAlvarezFuepublicadoporprimeravezen14/12/2016Disponibleonlineenhttp://desarrolloweb.com/articulos/cadenas-strings-php.html

Page 67: Manual de PHP - Walter Carnero · sencillo y directo con el que podrías empezar es PHP. Otra de las claves del éxito de PHP es que la mayoría de los CMS más populares (WordPress,

Manual de PHP

http://desarrolloweb.com/manuales/manual-php.html Página 67 de 142

FuncionesenPHP

Lasfuncionessonesencialesparapoderrealizarcódigodecalidad,tantoenPHPcomoenmuchosotroslenguajesdeprogramación.EnestoscapítulosdelManualdePHPaprenderemosadefinirfunciones,trabajarconparámetrosyretornarvalores.

FuncionesenPHP

Utilidaddelasfunciones,creaciónyalmacenamientoenarchivos.Ejemploprácticodecreacióndefunción.

Ennuestromanualdepáginasdinámicasvimoselconceptodefunción.Vimosquelafunciónpodríaserdefinidacomounconjuntodeinstruccionesquepodemosinvocarlasvecesquehagafalta.Yasabemosportantoquelasfuncionespuedenrecibirparámetros,quesoncomovariablesdentrodelafunciónalasqueseleasignavaloresenelmomentodesuinvocación.Lasfuncionespuedenservirpararealizartareassencillasocomplejasycomoprogramadoresesunodelasprimerasherramientasquedebemosdeconocerparapoderestructurarelcódigodeunprograma.

PHPbasasueficaciaprincipalmenteensuenormebibliotecadefunciones.Unagranlibreríaquecrececonstantemente,amedidaquenuevasversionesvansurgiendoysevanincorporandonuevasáreasdetrabajodentrodellenguaje.LasfuncionesdePHPnospermitenrealizardeunamanerasencillatareashabitualesyalahoradedesarrollarunaaplicación,peroademásnosotrospodemoshacernuevasfuncionespararesolvertodotipodetareasmásespecíficasdenuestraaplicación.

LasfuncionesintegradasenPHPsonmuyfácilesdeutilizaryalolargodetodoelManualdePHPBásicoyotrosmanualesdeDesarrolloWeb.comiremosrepasandolasmásusadas.Paraaccederatodaslasutilidadesquehaydetrásdeunafuncióntansólohemosderealizarlallamada(oinvocación)delaformaapropiadayespecificarlosparámetrosnecesariosparaquelafunciónrealicesutarea.

Nota:DespuésdelallegadadePHP5,enelmomentoenelquePHPpasóaserunlenguajeconunaorientaciónaobjetospotente,lasfuncionesdelabibliotecadellenguajetienenenmuchoscasosalternativasenbaseaclasesyobjetos.Nosotroscomoprogramadorespodemosescogertrabajarconfuncionescorrientesoconmétodosdeobjetosyclases,peroengenerallafuncionalidadalaquellegaremosesexactamentelamisma.

CrearnuestraspropiasfuncionesenPHP

Page 68: Manual de PHP - Walter Carnero · sencillo y directo con el que podrías empezar es PHP. Otra de las claves del éxito de PHP es que la mayoría de los CMS más populares (WordPress,

Manual de PHP

http://desarrolloweb.com/manuales/manual-php.html Página 68 de 142

Loquepuedeparecerligeramentemáscomplicado,peroqueconunmínimodeexperienciaresultarámuysencilloysinlugaradudasmuypráctico,escrearnuestraspropiasfunciones.Deunaformageneral,podríamoscrearnuestraspropiasfuncionesparaconectarnosaunabasededatosocrearlosencabezadosoetiquetasmetadeundocumentoHTML.Paraunaaplicacióndecomercioelectrónicopodríamoscrearporejemplofuncionesdecambiodeunamonedaaotraodecalculodelosimpuestosaañadiralpreciodearticulo.Endefinitiva,esinteresantecrearfuncionesparalamayoríadeaccionesmásomenossistemáticasquerealizamosennuestrosprogramas.

Aquídaremoselejemplodecreacióndeunafunciónque,llamadaalcomienzodenuestroscript,noscreaelencabezadodenuestrodocumentoHTMLycolocaeltituloquequeremosalapágina:

<?

function hacer_encabezado($titulo) {

$encabezado="<html><head>t<title>$titulo</title></head>";

echo $encabezado;

}

?>

Estafunciónpodríaserllamadaalprincipiodetodasnuestraspáginasdelasiguienteforma:

$titulo="Mi web";

hacer_encabezado($titulo);

Deestaformaautomatizamoselprocesodecreacióndenuestrodocumento.Podríamosporejemploincluirenlafunciónotrasvariablesquenosayudasenaconstruirlasetiquetasmetaydeestaforma,conunesfuerzomínimo,crearíamoslosencabezadospersonalizadosparacadaunadenuestraspáginas.Deestemismomodonosesposiblecrearcierresdedocumentoointerfacesdelawebcomopodríanserbarrasdenavegación,formulariosdelogin,etc.

Comohaspodidocomprobar,paracrearunafuncióndebemosdeclararla.Paraellousamoslapalabrafunctionseguidadelnombredelafunción.Luegounosparéntesisdondepodemosindicarlosparámetrosqueseesperarecibirensuinvocaciónyfinalmenteelbloquedecódigodelafunciónpropiamentedicha,encerradoentrellaves.Enlossiguientesartículosseguiremoshablandodeloscomponentesdeunafunciónyviendodiversosejemplos,asíquenodebesdepreocupartesitodavíanolovesdemasiadoclaro.

Estructurarelcódigodeunaaplicaciónconnuestraspropiaslibreríasdefunciones

Porsupuesto,lafunciónhadeserdefinidaparapoderserutilizada,yaquenoseencuentraintegradaenPHPsinoquelahemoscreadonosotros.Sipensamosqueenunaaplicaciónwebcompletapodemostenercientosdefuncionesdefinidaspornosotrosmismosquizásteasustequetengasdemasiadocódigodefuncionesquedebenserdefinidasantesdeserusadas.Peroestoenrealidadnoponeningunapega,yaquepuedenserincluidasdesdeunarchivoexterno.Dehechoesmuycomúnquetengamosarchivosdondesolocolocamoselcódigodelasfunciones,almacenandodefinicionesdelasfuncionesquevayamoscreandopararealizarun

Page 69: Manual de PHP - Walter Carnero · sencillo y directo con el que podrías empezar es PHP. Otra de las claves del éxito de PHP es que la mayoría de los CMS más populares (WordPress,

Manual de PHP

http://desarrolloweb.com/manuales/manual-php.html Página 69 de 142

sitioweb.

Estosarchivosenlosqueseguardanlasfuncionessellamancomúnmentelibrerías.Laformadeincluirlosennuestroscriptesapartirdelainstrucciónrequireoinclude:

require("ruta/a/libreria.php");

Osiprefiereslaalternativadelinclude:

include("ruta/a/libreria.php");

Nota:Tantorequire()comoinclude()hacenelmismotrabajo,detraersecódigoquehayenarchivosdiferentesdentrodelservidor,paraquepodamosutilizarloalcrearunapágina.Ladiferenciafundamentalentrerequireeincludeesquelaprimerarequiereforzosamentealgoylaotrano.Esdecir,sihacemosunrequire()deunarchivoyéstenoseencuentradisponibleporcualquiermotivo,PHPpararálaejecucióndelcódigoydevolveráun"Errorfatal".Siporelcontrariohacemosuninclude()yelarchivoquetratamosdetraernoseencuentradisponible,entoncesloquePHPnosmostraráesunaseñakdeadvertencia,un"warning",perotratarádeseguirejecutandoelprograma.

Enresumen,cuandousasarchivosconcódigodefunciones(librerías)ylosincluyesparausarlosdesdeotraspáginasdelaaplicación,lacosaquedaríaasí:

Tendríamosunarchivolibreria.phpcomosigue

<?

//función de encabezado y colocación del titulo

function hacer_encabezado($titulo)

{

$encabezado="<html>n<head>nt<title>$titulo</title>n</head>n";

echo $encabezado;

}

?>

Porotrapartetendríamosnuestroscriptprincipalpágina.php(porejemplo):

<?

include("libreria.php");

$titulo="Mi Web";

hacer_encabezado($titulo);

?>

<body>

El cuerpo de la página

</body>

</html>

Page 70: Manual de PHP - Walter Carnero · sencillo y directo con el que podrías empezar es PHP. Otra de las claves del éxito de PHP es que la mayoría de los CMS más populares (WordPress,

Manual de PHP

http://desarrolloweb.com/manuales/manual-php.html Página 70 de 142

Podemosmetertodaslasfuncionesquevayamosencontrandodentrodeunmismoarchivoperoresultamuchísimomásventajosoirclasificándolasendistintosarchivosportemática:Funcionesdeconexiónabasesdedatos,funcionescomerciales,funcionesgenerales,etc.Estonosayudaraapoderlocalizarlasantesparacorregirlasomodificarlas,nospermitetambiéncargarúnicamenteeltipodefunciónquenecesitamosparaelscriptsinrecargarésteenexcesoademásdereutilizaralgunasdenuestraslibreríasparavariossitioswebsdistintos.

Tambiénpuederesultarmuyprácticoelutilizarunanomenclaturasistemáticaalahoradenombrarlas:Lasfuncionescomercialespodríanserllamadascom_loquesea,lasdebasesdedatosbd_loquesea,lasdetratamientodearchivosfile_loquesea.Estonospermitiráreconocerlasenseguidacuandoleamoselscriptsintenerquerecurriranuestraoxidadamemoriaparadescubrirsuutilidad.

Noobstante,antesdelanzarnosacrearnuestrapropiafunción,merecelapenaecharunvistazoaladocumentaciónparaversidichafunciónyaexisteopodemosaprovecharnosdealgunadelasexistentesparaaligerarnuestrotrabajo.Así,porejemplo,existeunafunciónllamadaheaderquecreaunencabezadoHTMLconfigurablelocualnosevitatenerquecrearlanosotrosmismos.

Nota:Comopuedeverse,latareadelprogramadorpuedeenalgunoscasosparecersealadeuncoleccionista.Hayqueserpacienteymetódicoyalfinal,abasedetrabajopropio,intercambiodecódigoydedicaciónpodemosllegarposeernuestropequeñotesorodefunciones,capacesdealigerarnuestrotrabajodiario.

Dehecho,másadelantesisiguesaprendiendoPHPprofesionalmenteencontrarásqueexistenlosframeworks,quesonenciertomodocomobibliotecasadicionalesdefuncionesquepuedesusarpararesolvermuchasmáscosas,adicionalesalasqueelpropiolenguajeyateofrece.Losframeworksademásayudanalosprogramadoresaestructurarsucódigoyausardiversospatronesdediseñodesoftwarequefacilitanlacreacióndeproyectosdefácilmantenimientoycapacesdecrecersinvolverseinmanejables.EnDesarrolloWeb.comtenemosvariosmanualesdeframeworksPHP.

Comoreferencia,sideseaspuedesrepasartodoslosconceptosanterioressobrelasfunciones,asícomodiversasotrascosasinteresantes,tedejamosenlacehaciaelVideotutorialsobrelasfuncionesenPHP.

Ejemplodefunción

VamosaverunejemplodecreacióndefuncionesenPHP.Setratadehacerunafunciónquerecibeuntextoyloescribeenlapáginaconcadacarácterseparadopor"-".Esdecir,sirecibe"hola"debeescribir"h-o-l-a"enlapáginaweb.

Nota:Paracomprenderesteejemplonecesitamosconocerelbuclefor,queseexplicaenelcapítuloControldelflujoenPHP:BuclesII.

Page 71: Manual de PHP - Walter Carnero · sencillo y directo con el que podrías empezar es PHP. Otra de las claves del éxito de PHP es que la mayoría de los CMS más populares (WordPress,

Manual de PHP

http://desarrolloweb.com/manuales/manual-php.html Página 71 de 142

Lamaneraderealizarestafunciónserárecorrerelstring,caracteracaracter,paraimprimircadaunodeloscaracteres,seguidodeelsigno"-".Recorreremoselstringconunbuclefor,desdeelcarater0hastaelnúmerodecaracterestotaldelacadena.

ElnúmerodecaracteresdeunacadenaseobtieneconlafunciónpredefinidaenPHPstrlen(),querecibeelstringentreparéntesisydevuelveelnúmerodeloscaracteresquetenga.

<html>

<head>

<title>funcion 1</title>

</head>

<body>

<?

function escribe_separa($cadena){

for ($i=0;$i<strlen($cadena);$i++){

echo $cadena[$i];

if ($i<strlen($cadena)-1)

echo "-";

}

}

escribe_separa ("hola");

echo "<p>";

escribe_separa ("Texto más largo, a ver lo que hace");

?>

</body>

</html>

Lafunciónquehemoscreadosellamaescribe_separayrecibecomoparámetrolacadenaquehayqueescribirconelseparador"-".Elbuclefornossirvepararecorrerlacadena,desdeelprimeralúltimocarácter.Luego,dentrodelbucle,seimprimecadacarácterseparadodelsigno"-".Elifquehaydentrodelbucleforcompruebaqueelactualnoseaelúltimocarácter,porqueenesecasonohabríaqueescribirelsigno"-"(queremosconseguir"h-o-l-a"ysinoestuvieraelifobtendríamos"h-o-l-a-").

Conclusión

EsperamosqueestaprimeraintroducciónalasfuncionesenPHPtehayasidoaclaradora.Enlospróximosartículosveremosnuevascosasimportantesparadominarlas,comoelpasodeparámetrosenlasfuncionesylosvaloresderetorno.

EsteartículoesobradeRubénAlvarezFuepublicadoporprimeravezen04/01/2016Disponibleonlineenhttp://desarrolloweb.com/articulos/12.php

Page 72: Manual de PHP - Walter Carnero · sencillo y directo con el que podrías empezar es PHP. Otra de las claves del éxito de PHP es que la mayoría de los CMS más populares (WordPress,

Manual de PHP

http://desarrolloweb.com/manuales/manual-php.html Página 72 de 142

PasodeparámetrosenfuncionesPHP

EstecapítuloexplicatodoslosdetallesrelativosalpasodeparámetrosenlasfuncionesPHP.

EnelartículoanteriordelManualdePHPyacomenzamosaexplicarlasfuncionesenPHP.Comohemosvisto,crearnuestraspropiasfuncionesnoescomplicado,perotenemosqueaprenderdiversascosasnuevasparaextraertodasupotencia.

AhoravamosaexplicaralgunosdetallesadicionalessobreladefiniciónyusodefuncionesenPHP,paraampliarlainformaciónanterior.Enconcreto,hablaremossobrelosparámetrosenlasfunciones,yaquehaymuchomásquedecirparaabarcartodaslasposibilidadesdePHP:elpasodeparámetrosporvalor,pasoporreferencia,losvalorespredeterminados,etc.AdemásenesteartículoveremosnuevosejemplosdefuncionesquenossirvanparairpracticandoconnuevosejemplosenPHP.

Pasodeparámetros

Losparámetrossonlosdatosquerecibenlasfuncionesyqueutilizanpararealizarlasoperacionesdeesafunción.Unafunciónpuederecibircualquiernúmerodeparámetros,inclusoninguno.

Silafunciónqueestamosconstruyendononecesitarecibirningúnparámetro,aldeclararla,simplementeindicamoslosparéntesisvacíosenlacabecera.Porejemploenlasiguientefunciónmostramoslafechadeldíadehoy.ParaellonosapoyamosenotrafunciónincluidaenPHP:date().

function fecha_hoy() {

echo date('d/m/Y');

}

Laintencióndelaanteriorfunciónesmostrarlafechadeldíaactual.Comosiempremostraráeldíadehoy,nonecesitopasarleningúnparámetro,siempreharálomismo.Lasfuncionesquenorequierenparámetrosselasinvocaindicandolosparéntesisvacíos.

fecha_hoy();

Nota:Siquieressabermássobrelafuncióndate()yotrasmanerasdecrearfechasenPHP,terecomendamoselartículoCrearyconvertirfechasenPHP

Enelcasoquequeramos,onecesitemos,recibirparámetrosparaimplementarunafunción,alahoradedefinirla,enlacabecera,sedefinenlosparámetrosquevaarecibir.

Page 73: Manual de PHP - Walter Carnero · sencillo y directo con el que podrías empezar es PHP. Otra de las claves del éxito de PHP es que la mayoría de los CMS más populares (WordPress,

Manual de PHP

http://desarrolloweb.com/manuales/manual-php.html Página 73 de 142

function f1 ($parametro1, $parametro2)

Asídefinimosunafunciónllamadaf1querecibedosparámetros.Comosepuedeobservar,nosetienequedefinireltipodedatosdecadaparámetro.Esdecir,lafunciónnecesitaráqueleenviemosdosdatos,peronoleimportaráqueseandeuntipouotro.

Losparámetrostienenvalidezdurantelaejecucióndelafunción.Sedicequetienenunámbitolocalalafuncióndondeseestánrecibiendo.Cuandolafunciónsetermina,losparámetrosdejandeexistir.

Losparámetrossepasanporvalor

ElpasodeparámetrosenPHPserealizaporvalor."Porvalor"esunamaneratípicadepasarparámetrosenfunciones,quieredecirqueelcambiodeundatodeunparámetronoactualizaeldatodelavariablequesepasóalafunción.Porejemplo,cuandoinvocamosunafunciónpasandounavariablecomoparámetro,apesardequecambiemoselvalordelparámetrodentrodelafunción,lavariableoriginalnoseveafectadaporesecambio.Puedequeseveamejorconunejemplo:

function porvalor ($parametro1){

$parametro1="hola";

echo "<br>" . $parametro1; //imprime "hola"

}

$mivariable = "esto no cambia";

porvalor ($mivariable);

echo "<br>" . $mivariable; //imprime "esto no cambia"

Estapáginatendrácomoresultado:

holaestonocambia

Pasodeparámetrosporreferencia

Encontraposiciónalpasodeparámetrosporvalor,estáelpasodeparámetrosporreferencia.Enesteúltimocaso,elcambiodelvalordeunparámetrodentrodeunafunciónsíafectaalvalordelavariableoriginal.

Podemospasarlosparámetrosporreferenciasi,enladeclaracióndelafunción,colocamosun"&"antesdelparámetro.

function porreferencia(&$cadena) {

$cadena = 'Si cambia';

}

$str = 'Esto es una cadena';

porreferencia ($str);

Page 74: Manual de PHP - Walter Carnero · sencillo y directo con el que podrías empezar es PHP. Otra de las claves del éxito de PHP es que la mayoría de los CMS más populares (WordPress,

Manual de PHP

http://desarrolloweb.com/manuales/manual-php.html Página 74 de 142

echo $str; // Imprime 'Si cambia'

Estescriptmostraráporpantalla'Sicambia'.

Parámetrospordefecto

Podemosdefinirvalorespordefectoparalosparámetros.Losvalorespordefectosirvenparaquelosparámetroscontenganundatopredefinido,conelqueseinicializaránsinoselepasaningúnvalorenlallamadadelafunción.Losvalorespordefectosedefinenasignandoundatoalparámetroaldeclararloenlafunción.

function pordefecto ($parametro1="pepe";$parametro2=3)

Paraladefinicióndefunciónanterior,$parametro1tienecomovalorpordefecto"pepe",mientrasque$parametro2tiene3comovalorpordefecto.

Sillamamosalafunciónsinindicarvaloresalosparámetros,estostomaránlosvaloresasignadospordefecto:

pordefecto () // $parametro1 vale "pepe" y $parametro2 vale 3

Sillamamosalafunciónindicandounvalor,esteserátenidoencuentaparaelprimerparámetro.

pordefecto ("hola") // $parametro1 vale "hola" y $parametro2 vale 3

Tenencuentaque,enelcasoquequierasusarparámetrosconvalorespordefecto,estásobligadoaqueéstossedeclarenalfinalenlalistadeparámetrosdelacabeceradelafunción.

EsteartículoesobradeMiguelAngelAlvarezFuepublicadoporprimeravezen04/01/2017Disponibleonlineenhttp://desarrolloweb.com/articulos/parametros-funciones-php.html

RetornodevaloresenfuncionesPHP

CómodevolvervaloresenfuncionesPHP,conlapalabrareturn.ExplicamosvariasformasderealizarloconnuevosejemplosparaaprenderatrabajarconfuncionesenPHP.

ParaseguiraprendiendosobrefuncionesenelManualdePHPnecesitamosabordarcondetalleelasuntodeladevolucióndevaloresenfunciones.

Page 75: Manual de PHP - Walter Carnero · sencillo y directo con el que podrías empezar es PHP. Otra de las claves del éxito de PHP es que la mayoría de los CMS más populares (WordPress,

Manual de PHP

http://desarrolloweb.com/manuales/manual-php.html Página 75 de 142

AlgoquequerráshacerenPHP,yenlaprogramaciónengeneral,escrearfuncionesque,unavezejecutadas,nosentreguenunvalorcomoresultado.Esalgomuyhabitualyqueimplicavariascuestionesquevamosaabordarenelpresenteartículo.

Lasfuncionespueden,ono,retornarvalores.Esdecir,noesobligadoquelasfuncionesretornenvaloralguno,solosetratadeunaposibilidad,queencontrarásdemuchautilidadeneldesarrolloengeneral.Dehecho,nuestrosanterioresejemplosdefuncionesnohabíanretornadoningúnvaloryyahabíamosvistoquerealizabantareasbastanteútiles.

Palabra"return"

Pararetornarvaloresenfuncionesseutilizalapalabra"return",indicandoacontinuacióneldatoovariablequetienenqueretornar.

function suma($valor1, $valor2) {

return $valor1 + $valor2;

}

Laanteriorfunciónrealizaunaoperacióndesumaentredosvaloresenviadosporparámetro.Parainvocarladebemosenviarlelosdosvaloresquedebesumar.Cuandoseejecutelafunciónrecibiremosunvalorcomodevoluciónypodremoshacercualquiercosaconél.Porejemplo,enelsiguientecódigoestamosinvocandoalafunciónsuma,enviandodosvaloresnuméricosyalmacenandoelvalordedevoluciónenunavariablellamada"$resultado".

$resultado = suma(3, 6);

Unafunciónpuedeperfectamentetenermúltiplespalabrasreturnensucódigo.Sinembargo,aunqueestoocurra,debemostenerencuentaqueunafunciónsólopodrádevolverunúnicovalor.Entreotrascosasestoocurriráporque,cuandoseusaelreturn,seterminalaejecucióndelafuncióndevolviendoeldatoindicado.

Observaelsiguientecódigodefunción.Realizaunaoperacióndedivisión.Recuerdaquelaoperaciónmatemáticadedividiralgoentreceronoestápermitida,yaqueelresultadosería"infinito"yesevalordesvordaríaalamáquina.Entonces,antesderealizarlaoperacióndedivisiónvamosahacerunacomprobaciónquenoseintentedividirentrecero.

function division($valor1, $valor2) {

if($valor2 == 0) {

return 'No puedo dividir por cero!!';

} else {

return $valor1 / $valor2;

}

}

Nota:Enelcódigoanteriorhemosusadolaestructuradecontrol"if"queveremosmás

Page 76: Manual de PHP - Walter Carnero · sencillo y directo con el que podrías empezar es PHP. Otra de las claves del éxito de PHP es que la mayoría de los CMS más populares (WordPress,

Manual de PHP

http://desarrolloweb.com/manuales/manual-php.html Página 76 de 142

adelante,enenartículoControldelflujoenPHP:CondicionesIF

Aunquetodavíanohemosexplicadoquéhaceun"if",simplementeesunaoperacióncondicional.Compruebaunaexpresiónyhaceunacosauotradependiendodeloquevalga.Enresumen,seevaluasi$valor2tieneeldato0(cero)yenesecasosedevuelveunmensaje"Nopuedodividirporcero!!".Encasoque$valor2nofueraunvalordecero,entoncesrealizalaoperacióndedivisiónysedevuelveelresultado.

Apreciarásqueenelcódigodelafunciónanterioraparecendosreturn,quizásnoteresulteextraño,porquesolamenteunodeellosseejecutará,dadalaconstruccióndelIF.Noobstante,debessaberqueunreturnsiempredetieneenesepuntolaejecuciondelafunción.Esdecir,despuésdeejecutarunreturnnoseejecutaráningunaotralíneadecódigosiguiente.

Paraquequedeclaro,ahoramiraestaotrafunción.

function cuadrado($valor) {

return $valor * $valor;

echo 'Esto nunca se ejecutará!!';

}

Debidoalreturn,elcódigoconlasentencia"echo"nuncasellegaráaejecutar.Asíquenoapareceránuncaelmensajeporpantalla,porqueelreturndelalíneaanteriorpararásiemprelaejecucióndelafunción.

Paraacabarestepuntoqueremosvolversobrelafunciónanteriorllamada"division".Dadoloaprendidodelascaracterísticasdelreturn,aunquenuestrocódigofueraligeramentedistinto,tambiéntendríamoselmismoresultado.Observaelsiguientecódigo:

function division($valor1, $valor2) {

if($valor2 == 0) {

return 'No puedo dividir por cero!!';

}

return $valor1 / $valor2;

}

Aunquenohemosusadolaconstrucción"else"(miramásadelanteelcapítulodondehablamosdelosif)elsegundoreturnsoloseejecutarási$valor2esdistintodecero,porquesifueraigualacerosehabríasalidodelafuncióndebidoalprimerreturn.Estedetallequizáscuestaunpocodeveralprincipiodelaexperienciacomoprogramador,peroesbastantesencilloenrealidad.Enresumen,puedesconfiarquelaejecucióndeunafunciónsiempresedetendrádespuésdeproducirseunreturn.

EjemplodefunciónIVA

Vamosaverunnuevoejemploparailustrarelfuncionamientodeunafunciónunpocomásavanzada,queutilizapartedelosnuevosconceptosintroducidosenesteartículoyelanterior

Page 77: Manual de PHP - Walter Carnero · sencillo y directo con el que podrías empezar es PHP. Otra de las claves del éxito de PHP es que la mayoría de los CMS más populares (WordPress,

Manual de PHP

http://desarrolloweb.com/manuales/manual-php.html Página 77 de 142

sobrepasodeparámetros.

SetratadehacerunafunciónquecalculaelIVAyquerecibedosparámetros.Unoelvalorsobreelquesecalculayelotroelporcentajeaaplicar.SinoseindicaelporcentajedeIVAseentiendequeesel21%.

<html>

<head>

<title>ejemplo IVA</title>

</head>

<body>

<?

function iva($base,$porcentaje=21){

return $base * $porcentaje /100;

}

echo iva(1000) . "<br>";

echo iva(1000,7) . "<br>";

echo iva(10,0) . "<br>";

?>

</body>

</html>

Sisehanentendidobienlosconceptos,esteejemplonopuederesultardifícil.Lafunciónrecibeunparámetrollamado$porcentajecon21comovalorpordefecto.Devuelveelporcentajedadoaplicadoalabasetambiénindicadaporparámetro.

Asípues,enlaprimeraejecucióndelafunción,comonoseindicaelporcentaje,semostraráel21%de1000.Enlasegunda,semuestrael7%demilyenlatercera,el0%de10.

Retornarmúltiplesvaloresenunafunción

Lodichoanteriormentesobreque"unafuncióndevuelveunúnicovalor"puederesultarcortanteparalaspersonasqueestáncomenzandoenlaprogramación,alverqueellopuedesignificarunagranlimitaciónalahoradeescribirfunciones.Noobstante,conlasherramientasconlasquesecuentaenlaprogramaciónéstonoesasí.

Siqueremoshacerquesepuedandevolvervariosvaloresdistintospodríamosquerecurrirauntrucoqueconsisteendevolverunarray.

function numeros_pequenos()

{

return array (0, 1, 2);

}

list ($zero, $one, $two) = small_numbers();

Conelarraydevueltopodremoshacercualquiercosa.Accederasuscasillasporseparado,

Page 78: Manual de PHP - Walter Carnero · sencillo y directo con el que podrías empezar es PHP. Otra de las claves del éxito de PHP es que la mayoría de los CMS más populares (WordPress,

Manual de PHP

http://desarrolloweb.com/manuales/manual-php.html Página 78 de 142

recorrerlo,etc.PeroenelcódigoanteriorhemoshechadomanodeunafunciónincorporadaenPHP,nuevaparati,llamadalist().Éstaseusaparaasignarunalistadevariablesenunasolaoperación.Despuésdeesaoperación,$zerovaldrá0,$onevaldrá1y$twovaldrá2.

Hayquedecirqueademásdearrays,cuandolascosassecomplicantambiénpodemosdevolverobjetosyesonosayudaráaretornarenlasfuncionestodotipodeestructurascomplejas,convariosdatos,solodevolviendounobjeto.Másadelantetambiénhablaremossobreobjetos,asíquehabrátiempodeverejemplos.

EsteartículoesobradeMiguelAngelAlvarezFuepublicadoporprimeravezen04/01/2016Disponibleonlineenhttp://desarrolloweb.com/articulos/retorno-valores-return-php.html

Page 79: Manual de PHP - Walter Carnero · sencillo y directo con el que podrías empezar es PHP. Otra de las claves del éxito de PHP es que la mayoría de los CMS más populares (WordPress,

Manual de PHP

http://desarrolloweb.com/manuales/manual-php.html Página 79 de 142

EstructurasdecontrolenPHP

VemosunaaunalasdistintasestructurasdecontroldelflujodelosprogramasdisponiblesenellenguajedeprogramaciónPHP:condicionalesybucles.

ControldelflujoenPHP:CondicionesIF

Presentamosunadelasherramientasprincipalesusadasparacontrolarelflujodenuestrosscripts:LoscondicionalesIF.

Laprogramaciónexigeenmuchasocasioneslarepeticióndeaccionessucesivasolaeleccióndeunadeterminadasecuenciaynodeotradependiendodelascondicionesespecíficasdelaejecución.

Comoejemplo,podríamoshaceralusiónaunscriptqueejecuteunasecuenciadiferenteenfuncióndeldíadelasemanaenelquenosencontramos.

Estetipodeaccionespuedenserllevadasacabograciasaunapaletadeinstruccionespresentesenlamayoríadeloslenguajes.EnestecapítulodescribiremossomeramentealgunasdeellaspropuestasporPHPyqueresultandeevidenteutilidad.

Paraevitarelcomplicareltexto,noslimitaremosaintroducirlasmásimportantesdejandodeladootrascuantasquepodránserfácilmenteasimilablesapartirdeejemplosprácticos.

Lascondicionesif

Cuandoqueremosqueelprograma,llegadoaunciertopunto,tomeuncaminoconcretoendeterminadoscasosyotrodiferentesilascondicionesdeejecucióndifieren,nosservimosdelconjuntodeinstruccionesif,elseyelseif.Laestructuradebasedeestetipodeinstruccioneseslasiguiente:

if (condición)

{

Instrucción 1;

Instrucción 2;

...

}

else

{

Instrucción A;

Instrucción B;

...

}

Page 80: Manual de PHP - Walter Carnero · sencillo y directo con el que podrías empezar es PHP. Otra de las claves del éxito de PHP es que la mayoría de los CMS más populares (WordPress,

Manual de PHP

http://desarrolloweb.com/manuales/manual-php.html Página 80 de 142

Llegadosaestepunto,elprogramaverificaráelcumplimientoonodelacondición.Silacondiciónesciertalasinstrucciones1y2seránejecutadas.Delocontrario(else),lasinstruccionesAyBseránllevadasacabo.

Estaestructuradebasepuedecomplicarseunpocomássitenemoscuentaquenonecesariamentetodoesblancoonegroyquemuchasposibilidadespuedendarse.Esporelloqueotrascondicionespuedenplantearsedentrodelacondiciónprincipal.Hablamosporlotantodecondicionesanidadasquetendríanunaestructuradelsiguientetipo:

if (condición1)

{

Instrucción 1;

Instrucción 2;

...

}

else

{

if (condición2)

{

Instrucción A;

Instrucción B;

...

}

else

{

Instrucción X

...

}

}

Deestemodopodríamosintroducirtantascondicionescomoqueramosdentrodeunacondiciónprincipal.

Degranayudaeslainstrucciónelseifquepermiteenunasolalíneaintroducirunacondiciónadicional.Estetipodeinstrucciónsimpificaligeramentelasintaxisqueacabamosdever:

if (condición1)

{

Instrucción 1;

Instrucción 2;

...

}

elseif (condición2)

{

Instrucción A;

Instrucción B;

...

}

else

{

Instrucción X

Page 81: Manual de PHP - Walter Carnero · sencillo y directo con el que podrías empezar es PHP. Otra de las claves del éxito de PHP es que la mayoría de los CMS más populares (WordPress,

Manual de PHP

http://desarrolloweb.com/manuales/manual-php.html Página 81 de 142

...

}

Elusodeestaherramientaresultaráclaroconunpocodepráctica.Pongamosunejemplosencillodeutilizacióndecondiciones.Elsiguienteprogramapermitiríadetectarlalenguaempleadaporelnavegadoryvisualizarunmensajeendichalengua.

<HTML>

<HEAD>

<TITLE>Detector de Lengua</TITLE>

</HEAD>

<BODY>

<?

//Antes de nada introducimos mensajes en forma de variables

$espanol="Hola";

$ingles="Hello";

$frances="Bonjour";

//Ahora leemos del navegador cuál es su lengua oficial

$idioma=substr($HTTP_ACCEPT_LANGUAGE,0,2);

//Formulamos las posibilidades que se pueden dar

if ($idioma == "es")

{echo "$espanol";}

elseif ($idioma=="fr")

{echo "$frances";}

else

{echo "$ingles";}

?>

</BODY>

</HTML>

Ejecutarscript

Parapoderverelfuncionamientodeestescriptesnecesariocambiarelidiomapreferidolocualpuedeserrealizadoapartirdelmenúdeopcionesdelnavegador.

Paraleerlalenguaaceptadaporelnavegadorloquehacemosesdefinirunavariable($idioma)y,mediantelafunciónsubstr,recogemoslasdosprimerasletrasdelcódigocorrespondientealidiomaaceptadoporelnavegador($HTTP_ACCEPT_LANGUAGE).

Latercerapartedescriptseencargadeversielnavegadorestáenespañol(es),francés(fr)oencualquierotroidiomaquenoseaningunodeestosdosydeimprimirelmensajequeprocedaencadacaso.

Anotarque,cuandosetratadecompararvariables,ponemosundobleigual"=="enlugardeunsimple"=".Esteúltimoquedareservadoexclusivamenteparaasignarvaloresavariables

Referencia:Hemospublicadounvídeoparamostrarlacreaciónyelfuncionamientode

Page 82: Manual de PHP - Walter Carnero · sencillo y directo con el que podrías empezar es PHP. Otra de las claves del éxito de PHP es que la mayoría de los CMS más populares (WordPress,

Manual de PHP

http://desarrolloweb.com/manuales/manual-php.html Página 82 de 142

lasestructurasIF:Estructurasdecontrol,Vídeo1:condicionalif

EsteartículoesobradeRubénAlvarezFuepublicadoporprimeravezen01/01/2001Disponibleonlineenhttp://desarrolloweb.com/articulos/12.php

ControldelflujoenPHP:BuclesI

Estructurayfuncionamientodelosbucleswhileydo/while.

Losordenadores,comocualquiermáquina,estándiseñadospararealizartareasrepetitivas.Esporelloquenuestrosprogramaspuedenaprovecharsedeesteprincipiopararealizarunadeterminadasecuenciadeinstruccionesunciertonúmerodeveces.Paraello,utilizamoslasestructurasllamadasenbuclequenosayudana,usandounaspocaslíneas,realizarunatareaincluidadentrodelbucleunciertonumerodevecesdefinidopornosotrosmismos.

PHPproponevariostiposdebuclecadaunoconcaracterísticasespecificas:

Buclewhile

Sindudaelbuclemásutilizadoyelmássencillo.Lousamosparaejecutarlasinstruccionescontenidasensuinteriorsiempreycuandolacondicióndefinidaseaverdadera.Laestructurasintácticaeslasiguiente.

while (condición)

{

instruccion1;

instruccion2;

...

}

Unejemplosencilloesestebuclequeaumentaeltamañodelafuenteenunaunidadacadanuevavueltaporelbucle:

<?

$size=1;

While ($size<=6)

{

echo"<font size=$size>Tamaño $size</font><br>n";

$size++;

}

?>

Ejecutarscript

Amododeexplicación,diremosque,antesdenada,hemosdedefinirelvalordelavariablequevamosaevaluarenlacondición.Algoabsolutamenteobvioperofácildeolvidar.Eneste

Page 83: Manual de PHP - Walter Carnero · sencillo y directo con el que podrías empezar es PHP. Otra de las claves del éxito de PHP es que la mayoría de los CMS más populares (WordPress,

Manual de PHP

http://desarrolloweb.com/manuales/manual-php.html Página 83 de 142

casolehemosatribuidounvalorde1quecorrespondealaletramáspequeña.

Elpasosiguienteescrearelbucleenelqueimponemoslacondiciónquelavariablenoexcedaelvalorde6.

LainstrucciónaejecutarseráimprimirennuestrodocumentouncódigoHTMLenelquelaetiquetafontyelmensajequecontienevaríanamedidaque$sizecambiasuvalor.

Elsiguientepasoesincrementarenunaunidadelvalorde$size.Estosepuedehacerconunaexpresióncomolamostradaenelbucle($size++)queenrealidadessinónimade:

$size=$size+1

Veremosotrasdeestasabreviacionesmásadelante.

OtroejemplodelbubleWhile

Elbuclewhilesesueleutilizacuandonosesabeexactamentecuantasiteracionessedebenrealizarantesdeacabar.Vamosautilizarloenotroejemplo,enelquehayquerecorrerunacadenahastaencontraruncarácterdado.Siloencuentra,escribirsuposición.Sino,escribirquenosehaencontrado.

Nota:Parahaceresteejercicionecesitamosconocerlafuncióndecadenastrlen(),queobtienelalongituddelacadenaqueselepaseporparámetro.

int strlen (string cad)

Devuelveunenteroigualalalongituddelacadena.

<?

$cadena = "hola a todo el mundo";

//recorro la cadena hasta encontrar una "m"

$i=0;

while ($cadena[$i]!="m" && $i< strlen($cadena)){

$i++;

}

if ($i==strlen($cadena))

echo "No se encuentra...";

else

echo "Está en la posición $i";

?>

Enesteejemplosedefineunacadenaconelvalor"holaatodoelmundo".Posteriormentese

Page 84: Manual de PHP - Walter Carnero · sencillo y directo con el que podrías empezar es PHP. Otra de las claves del éxito de PHP es que la mayoría de los CMS más populares (WordPress,

Manual de PHP

http://desarrolloweb.com/manuales/manual-php.html Página 84 de 142

recorreesacadenahastaelfinaldelacadenaohastaencontrarelcaracter"m",utilizandounavariable$iquellevalacuentadeloscaracteresrecorridos.

Alfinaldelbuclewhile,sisesalióporqueseencontróelcaracter"m",lavariable$ivaldráunnúmeromenorquelalongituddelacadema.Sisesalióporllegaralfinaldelacadena,lavariable$ivaldrálomismoquelalongitudencaracteresdeesacadena.Enelcondicionalsimplementesecompruebasi$ivaleonolomismoquelalongituddelacadena,mostrandolosmensajesadecuadosencadacaso.

Podemosverelejemploenfuncionamiento.

Bucledo/while

Estetipodebuclenodifiereenexcesodelanterior.Lasintaxiseslasiguiente:

do

{

instruccion1;

instruccion2;

...

}

while (condición)

Ladiferenciaconrespectoalosbucleswhileesqueestetipodebucleevalúalacondiciónalfinalconloque,inclusosiendofalsadesdeelprincipio,ésteseejecutaalmenosunavez.

Referencia:ParaunaayudaprácticasobreestosbuclesverelsiguientevideotutorialEstructurasdecontrol,Vídeo2:buclesfor,whileydo-while.Además,lasexplicacionessobreestructurasdecontrolsecomplementanconelvideotutorialdeSwitchylasinstruccionesbreakycontinue.

EsteartículoesobradeRubénAlvarezFuepublicadoporprimeravezen01/01/2001Disponibleonlineenhttp://desarrolloweb.com/articulos/12.php

ControldelflujoenPHP:BuclesII

Estructurayfuncionamientodelosbuclesforyforeach.Explicamoscomosalirdeunbucle:Breakycontinue

EsteeselsegundoartículosobrelosbuclesenPHPquepublicamosenelManualdePHP.Elanteriorartículoexplicóacercadelosbucleswhileydo-while.Asípues,ahoravamosadedicarnosalosotrostiposdebucles,quesonelbuclefor,paraiterarunnúmerodadodeveces,foreach,útilpararecorrerarrays,asícomolassentenciasbreakycontinue.

Buclefor

Page 85: Manual de PHP - Walter Carnero · sencillo y directo con el que podrías empezar es PHP. Otra de las claves del éxito de PHP es que la mayoría de los CMS más populares (WordPress,

Manual de PHP

http://desarrolloweb.com/manuales/manual-php.html Página 85 de 142

PHPestáprovistodeotrostiposdebuclequetambiénresultanmuyprácticosendeterminadassituaciones.Elmáspopulardeelloseselbucleforque,comoparaloscasosanteriores,seencargadeejecutarlasinstruccionesentrellaves.Ladiferenciaconlosanterioresradicaencómoseplantealacondicióndefinalizacióndelbucle.Paraaclararsufuncionamientovamosaexpresarelejemplodebuclewhilevistoenelcapítuloanteriorenformadebuclefor:

<?

For ($size=1;$size<=6;$size++)

{

echo"<font size=$size>Tamaño $size</font><br>n";

}

?>

Ejecutarscript

Lasexpresionesdentrodelparéntesisdefinenrespectivamente:

Inicializacióndelavariable.Validaparalaprimeravueltadelbucle.Condicióndeevaluaciónacadavuelta.Siescierta,elbuclecontinua.Acciónarealizaralfinaldecadavueltadebucle.

Bucleforeach

Estebucle,implementadoenlasversionesdePHP4,nosayudaarecorrerlosvaloresdeunarraylocualpuederesultarmuyútilporejemploparaefectuarunalecturarápidadelmismo.Recordamosqueunarrayesunavariablequeguardaunconjuntodeelementos(valores)catalogadosporclaves.

Laestructurageneraleslasiguiente:

Foreach ($array as $clave=>$valor)

{

instruccion1;

instruccion2;

…;

}

Unejemploprácticoeslalecturadeunarraylocualpodríahacersedelsiguientemodo:

<?

$moneda=array("España"=> "Peseta","Francia" => "Franco","USA" => "Dolar");

Foreach ($moneda as $clave=>$valor)

{

echo "Pais: $clave Moneda: $valor<br>";

}

?>

Page 86: Manual de PHP - Walter Carnero · sencillo y directo con el que podrías empezar es PHP. Otra de las claves del éxito de PHP es que la mayoría de los CMS más populares (WordPress,

Manual de PHP

http://desarrolloweb.com/manuales/manual-php.html Página 86 de 142

Ejecutarscript

Estescriptseencargaríademostrarnosporpantallaelcontenidodelarray$moneda.Noresultaríamalaideacrearunafunciónpropiabasadaenestebuclequenospermitiesevisualizararraysmonodimensionalesyalmacenarlaennuestralibrería.Estafunciónpodríaserdefinidadeestaforma:

Function mostrar_array ($array)

{

Foreach ($array as $clave=>$valor)

{echo "$clave=>$valor<br>";}

}

Breakycontinue

Estasdosinstruccionesseintroducendentrodelaestructuraynossirvenrespectivamenteparaescapardelbucleosaltaralaiteraciónsiguiente.Puedenresultarnosmuyprácticasenalgunassituaciones.

Duranteunaiteracióndeunbuclepodemossaltardirectamentealasiguienteiteración,sinseguirconlaactual,conlainstruccióncontinue.

Tambiénpodemosdetenercompletamentelasrepeticionesdecualquierbucleconbreak,loquepararálaejecucióndelaiteraciónactualydelassiguientesquepudierahaber.

Referencia:Sideseasverlaconstruccióndeunbucleforyotrostiposdebucles,envídeoterecomendamoselsiguientevideotutorialEstructurasdecontrol,Vídeo2:buclesfor,whileydo-while.

Además,sideseasaprenderlaestructuradecontrolswitchylasinstruccionesbreakycontinue,asícomoverotroejemplodeforeach,terecomendamosverlosVideotutorialesdeestructurasdecontrolenPHPII.

EsteartículoesobradeRubénAlvarezFuepublicadoporprimeravezen01/01/2001Disponibleonlineenhttp://desarrolloweb.com/articulos/12.php

Page 87: Manual de PHP - Walter Carnero · sencillo y directo con el que podrías empezar es PHP. Otra de las claves del éxito de PHP es que la mayoría de los CMS más populares (WordPress,

Manual de PHP

http://desarrolloweb.com/manuales/manual-php.html Página 87 de 142

Aplicacionesweb:pasodevariablesymemoriadeestados

EnlossiguientescapítulosveremosdiversasmanerasqueexistenenPHPparaconseguirqueunconjuntodepáginasyscriptssecomportencomounaaplicaciónweb.Veremoscómopasardatosdeunaspáginasaotras,porPOSTyGET,cómomemorizardatosasociadosaunusuarioalolargodetodalasesiónycómomemorizardatosencookies,queperduraránentrevariassesiones.

PasarvariablesporlaURLconPHP

VeremoscómotransferirvariablesdeunapáginaaotrapormediodelaURL,enPHP.

Buclesycondicionessonmuyútilesparaprocesarlosdatosdentrodeunmismoscript.Sinembargo,enunsitioInternet,laspáginasvistasylosscriptsutilizadossonnumerosos.Muyamenudonecesitamosquenuestrosdistintosscriptsesténconectadosunosconotrosyquesesirvandevariablescomunes.Porotrolado,elusuariointeraccionapormediodeformularioscuyoscamposhandeserprocesadosparapoderdarunarespuesta.TodoestetipodefactoresdinámicoshandesereficazmentereguladosporunlenguajecomoPHP.

Esposiblequeyaoshayáispercatadodequelasvariablesdeunscripttienenunavalidezexclusivaparaelscriptyquenosresultaimposibleconservarsuvalorcuandoejecutamosotroarchivodistintoaunqueambosesténenlazados.Existenvariasformasdeenviarlasvariablesdeunapáginaaotrademaneraaquelapáginadestinoreconozcaelvalorasignadoporelscriptdeorigen:

PasarvariablesporURL

Parapasarlasvariablesdeunapáginaaotralopodemoshacerintroduciendodichavariabledentrodelenlacehipertextodelapáginadestino.Lasintaxisseríalasiguiente:

<a href="destino.php?variable1=valor1&variable2=valor2&...">Mi enlace</a>

Podéisobservarqueestasvariablesnoposeenelsímbolo$delante.EstoesdebidoaqueenrealidadestemododepasarvariablesnoesespecíficodePHPsinoqueesutilizadoporotroslenguajes.

Ahoranuestravariablepertenecetambiénalentornodelapáginadestino.phpyestálistaparasuexplotación.

Page 88: Manual de PHP - Walter Carnero · sencillo y directo con el que podrías empezar es PHP. Otra de las claves del éxito de PHP es que la mayoría de los CMS más populares (WordPress,

Manual de PHP

http://desarrolloweb.com/manuales/manual-php.html Página 88 de 142

Nota:Nosiempresedefinenautomáticamentelasvariablesrecibidasporparámetroenlaspáginasweb,dependedeunavariabledeconfiguracióndePHP:register_globals,quetienequeestaractivadaparaqueasísea.Vercomentariosdelartículoalfinaldelapáginaparamásinformación.

Paraaclararposiblesdudas,veamosestoenformadeejemplo.Tendremospuesdospáginas,origen.html(noesnecesariodarleextensiónPHPpuestoquenohayningúntipodecódigo)ydestino.php:

<HTML>

<HEAD>

<TITLE>origen.html</TITLE>

</HEAD>

<BODY>

<a href="destino.php?saludo=hola&texto=Esto es una variable texto">Paso variables saludo y texto a la página destino.php</a>

</BODY>

</HTML>

<HTML>

<HEAD>

<TITLE>destino.php</TITLE>

</HEAD>

<BODY>

<?

echo "Variable $saludo: $saludo <br>n";

echo "Variable $texto: $texto <br>n"

?>

</BODY>

</HTML>

Ejecutarejemplo

$HTTP_GET_VARS

Recordamosqueesposiblerecopilarenunavariabletipoarrayelconjuntodevariablesquehansidoenviadasalscriptporestemétodoapartirdelavariabledesistema$HTTP_GET_VARS,queesunarrayasociativo.Utilizándoloquedaríaasí:

<?

echo "Variable $saludo: $HTTP_GET_VARS["saludo"] <br>n";

echo "Variable $texto: $HTTP_GET_VARS["texto"] <br>n"

?>

Nota:Aunquepodamosrecogervariablesconestearrayasociativooutilizardirectamentelasvariablesquesedefinenennuestrapágina,resultamásseguroutilizar$HTTP_GET_VARSpordosrazones,laprimeraqueasínosaseguramosqueesavarible

Page 89: Manual de PHP - Walter Carnero · sencillo y directo con el que podrías empezar es PHP. Otra de las claves del éxito de PHP es que la mayoría de los CMS más populares (WordPress,

Manual de PHP

http://desarrolloweb.com/manuales/manual-php.html Página 89 de 142

vienerealmentedelaURLylasegunda,queasínuestrocódigoserámásclarocuandolovolvamosaleer,porquequedaráespecificadoqueesavariableestamosrecibiéndolaporlaURL.

$_GET

Apartirdelaversión4.1.0dePHPsehaintroducidoelarrayasociativo$_GET,queesidénticoa$HTTP_GET_VARS,aunqueunpocomáscortodeescribir.

CaracteresespecialesenURLysucodificaciónconPHP

Hayalgunoscaracteresrarosquenosepuedenpasar,talcual,porlaURL.Porejemplo,unaURLnopuedecontenerespaciosenblanco,porloquesiintentasenviarunavariableporURLconunvalorquetieneunespacioenblanco,tedaráproblemas.Porejemplo,elsigno"*"nopuedefigurartampocoenunaURL.Asípues,tenemosquehaceralgoparaconvetiresoscaracteres,demodoquenodenproblemasenlaURL.

LasoluciónenPHPessencilla,simplementedebemoscodificarlavariablequetienecaracteresconflictivosaformatoURL.Paraelloutilizamoslafunciónurlenconde(),quevieneenlalibreríadefuncionesdePHP.PodemosencontrarmásinformaciónsobreestoenlaFAQ:ProblemasconvariablespasadasenlaURLenalgunoscaracteres.

Referencia:Silodeseas,puedescomplementarestainformaciónconunosexplicativosvideotutorialessobreelpasodevariablesporGETenPHP.

EsteartículoesobradeRubénAlvarezFuepublicadoporprimeravezen01/01/2001Disponibleonlineenhttp://desarrolloweb.com/articulos/12.php

Procesarvariablesdeformularios.POSTenPHP

VeremoscómotransferirvariablesconPHP,deunapáginaaotrapormediodeformularios,loqueseconocehabitualmenteporPOST.

Estetipodetransferenciaesdegranutilidadyaquenospermiteinteraccionardirectamenteconelusuario.

ElprocesoessimilaralexplicadoparalasURLs.Primeramente,presentamosunaprimerapáginaconelformularioclásicoarellenarylasvariablessonrecogidasenunasegundapáginaquelasprocesa:

Nota:Nosiempresedefinenautomáticamentelasvariablesrecibidasporelformularioenlaspáginasweb,dependedeunavariabledeconfiguracióndePHP:register_globals,quetienequeestaractivadaparaqueasísea.Vercomentariosdelartículoalfinaldelapáginaparamásinformación.

Page 90: Manual de PHP - Walter Carnero · sencillo y directo con el que podrías empezar es PHP. Otra de las claves del éxito de PHP es que la mayoría de los CMS más populares (WordPress,

Manual de PHP

http://desarrolloweb.com/manuales/manual-php.html Página 90 de 142

<HTML>

<HEAD>

<TITLE>formulario.html</TITLE>

</HEAD>

<BODY>

<FORM METHOD="POST" ACTION="destino2.php">

Nombre<br>

<INPUT TYPE="TEXT" NAME="nombre"><br>

Apellidos<br>

<INPUT TYPE="TEXT" NAME="apellidos"><br>

<INPUT TYPE="SUBMIT">

</FORM>

</BODY>

</HTML>

<HTML>

<HEAD>

<TITLE>destino2.php</TITLE>

</HEAD>

<BODY>

<?

echo "Variable $nombre: $nombre <br>n";

echo "Variable $apellidos: $apellidos <br>n"

?>

</BODY>

</HTML>

Ejecutarejemplo

$HTTP_POST_VARS

Recordamosqueesposiblerecopilarenunavariabletipoarrayelconjuntodevariablesquehansidoenviadasalscriptporestemétodoapartirdelavariabledesistema$HTTP_POST_VARS.

echo "Variable $nombre: " . $HTTP_POST_VARS["nombre"] . "<br>n";

Nota:Aunquepodamosrecogervariablesconestearrayasociativooutilizardirectamentelasvariablesquesedefinenennuestrapágina,resultamásseguroutilizar$HTTP_POST_VARSpordosrazones,laprimeraqueasínosaseguramosqueesavariblevienerealmentedeunformularioylasegunda,queasínuestrocódigoserámásclarocuandolovolvamosaleer,porquequedaráespecificadoqueesavariableestamosrecibiéndolaporunformulario.

$_POST

Page 91: Manual de PHP - Walter Carnero · sencillo y directo con el que podrías empezar es PHP. Otra de las claves del éxito de PHP es que la mayoría de los CMS más populares (WordPress,

Manual de PHP

http://desarrolloweb.com/manuales/manual-php.html Página 91 de 142

ApartirdePHP4.1.0sepuedenrecogerlasvariablesdeformularioutilizandotambiénelarrayasociativo$_POST,queeselmismoque$HTTP_POST_VARS,peromáscortodeescribir.

Ejemploderestriccióndeaccesoporedad

Paracontinuaraportandoejemplosalusodeformulariosvamosarealizarunapáginaquemuestrasolicitalaedaddelvisitantey,dependiendodedichaedad,permitaonovisualizarelcontenidodelaweb.Alosmayoresde18añosselespermiteverlapáginayalosmenoresno.

Elejemploesmuysencilloynovaldríatalcualestáparautilizarloamododeunaverdaderarestriccióndeacceso.Únicamentenossirveparasabercómoobtenerdatosdeunformularioycomotratarlospararealizarunauotraacción,dependiendodesuvalor.

Lapáginadelformulario,quehemosllamadoedad.phptendríaestaforma:

<html>

<head>

<title>Restringir por edad</title>

</head>

<body>

<form action="edad2.php" method="post">

Escribe tu edad: <input type="text" name="edad" size="2">

<input type="submit" value="Entrar">

</form>

</body>

</html>

EstaesunapáginasinningúncódigoPHP,simplementetieneunformulario.Fijémonosenelactiondelformulario,queestádirigidohaciaunapáginallamadaedad2.php,queeslaquerecibiráeldatodelaedadymostraráuncontenidouotrodependiendodeesevalor.Sucódigoeselsiguiente:

<html>

<head>

<title>Restringir por edad</title>

</head>

<body>

<?

$edad = $_POST["edad"];

echo "Tu edad: $edad<p>";

if ($edad < 18) {

echo "No puedes entrar";

}else{

echo "Bienvenido";

Page 92: Manual de PHP - Walter Carnero · sencillo y directo con el que podrías empezar es PHP. Otra de las claves del éxito de PHP es que la mayoría de los CMS más populares (WordPress,

Manual de PHP

http://desarrolloweb.com/manuales/manual-php.html Página 92 de 142

}

?>

</body>

</html>

Esperamosqueesteotrocódigotampocoresulteextraño.Simplementeserecibelaedad,utilizandoelarray$_POST.Luegosemuestralaedadyseejecutaunaexpresióncondicionalenfuncióndequelaedadseamenorque18.Encasopositivo(edadmenorque18),semuestraunmensajequeinformadequenosedejaaccederalpágina.Encasonegativo(mayoroiguala18)semuestraunmensajedebienvenida.

Podemosverelejemploenfuncionamiento.

EsteartículoesobradeRubénAlvarezFuepublicadoporprimeravezen01/01/2001Disponibleonlineenhttp://desarrolloweb.com/articulos/12.php

ConceptosdeprogramaciónenPHPporlapráctica

Vídeoenelqueaclaramosypracticamosconconceptosbásicosdeprogramacióncomovariables,estructurasdecontrol,bucles,etc.

Enestevídeoexplicamosalgunosconceptosdeprogramaciónbásicos,orientadosapersonasquenosabenprogramaciónoquetienenpocaexperienciaprogramando.EslaterceradeunaseriedetresclasesgratuitasimpartidasenDesarrolloWeb.comparaacercarsealmundodelaprogramaciónconPHP.

Elobjetivoesconcretarenlíneasdecódigo,ydesdeunpuntodevistapráctico,algunosdelosconceptosvistosdurantelasdosprimerasclasesdePHPparano-programadores,comosonlasvariables,estructurasdecontrolparalatomadedecisiónyparahacerbuclesorepeticiones.Además,queremosrealizaralgúnejemploprácticoquenosayudeademostrarloútilqueesPHPparatareasdeldíaadíadelosdesarrolladores,comoeselenvíoyrecepcióndeunformulario.

PretendemosacercarelmundodePHPparapersonasquenotienenconocimientosdeprogramacióndeunamanerarápidaydarreferenciasparaseguiraprendiendo,asícomopresentartambiénlasegundaconvocatoriadelCursodePHPqueestamosorganizandoenEscuelaIT.

Enesteartículoencontrarásloscódigosdelosejerciciosrealizadosenclaseyalfinaldeltodo,elvídeodelapropiaclase,juntoconelturnodepreguntasquenosrealizaronlosestudiantes.

ComenzamoslaclaseexplicandocómoarrancarunservidorwebparapoderprogramarconPHPenlocal,porsialguientodavíaandaperdidoconeseasunto,ycómocolocararchivosdentrodelservidorparapoderaccederaellosdesde"localhost".Apartirdeellorealizamosdosejemplos:

Page 93: Manual de PHP - Walter Carnero · sencillo y directo con el que podrías empezar es PHP. Otra de las claves del éxito de PHP es que la mayoría de los CMS más populares (WordPress,

Manual de PHP

http://desarrolloweb.com/manuales/manual-php.html Página 93 de 142

ConceptosbásicosparalaprogramaciónconPHP

Amododeprimerospasos,ydeintroducciónalmundodelaprogramaciónydellenguajePHP,enesteejemplosemostraronencódigoconceptosbásicosdelaprogramación.

1. Comentarios2. Variablesytipos3. Operadores,aritméticos,decadena,comparación,asignación4. Estructurasdecontrolparatomadedecisiones5. Bucles

Ellistadodecódigoqueserealizóendirectoeselsiguiente:

<!DOCTYPE html>

<html>

<head>

<title>Ej 1 de PHP</title>

</head>

<body>

<h1>Estoy en PHP!!</h1>

<?php

//codigo PHP

//echo "Hola mundo!!";

// variables

$mivariable = 2323;

$v2 = "texto";

//hacer algo con ellas

echo $v2;

echo "<br>";

//operaciones

// 1+4

// "hola" . "mundo"

// $v3 = "pepe";

/*

Esto es un comentario

de muchas

líneas

*/

$contador = 5 + 5;

$contador = $contador + 10;

echo $contador;

// estructuras de control

Page 94: Manual de PHP - Walter Carnero · sencillo y directo con el que podrías empezar es PHP. Otra de las claves del éxito de PHP es que la mayoría de los CMS más populares (WordPress,

Manual de PHP

http://desarrolloweb.com/manuales/manual-php.html Página 94 de 142

$edad = 34;

if($edad < 18){

echo "Si es menor de 18";

}

// repeticiones o bucles

while($contador < 100){

// todo esto se repetirá

echo "contador vale " . $contador;

echo "<br>";

$contador = $contador + 7;

}

?>

</body>

</html>

Ejemploprácticodeenvíoyrecepcióndeunformulario

EnunsegundoejercicioprácticodeestaclasedePHPsemostrólofácilqueesenviardatosdesdeunformularioaunapáginawebyrecibirlosparaprocesaryrealizaraccionesdiferentessegúnsusvalores.

SeexplicóqueunformulariosehaceenHTML,talcomoestamosacostumbradosahacersiyahemosrealizadopáginaswebenalgunaocasión.ElcódigodelapáginaconelformularioHTMLquerealizamoseselsiguiente:

<!DOCTYPE html>

<html>

<head>

<title>Formulario</title>

</head>

<body>

<h1>Ejemplo con formularios</h1>

<form method="post" action="recibe-formulario.php">

Nombre: <input type="text" name="nombre" value="Escribe tu nombre">

<br>

Edad: <input type="text" name="edad" value="">

<br>

<input type="submit" value="Enviar">

</form>

</body>

</html>

TodalapartedePHPsequedasimplementeenlarecepcióndelosdatosdeeseformularioysuprocesamiento,queenesteejemploserealizóenunapáginayarchivoaparte.Elprocesamientoqueseimplementóesmuysencillo,simplementeparadarnoscuentadequebásicamenteconPHPpodemosaccederalosdatosdelformulariodeunamaneramuysencilla,

Page 95: Manual de PHP - Walter Carnero · sencillo y directo con el que podrías empezar es PHP. Otra de las claves del éxito de PHP es que la mayoría de los CMS más populares (WordPress,

Manual de PHP

http://desarrolloweb.com/manuales/manual-php.html Página 95 de 142

atravésdelosarrays$_POSTymencionandosus"hermanos"$_GETo$_REQUEST.

Elejemploesmuysimple,aunquepocoapocofuimoscomplicandounpocoparaintroducirdiversosmétodosdeintegrarcódigoPHPenunapáginaHTML,porloqueellistadoacontinuaciónpuedeparecerunpococomplejoenunprimervistazo,aunqueenlaclaseseexplicatodoperfectamenteypasoapaso.

<!DOCTYPE html>

<html>

<head>

<meta charset="utf-8" />

<title>recibo datos del form</title>

</head>

<body>

<?php

//recibo

$nombre_usuario = $_POST["nombre"];

$edad_usuario = $_POST["edad"];

//valido los datos

//echo "Hola " . $nombre_usuario . " tu edad es " . $edad_usuario;

// toma de decisión en función de la edad

if($edad_usuario >= 18){

?>

<div style="color: blue;">

<b>

<?php

echo "Hola $nombre_usuario, como tu edad es $edad_usuario, puedes ver este contenido!!";

?>

</b></div>

<?php

}else{

//parte negativa

echo '<span style="color: red;">';

echo "Lo siento $nombre_usuario, no puedes ver esta página!!! Adiós!";

echo "</span>";

}

?>

</body>

</html>

VídeocompletodelaterceraclasedePHPparano-programadores

Acontinuaciónpuedesverelvídeocompletodelaclaseenelqueserealizanlosejemplosdecódigoanteriores,pasoporpaso,alolargode90minutos.Esperamosqueossirvaparaaclarar

Page 96: Manual de PHP - Walter Carnero · sencillo y directo con el que podrías empezar es PHP. Otra de las claves del éxito de PHP es que la mayoría de los CMS más populares (WordPress,

Manual de PHP

http://desarrolloweb.com/manuales/manual-php.html Página 96 de 142

muchosconceptosytambiénqueosresulteentretenido.

RecuerdaquepuedesseguiraprendiendoPHPconnosotrosdemaneraautodidactaconlosmanualesgratuitosdeDesarrolloWeb.comenlasecciónPHPafondoyquesiteinteresaaprenderdemaneraintensiva,guiadaypersonalizada,conclasesenvivodurantelaspróximassemanas,puedesapuntarteconnosotrosalCursocompletodePHP.

Paraverestevídeoesnecesariovisitarelartículooriginalen:http://desarrolloweb.com/articulos/conceptos-programacion-php-practica.html

EsteartículoesobradeMiguelAngelAlvarezFuepublicadoporprimeravezen10/09/2013Disponibleonlineenhttp://desarrolloweb.com/articulos/conceptos-programacion-php-practica.html

Autollamadadepáginas

PáginasquesellamanasimismaspasandodatosporPOSToGET:formulariosreentrantesyvariablespasadasporURLalamismapágina.

Alincluirunformularioenunapáginasedebeindicar,atravésdelatributoaction,elnombredelarchivoPHPalqueenviaremoslosdatosescritosenelformulario.Deestemodo,paraunesquemadeenvíodedatosporformulario,puedenparticipardospáginas:unaquecontieneelformularioyotraquerecibelosdatosdedichoformulario.

LomismoocurrecuandoenviamosvariablesporunaURL.Tenemosunapáginaquecontendráelenlaceyotrapáginaquerecibiráytrataráesosdatosparamostrarunosresultados.

Enelpresenteartículovamosavercómosepuedeenviaryrecibirdatosdeunformularioconunaúnicapágina.Asimismo,veremoscomoenlamismapáginapodemostenerenlacesconpasodevariablesporURLyademás,podemosrecogerytrataresosdatosconlamismapágina.Aesteefectopodemosllamarte"autollamadadepáginas",tambiénselesuelellamarcomo"Formulariosreentrantes"otérminossimilares.Esmuyinteresanteconocerelmododefuncionamientodeestosscripts,porqueseránmuyhabitualesennuestraspáginasPHPyayudanmuchoatenerloscódigosordenados.

Enamboscasos,paraformulariosoenvíodedatosporlaURL,sedebeseguirunesquemacomoeste:

ComprobarsirecibodatosporURLoporformularioSinorecibodatos

Muestroelformularioolosenlacesquepasanvariables.Sirecibodatos

EntoncestengoqueprocesarelformularioolasvariablesdelaURL

Paraunformulario

Page 97: Manual de PHP - Walter Carnero · sencillo y directo con el que podrías empezar es PHP. Otra de las claves del éxito de PHP es que la mayoría de los CMS más populares (WordPress,

Manual de PHP

http://desarrolloweb.com/manuales/manual-php.html Página 97 de 142

Veamosacontinuacióncomoseríaelcódigodeunformularioreentrante.

<html>

<head>

<title>Me llamo a mi mismo...</title>

</head>

<body>

<?

if (!$_POST){

?>

<form action="auto-llamada.php" method="post">

Nombre: <input type="text" name="nombre" size="30">

<br>

Empresa: <input type="text" name="empresa" size="30">

<br>

Telefono: <input type="text" name="telefono" size=14 value="+34 " >

<br>

<input type="submit" value="Enviar">

</form>

<?

}else{

echo "<br>Su nombre: " . $_POST["nombre"];

echo "<br>Su empresa: " . $_POST["empresa"];

echo "<br>Su Teléfono: " . $_POST["telefono"];

}

?>

</body>

</html>

Enelejemplo,elprimerpasoesconocersiseestánrecibiendoonodatosporunformulario.Paraellosecompruebaconunenunciadoifsiexisteonounavariable$_POST.

Enconcretoif(!$_POST)querríadeciralgocomo"Sinoexistendatosvenidosdeunformulario".Encasodequenoexistan,muestroelformulario.Encasodequesíexistan,recojolosdatosylosimprimoenlapágina.

Sepuedeverelejemploenfuncionamientoenunapáginaaparte.

ParapasodevariablesporURL

Laideaeslamisma.ComprobarconunenunciadoifsiserecibenonodatosdesdeunaURL.Veamoselcódigoacontinuación.Setratadeunapáginaquemuestraunaseriedeenlacesparaverlastablasdemultiplicardeel1hastael10.Cadaunodelosenlacesmuestraunatablademultiplicar.Pulsandoelprimerenlacepodemosverlatabladel1,pulsandoelsegundolatabladel2,etc.

Recordemosquelapáginasellamaasimisma.Paracomprenderlamásfácilmenteseráinteresanteverlaenfuncionamiento.

Page 98: Manual de PHP - Walter Carnero · sencillo y directo con el que podrías empezar es PHP. Otra de las claves del éxito de PHP es que la mayoría de los CMS más populares (WordPress,

Manual de PHP

http://desarrolloweb.com/manuales/manual-php.html Página 98 de 142

<html>

<head> <title>Tablas de multiplicar</title>

</head>

<body>

<?

if (!$_GET){

for ($i=1;$i<=10;$i++){

echo "<br><a href='ver_tabla.php?tabla=$i'>Ver la tabla del $i</a>\n";

}

} else {

$tabla=$_GET["tabla"];

?>

<table align=center border=1 cellpadding="1">

<?

for ($i=0;$i<=10;$i++){

echo "<tr><td>$tabla X $i</td><td>=</td><td>" . $tabla * $i . "</td></tr>\n";

}

?>

</table>

<?

}

?>

</body>

</html>

Estecódigoesunpocomáscomplicado,porquehaceunpocomásdecosasqueelanterior,peroparaelasuntoquenosocupaqueeslaautollamadadepáginas,todosigueigualdesimple.

HayquefijarseenelifquecompruebasiserecibenonodatosporURL:if(!$_GET),quequerríadeciralgocomo"SinoserecibenvariablesporlaURL".

Encasopositivo(noserecibendatosporURL)semuestranlosenlacesparavercadaunadelastablasyencasodequesíserecibandatos,semuestralatablademultiplicardelnúmeroqueseestárecibiendoenlaURL.

Parahacerparamostrarlosenlacesylastablasdemultiplicarseutilizanbuclesfor,queesperamosquenoresultendesconocidosparaellector.PuedeconocersealgomássobrelosbuclesforenControldelflujoenPHP:BuclesII.

EsteartículoesobradeMiguelAngelAlvarezFuepublicadoporprimeravezen24/04/2004Disponibleonlineenhttp://desarrolloweb.com/articulos/12.php

UtilizacióndelascookiesenPHP

AprendemossobrelascookiesenPHP.Explicamosenquéconsistenestas

Page 99: Manual de PHP - Walter Carnero · sencillo y directo con el que podrías empezar es PHP. Otra de las claves del éxito de PHP es que la mayoría de los CMS más populares (WordPress,

Manual de PHP

http://desarrolloweb.com/manuales/manual-php.html Página 99 de 142

célebresgalletasydescribimossuempleoyutilidad.

Sindudaestetérminoresultarafamiliarparamuchos.Algunoslohabránleídouoídoperonosabendequésetrata.Otrossinembargosabránquelascookiessonunasinformacionesalmacenadasporunsitiowebeneldiscodurodelusuario.Estainformaciónesalmacenadaenunarchivotipotextoqueseguardacuandoelnavegadoraccedealsitioweb.

Referencia:UnaexplicacióndelascookiesmásdetalladasepuedeencontrarenelartículoQuésonlascookies,publicadoenDesarrolloWeb.com.

Esposible,porsupuesto,verestosarchivos.ParaabrirloshayqueiraldirectorioC:WindowsCookiesparalosusuariosdeIE4+oaC:...NetscapeUsersdefaultuserparausuariosdeNetscape.Comopodréiscomprobar,enlamayoríadeloscasoslainformaciónquesepuedeobteneresindescifrable.

Lautilidadprincipaldelascookiesesladepoderidentificaralnavegadorunavezéstevisitaelsitioporsegundavezyasí,enfuncióndelperfildelclientedadoensuprimeravisita,elsitiopuedeadaptarsedinámicamenteasuspreferencias(lenguautilizada,coloresdepantalla,formulariosrellenadostotaloparcialmente,redirecciónadeterminadaspáginas...).

ParacrearcookiesconPHP,modificarogenerarunanuevacookielopodemoshacerapartirdelafunciónSetCookie:

setcookie("nombre_de_la_cookie",valor,expiracion);

Pongamosunejemplosencillo.Imaginemosquequeremosintroducirenunavariablecookieelnombredelvisitante.Elnombrehapodidoserpreviamenterecogidoporunformulariotalycomohemosvisto:

setcookie("persona",$nombre,time()+86400*365);

Deestemodohemoscreadounacookiephpllamadapersonaquetienecomovalorelcontenidodelavariable$nombreytendráunaduraciónde1añoapartirdesucreación(eltiempotime()actualensegundossumadoaunañoensegundos).

EsimportantequelacreacióndelacookieseapreviaalaaperturadeldocumentoHTML.Enotraspalabras,lasllamadasalafunciónsetcookie()debensercolocadasantesdelaetiquetaHTML.

Porotraparte,esinteresanteseñalarqueelhechodequedefinirunacookieyaexistenteimplicaelborradodelaantigua.Delmismomodo,elcrearunaprimeracookieconllevalageneraciónautomáticadelarchivotexto.

Parautilizarelvalordelacookieennuestrosscriptstansólotendremosquellamarlavariable

Page 100: Manual de PHP - Walter Carnero · sencillo y directo con el que podrías empezar es PHP. Otra de las claves del éxito de PHP es que la mayoría de los CMS más populares (WordPress,

Manual de PHP

http://desarrolloweb.com/manuales/manual-php.html Página 100 de 142

quedefinelacookie.¡Realmentesencillo!

HayquetenercuidadosinembargodenodefinirvariablesennuestroscriptconelmismonombrequelascookiespuestoquePHPprivilegiaráelcontenidodelavariablelocalconrespectoalacookieynodaráunmensajedeerror.Estonospuedeconduciraerroresrealmentedifícilesdedetectar.

Recordamosqueesposiblerecopilarenunavariabletipoarrayelconjuntodecookiesalmacenadaseneldiscodurodelinternautamediantelavariabledeservidor$HTTP_COOKIE_VARS

Lascookiessonunaherramientafantásticaparapersonalizarnuestrapáginaperohayquesercautosyaque,porunaparte,notodoslosnavegadoreslasaceptanyporotra,sepuededeliberadamenteimpediralnavegadorlacreacióndecookies.Esporelloqueresultanuncomplementoynounafuentedevariablesinfalibleparanuestrositio.Comohaspodidover,lasCookiessonmuysencillasdeutilizarenPHP.

Puedesprofundizarmásenlacreacióndecookiesenelsiguientearticulo:CookiesenPHP.Además,tambiénterecomendamosverelVideotutorialsobrelasCookiesenPHP.

EsteartículoesobradeRubénAlvarezFuepublicadoporprimeravezen01/01/2001Disponibleonlineenhttp://desarrolloweb.com/articulos/12.php

CookiesenPHP

ExplicacionescompletassobrecookiesenPHP,contodoslosparámetrosdelafunciónsetcookie()yelarray$_COOKIE

EnesteartículodelManualdePHPvamosademostrarosquelascookiesenPHPsonmuyfácilesdeutilizar.Yaempezamosaexplicaralgunasclavesinteresantessobreesteasuntoenelartículoutilizacióndecookies,anteriorentregadeltemariodeDesarrolloWeb.comsobrelaprogramaciónenPHP.

Enelpresenteartículovamosamostrarotrosdetallesqueconvienesaberparatrabajarconlascookies.Tantolosprocesosdecreacióncomolosdelectura,perosobretodovamosarealizarunestudiocompletosobrelosdiferentesparámetrosquetenemosdisponiblesalahoradellamaralafunciónsetcookie(),quesirveparadardealtalasgalletitasenelnavegadordelusuarioquevisitanuestraweb.

CrearcookiesenPHP

EnPHPlascookiessecontrolanpormediodeunafunción,quenossirveparagenerarlasyguardarlasenelnavegadordelusuario.Eslafunciónsetcookie(),querecibevariosparámetros,entreellos,elnombredelacookie,elvalorylacaducidad.Elúnicoparámetroobligatorioeselprimero,elnombredelacookie,losdemássonopcionales.

Page 101: Manual de PHP - Walter Carnero · sencillo y directo con el que podrías empezar es PHP. Otra de las claves del éxito de PHP es que la mayoría de los CMS más populares (WordPress,

Manual de PHP

http://desarrolloweb.com/manuales/manual-php.html Página 101 de 142

Veamoslalistaenteradeparámetrosdesetcookie()consusexplicaciones:

Nombre

Unstringconelnombrequequeremosdarlealacookieaguardar.Puedesercualquieraquedeseemos.

Valor

Unacadenadecaracteresqueeselvalorquevaatenerlacookie.

Caducidad

Esuntimestampconelvalordelafechaenlaquecaducarálacookie.Lonormalesutilizarlafuncióntime(),quegeneraeltimestampactualysumarleelnúmerodesegundosquequedamosquedurelacookie.Porejemplo,time()+(606024*365)haríaquelacookieduraseunañoenelsistemadelusuario.

Ruta

Elcaminoorutadondelacookiesepodráutilizardentrodeldominio.Pordefecto,lacookiesepodráutilizareneldirectoriodondesehacreadoysussubdirectorios.Siindicamos"/"lacookietendrávalidezdentrodetodoeldominio.

Dominio

Eselsubdominiodondesepodráaccederalacookie.Lascookiessólosepuedengeneraryutilizarparaeldominiodelapáginadondeestácolocadoelscript,peropodemoshacerlovisibleparatodoslossubdominiosdeldominiodelawebpormediode".midominio.com".

Seguro

Esunboleanoque,siestrue,indicaquelacookiesólopuedesertransmitidaporshttp(httpseguro).

Sólohttp

Estoesotroboleanoquesirveparaindicarquelacookiesólopuedeseraccedidapormediodelascabecerasdelhttp,loquelaharíainalcanzableparalenguajesdescriptenelclientecomoJavascript.EsteparámetrofueañadidoenPHP5.2.0

Lafunctionsetcookie()dePHPgenerayenvíalacookiealnavegadorydevuelveunboleano,siestrueindicaquesepudoincluirenelnavegadordelusuarioysiesfalseindicaquenohapodidocolocarlaenelsistema.Peroestevalornoindicaqueluegoelvisitantelahayaaceptadoono,puestoqueelnavegadorpuedehaberloconfiguradoparanoaceptarcookiesy

Page 102: Manual de PHP - Walter Carnero · sencillo y directo con el que podrías empezar es PHP. Otra de las claves del éxito de PHP es que la mayoría de los CMS más populares (WordPress,

Manual de PHP

http://desarrolloweb.com/manuales/manual-php.html Página 102 de 142

estonolopuededetectarsetcookie()directamente.

Porejemplo,estasseríandiferentesllamadasasetcookie():

setcookie("migalleta", "mivalor");

setcookie("cookie2", "mivalor2", time() + 3600);

setcookie("otracookie", "valorfinal", time() + 3600, "/", ".midominio.com");

Peroatenciónenunasunto:Paraenviarunacookiealnavegadorsedebehacerantesdehaberenviadolascabecerasdelhttpalcliente,esdecir,antesdehaberescritocualquiertextoenlapágina.Sino,PHPpodrálanzarunerrordeheadersalreadysent(cabecerasyaenviadas).

RecuperarcookiesconPHP

Porotraparte,pararecibirlascookiesqueelnavegadordelusuariopuedatenercreadasenelsistemaseutilizaelarrayasociativo$_COOKIE.EnestearrayestántodaslascookiesquetienedisponiblelapáginaPHPeneldominioyeldirectoriodondeestácolocado.

Pormediodelnombredelacookieaccedemosasuvalor:

$_COOKIE["migalleta"];

$_COOKIE["cookie2"];

ParaverunejemplodeusodecookiesPHPaccederaltallerdePHPEstilosCSSdistintosaunapáginaconPHPycookiesoalVideotutorialsobrelasCookiesenPHP.

EsteartículoesobradeMiguelAngelAlvarezFuepublicadoporprimeravezen19/12/2007Disponibleonlineenhttp://desarrolloweb.com/articulos/cookies-en-php.html

SesionesI

Nosintroducimosalconceptodesesiónyaprendemossumanejoyfuncionamiento.

Enlosprogramasquehemosvistohastaahora,hemosutilizadovariablesquesóloexistíanenelarchivoqueeraejecutado.Cuandocargábamosotrapáginadistinta,losvaloresdeestasvariablesseperdíanamenosquenostomásemoslamolestiadepasarlosporlaURLoinscribirlosenlascookiesoenunformularioparasuposteriorexplotación.Estosmétodos,aunqueútiles,nosontodoloprácticosquepodríanendeterminadoscasosenlosquelavariablequequeremosconservarhadeserutilizadaenvariosscriptsdiferentesydistanteslosunosdelosotros.

Podríamospensarqueeseproblemapuedequedarresueltoconlascookiesyaquesetratade

Page 103: Manual de PHP - Walter Carnero · sencillo y directo con el que podrías empezar es PHP. Otra de las claves del éxito de PHP es que la mayoría de los CMS más populares (WordPress,

Manual de PHP

http://desarrolloweb.com/manuales/manual-php.html Página 103 de 142

variablesquepuedenserinvocadasencualquiermomento.Elproblema,yalohemosdicho,esquelascookiesnosonaceptadasniporlatotalidaddelosusuariosniporlatotalidaddelosnavegadoreslocualimplicaqueunaaplicaciónquesesirvieradelascookiesparapasarvariablesdeunarchivoaotronosería100%infalible.Esimportanteavecespensaren"lainmensaminoría",sobretodoenaplicacionesdecomercioelectrónicodondedebemoscaptarlamayorcantidaddeclientesposiblesynuestrosscriptsdebenestarpreparadosantecualquiereventualdeficienciadelnavegadordelcliente.

Nosresultapuesnecesarioelpoderdeclararciertasvariablesquepuedanserreutilizadastantasvecescomoqueramosdentrodeunamismasesión.Imaginemosunsitiomultilingüeenelquecadavezquequeremosimprimirunmensajeencualquierpáginanecesitamossaberenquéidiomadebehacerse.Podríamosintroducirunscriptidentificadordelalenguadelnavegadorencadaunodelosarchivosobiendeclararunavariablequefuesevalidaparatodalasesiónyquetuviesecomovalorelidiomareconocidoenunprimermomento.

Pensemostambiénenuncarritodelacompradeunatiendavirtualdondeelclientevanavegandoporlaspáginasdelsitioyañadiendolosartículosquequierecomprarauncarrito.Estecarritopodríaserperfectamenteunavariabledetipoarray(tabla)quealmacenaparacadareferencialacantidaddeartículoscontenidosenelcarrito.Estavariabledeberíaserobviamenteconservadacontinuamentealolargodetodoslosscripts.

Estetipodesituacionessonsolventadasapartirdelasvariablesdesesión.Unasesiónesconsideradacomoelintervalodetiempoempleadoporunusuarioenrecorrernuestraspáginashastaqueabandonanuestrositioodejadeactuarsobreélduranteuntiempoprolongadoobien,sencillamente,cierraelnavegador.

PHPnospermitealmacenarvariablesllamadasdesesiónque,unavezdefinidas,podránserutilizadasduranteestelapsodetiempoporcualquieradelosscriptsdenuestrositio.Estasvariablesseránespecificasdelusuariodemodoquevariasvariablessesióndelmismotipocondistintosvalorespuedenestarcoexistiendoparacadaunadelassesionesqueestánteniendolugarsimultáneamente.Estassesionestienenademássupropioidentificadordesesiónqueseráúnicoyespecífico.

AlgunasmejorasreferentesalempleodesesioneshansidointroducidasconPHP4.Esaestanuevaversiónalaqueharemosreferenciaalahoradeexplicarlasfuncionesdisponiblesylaformadeoperar.ParalosprogramadoresdePHP3ladiferenciamayoresqueestánobligadosagestionarellosmismoslassesionesdefinirsuspropiosidentificadoresdesesión.

VeamosenelsiguientecapítulolaformadeplasmarestanecesidadtécnicaennuestrosscriptsapartirdelasfuncionesquegestionanlassesionesenPHP.

EsteartículoesobradeRubénAlvarezFuepublicadoporprimeravezen01/01/2001Disponibleonlineenhttp://desarrolloweb.com/articulos/12.php

SesionesenPHPII

Page 104: Manual de PHP - Walter Carnero · sencillo y directo con el que podrías empezar es PHP. Otra de las claves del éxito de PHP es que la mayoría de los CMS más populares (WordPress,

Manual de PHP

http://desarrolloweb.com/manuales/manual-php.html Página 104 de 142

DescribimoslosmetodosdetrabajoconsesionesenPHP,inicializarsesión,crearvariablesdesesiónorecuperarlas.

Lassesiones,enaplicacioneswebrealizadasconPHPyeneldesarrollodepáginaswebengeneral,nossirvenparaalmacenarinformaciónquesememorizarádurantetodalavisitadeunusuarioaunapáginaweb.Dichodeotraforma,unusuariopuedevervariaspáginasdurantesupasoporunsitiowebyconsesionespodemosalmacenarvariablesquepodremosaccederencualquieradeesaspáginas.

Digamosquelassesionessonunamaneradeguardarinformación,específicaparacadausuario,durantetodasuvisita.Cadausuarioqueentraenunsitioabreunasesión,queesindependientedelasesióndeotrosusuarios.Enlasesióndeunusuariopodemosalmacenartodotipodedatos,comosunombre,productosdeunhipotéticocarritodelacompra,preferenciasdevisualizaciónotrabajo,páginasporlasquehapasado,etc.Todasestasinformacionesseguardanenloquedenominamosvariablesdesesión.

PHPdisponedeunmétodobastantecómododeguardardatosenvariablesdesesión,ydeunjuegodefuncionesparaeltrabajoconsesionesyvariablesdesesión.Loveremosenesteartículo.

ParacadausuarioPHPinternamentegeneraunidentificadordesesiónúnico,quesirveparasaberlasvariablesdesesiónquepertenecenacadausuario.ParaconservarelidentificadordesesióndurantetodalavisitadeunusuarioaunapáginaPHPalmacenalavariabledesesiónenunacookie,obienlapropagaatravésdelaURL.Estosepuedeconfigurardesdeelarchivophp.ini.

TrabajoconsesionesenPHP

Cuandoqueremosutilizarvariablesdesesiónenunapáginatenemosqueiniciarlasesiónconlasiguientefunción:

session_start()

Iniciaunasesiónparaelusuarioocontinúalasesiónquepudieratenerabiertaenotraspáginas.Alhacersession_start()PHPinternamenterecibeelidentificadordesesiónalmacenadoenlacookieoelqueseenvíeatravésdelaURL.Sinoexistetalidentificadorsesesión,simplementelocrea.

Nota:Sienelphp.inisehadefinidolavariablesession.auto_start=1seinicializaautomáticamentelasesiónencadapáginaquevisitaunusuario,sinquesetengaquehacerelsession_start()

Unavezinicializadalasesiónconsession_start()podemosapartirdeahorautilizarvariablesdesesión,esdecir,almacenardatosparaeseusuario,queseconservendurantetodasuvisitaorecuperardatosalmacenadosenpáginasquehayapodidovisitar.

Page 105: Manual de PHP - Walter Carnero · sencillo y directo con el que podrías empezar es PHP. Otra de las claves del éxito de PHP es que la mayoría de los CMS más populares (WordPress,

Manual de PHP

http://desarrolloweb.com/manuales/manual-php.html Página 105 de 142

Lasesiónsetienequeinicializarantesdeescribircualquiertextoenlapágina.Estoesimportanteydenohacerloasícorremoselriesgoderecibirunerror,porquealiniciarlasesiónsedebenleerlascookiesdelusuario,algoquenosepuedehacersiyasehanenviadolascabecerasdelHTTP.

Nota:siseintentaabrirunasesióndespuésdehaberenviadotextodelapáginaalclienteseobtendráelsiguientemensaje:Warning:session_start():Cannotsendsessioncachelimiter-headersalreadysent(outputstartedat…)

Unaveziniciadalasesiónpodemosutilizarvariablesdesesiónatravésde$_SESSION,queesunarrayasociativo,dondeseaccedeacadavariableapartirdesunombre,deestemodo:

$_SESSION["nombre_de_variable"]

Nota:$_SESSIONesunavariableglobalqueexisteapartirdePHP4.1.0.Lonormalesquepodamosaccederaesavariablenormalmente,perosinuestraversióndePHPnoestáactualizadapodemosintentarlocon$HTTP_SESSION_VARS,queestambiénunarrayasociativo,aunquenoesdeámbitoglobal.Si$HTTP_SESSION_VARStampocofuncionatendremosqueregistrarcadavariableporseparadoconlafunciónsession_register(),enviándoporparámetrolosnombresdelasvariablesdesesiónquedeseautilizardesdePHP.

Existenotrasdosconfiguracionesdelphp.iniqueafectanaltrabajoconvariablesdesesión,quesontrack_varsyregister_globals.Pordefectotrack_varsestáactivadoyregister_globalsestádesactivado.Esteeselcasonormalyelquesuponemostendráelservidordondeprogrames,perosiesasvariablescambianpodríacambiaralgunacosita,comoquelasvariablessetenganqueregistrarexplícitamenteconsession_register().

Ejemplodecódigoparadefinirunavariabledesesión

<?

session_start();

?>

<html>

<head>

<title>Generar variable de sesión</title>

</head>

<body>

<?

$_SESSION["mivariabledesesion"] = "Hola este es el valor de la variable de sesión";

?>

</body>

</html>

Page 106: Manual de PHP - Walter Carnero · sencillo y directo con el que podrías empezar es PHP. Otra de las claves del éxito de PHP es que la mayoría de los CMS más populares (WordPress,

Manual de PHP

http://desarrolloweb.com/manuales/manual-php.html Página 106 de 142

Comosepuedever,esimportanteinicializarlasesiónantesdehacerotracosaenlapágina.LuegopodremosdefinirvariablesdesesiónenculquierlugardelcódigoPHPdelapágina.

Paraleerunavariabledesesiónsehaceatravésdelmismoarrayasociativo$_SESSION.Estansencillocomoharíamosparautilizarcualquierotravariable,loúnicoesquetenemosquehaberinicializadolasesiónpreviamente.Yporsupuesto,quelavariablequedeseamosaccederexistapreviamente.

<?

session_start();

?>

<html>

<head>

<title>Leo variable se sesión</title>

</head>

<body>

Muestro esa variable:

<?

echo $_SESSION["mivariabledesesion"];

?>

</body>

</html>

Comosepuedever,aliniciodelcódigohemosinicializadolasesiónyluegoencualquierpartedelcódigopodríamosaccederalasvariablesdesesiónquetuviésemoscreadas.

Nota:siintentamosaccederaunavariabledesesióncon$_SESSIONquenohasidocreadaobtendremosotromensajedeerror:Notice:Undefinedindex:mivariabledesesion,queeselmismoquesiintentamosaccederacualquierelementodeunarrayquenoexiste.

MássobresesionesenPHP

LasiguienteinformaciónsobresesionesdePHPtambiénpuedeserdeútillectura.Noobstanteloexpresadohastaaquíesunainformaciónmuchomásactualizada.Enlaspróximaslíneasseexplicanmecanismosparasesionesperotodoslosquesecomentan,aunquesonválidos,nosonactualesportratarsedeexplicacionesparaversionesdePHPmásantiguas.

Hemosdichoenelcapítuloanteriorquelavariablesdesesiónsediferenciandelasvariablesclásicasenqueéstasresidenenelservidor,sonespecificasdeunsolousuariodefinidoporunidentificadorypuedenserutilizadasenlaglobalidaddenuestraspáginas.

Parainiciarunasesiónpodemoshacerlodedosformasdistintas:

-Declaramosabiertamentelaaperturadesesiónpormediodelafunción_sessionstart().Estafuncióncreaunanuevasesiónparaunnuevovisitanteobienrecuperalaqueestásiendollevadaacabo.

Page 107: Manual de PHP - Walter Carnero · sencillo y directo con el que podrías empezar es PHP. Otra de las claves del éxito de PHP es que la mayoría de los CMS más populares (WordPress,

Manual de PHP

http://desarrolloweb.com/manuales/manual-php.html Página 107 de 142

-Declaramosunavariabledesesiónpormediodelafunción_sessionregister('variable').Estafunción,ademásdecrearorecuperarlasesiónparalapáginaenlaqueseincluyetambiénsirveparaintroducirunanuevavariabledetiposesión.

Lassesioneshandeseriniciadasalprincipiodenuestroscript.Antesdeabrircualquieretiquetaodeimprimircualquiercosa.Encasocontrariorecibiremosunerror.

Conlovisto,vamosaproponerelejemploclásicodeutilizacióndeunasesión:uncontador.Estecontadordeberáaumentardeunaunidadcadavezquerecargamoslapáginaoapretamosalenlace:

<?

session_register('contador');

?>

<HTML>

<HEAD>

<TITLE>contador.php</TITLE>

</HEAD>

<BODY>

<?

If (isset($contador)==0)

{$contador=0;}

++$contador;

echo "<a href="contador.php">Has recargado esta página $contador veces</a>";

?>

</BODY>

</HTML>

Ejecutarscript

Lacondicióniftieneencuentalaposibilidaddequelavariable$contadornohayasidotodavíainicializada.Lafunciónissetseencargadedarunvalorcerocuandounavariablenohasidoinicializada.

Otrasfuncionesútilesparalagestióndesesionesson:

Paraaprendermássobrelassesiones,concretamenteparaverunaaplicaciónquegestionauncarritodecomprapormediodevariablessesiónvisitanuestroarticulodeltallerdePHP.

Sibuscasmásfuncionesoinformaciónadicionalsobrelassesiones,consultaelmanualoficialdePHP.

EsteartículoesobradeRubénAlvarez

Page 108: Manual de PHP - Walter Carnero · sencillo y directo con el que podrías empezar es PHP. Otra de las claves del éxito de PHP es que la mayoría de los CMS más populares (WordPress,

Manual de PHP

http://desarrolloweb.com/manuales/manual-php.html Página 108 de 142

Fuepublicadoporprimeravezen01/01/2001Disponibleonlineenhttp://desarrolloweb.com/articulos/12.php

Page 109: Manual de PHP - Walter Carnero · sencillo y directo con el que podrías empezar es PHP. Otra de las claves del éxito de PHP es que la mayoría de los CMS más populares (WordPress,

Manual de PHP

http://desarrolloweb.com/manuales/manual-php.html Página 109 de 142

BasesdedatosenPHP

EntramosenunadelaspartesmásinteresantesdelmanualdePHP,conloscapítulosquetratanlasbasesdedatos.TrabajaremosconMySQLymostraremoscómohacertodaslasoperacionestípicasconunabasededatos,comoaccesoaregistros,inserción,modificaciónyborrado.

TrabajarconbasesdedatosenPHP

Interésdelempleodebasesdedatosconpáginasdinámicas.PresentacióndellenguajeSQLydelabaseMySQL.Pasospreviosalosejemplos.

Unadelasprincipalesventajasquepresentaeltrabajarconpáginasdinámicasdelladodelservidoreselpodertrabajarconcontenidosqueestánalojadosenbasesdedatos.Deestaforma,podemosorganizarlos,actualizarlosybuscarlosdeunamaneramuchomássimple.

EllenguajePHP,yahemosdicho,ofreceinterfacesparaelaccesoalamayoríadelasbasesdedatosexistentes.Podrásencontrarbasesdedatosdecódigoabierto,comoMySQL,comercialesporpietariascomoOracleyademástienelibreríasparaaccesoadatosporODBC,loquenospermitecomunicarcontodaslasbasesdedatosposiblesensistemasMicrosoft,comoAccessoSQLServer.Graciasalosjuegosdefuncionesexistentesparacadasistemagestordebasededatos,podremosrealizarcualquieracciónconlosdatosquenecesitemosparaeldesarrollodelamásvariadagamadeaplicaciónweb.

Estainteracciónserealiza,porunlado,apartirdelasfuncionesquePHPnosproponeparacadatipodebasededatosy,porotroestableciendoundiálogoapartirdeunidiomauniversal:SQL(StructuredQueryLanguage)elcualescomúnatodaslasbasesdedatos.Estelenguajeresulta,comoveremoseneltutorialdeSQL,muypotenteyfácildeaprender.AlolargodelmanualdePHPnoslimitaremosalautilizaciónlasinstruccionesSQLbásicas,queseránaprendidasamedidaqueexplicamoslasdiferentesformasdeactuarsobreunabasededatos,dejandoparaeltutorialdeSQLlosaspectosmásavanzadosdeeselenguajedeaccesoadatos.

ComobaseejemplodeestoscapítuloshemoselegidoMySQL,sindudalabasededatosmásextendidaencombinaciónconPHP.Sugratuidad,eficienciaysimplicidadlahanhechounabuenacandidata.Noobstante,encasodeutilizarcualquierotrabasecompatibleconPHP,lascorreccionesallevaracaboconrespectoanuestrosejemplosnosonexcesivamentegrandesylalecturadeesoscapítulosseguirásiendodegranutilidad.

Nota:YahemosexplicadoencapítulosanterioreslainstalacióndeMySQL,alavezquehemospresentadoloscomandosbásicosquenospuedenpermitirabordarlaconunarelativafacilidad.

Page 110: Manual de PHP - Walter Carnero · sencillo y directo con el que podrías empezar es PHP. Otra de las claves del éxito de PHP es que la mayoría de los CMS más populares (WordPress,

Manual de PHP

http://desarrolloweb.com/manuales/manual-php.html Página 110 de 142

Configurarlabasededatosquevamosautilizarparalosejemplosdeestemanual

UnavezinstaladoMySQLyantesdepodercomenzarconnuestrosejemplos,seránecesariollevaracabolassiguientesoperaciones:

-IntroducidosdentrodeMySQL,crearemoslabasededatosejemploconlasiguientesentencia:

create database ejemplo;

-Seleccionaremoslabaseejemplocomolabaseautilizar:

use ejemplo

-Crearemosacontinuaciónlatablaclientesapartirdelasiguientesentencia:

create table clientes (

nombre varchar(100),

telefono varchar(100)

);

Ahorayadisponemosdenuestratablavacía.Sóloquedacomenzarallenarlaconlosdatosqueiremosinsertando.

Elconjuntodescriptsutilizadosparaelbloquedebasesdedatospuedeserdescargadoaquí.

GuióndeartículosrelativosalasbasesdedatosenPHP

Alolargodelmanualofreceremosvariosartículos,enlosquetrataremoscadaunodelosaccesosalabasededatosmástípicos,comoselecciones,actualizacionesoinserciones,siguiendoelsiguienteguión:

InserciónderegistrosSelecciónderegistrosActualizaciónderegistrosBorradoderegistros

ParacompletartodoaquelloquedebessabersobreelaccesoabasesdedatosenPHPencontrarásmultituddeartículosprácticosenelTallerdePHP,comosonlaRecepciónelúltimoIDdeunainserciónconPHPyMySQL,laPaginaciónderesultadosconPHPyMySQL,ProgramarunbuscadorconPHPyMySQL,etc.

Además,paralosqueprefieranverlotodopasoapasoenvivo,contamosconunvideotutorialsobrelasbasesdedatosenPHPqueteayudaráaentendermejorcómotrabajarconlasbases

Page 111: Manual de PHP - Walter Carnero · sencillo y directo con el que podrías empezar es PHP. Otra de las claves del éxito de PHP es que la mayoría de los CMS más populares (WordPress,

Manual de PHP

http://desarrolloweb.com/manuales/manual-php.html Página 111 de 142

dedatosenPHP.

EsteartículoesobradeRubénAlvarezFuepublicadoporprimeravezen01/01/2001Disponibleonlineenhttp://desarrolloweb.com/articulos/12.php

IntroduccióndenuevosregistrosconPHP

Formasencilladeintroducirnuevoselementosenunatabladebasededatos.RealizamosunInsertconPHP.

Unavezcreadalatablaclientesennuestrabasededatosejemplo,elpasosiguienteseallenarlaconregistros.Paraellovamosaveresteartículo,enelqueserecibendatosdesdeunformularioyluegoseinsertanconPHPenlabasededatos,enlatablaadecuada.

Losdatosdelregistropuedenserrecogidos,porejemplo,apartirdeunformulario.AquíosproponemosunsimpledocumentoHTMLquerecogelosdatosylosenvíaaunapáginaPHPqueseencargadeprocesarlos:

<HTML>

<HEAD>

<TITLE>Insertar.html</TITLE>

</HEAD>

<BODY>

<div align="center">

<h1>Insertar un registro</h1>

<br>

<FORM METHOD="POST" ACTION="insertar.php">

Nombre<br>

<INPUT TYPE="TEXT" NAME="nombre"><br>

Teléfono<br>

<INPUT TYPE="TEXT" NAME="telefono"><br>

<INPUT TYPE="SUBMIT" value="Insertar">

</FORM>

</div>

</BODY>

</HTML>

Llegadosalapáginadestinodelformulario(insertar.php),loprimeroquehabráquehaceresestablecerunvínculoentreelprogramaylabasededatos.Estaconexiónsellevaacaboconlafunción_mysqlconnect.Acontinuación,deberemosgenerarunaordendeinsercióndelregistroenlenguajeSQL.Estaordenseráejecutadapormediodelafunción_mysql_dbquery.EnestafunciónespecificaremosprimeramentelabasededatossobrelaquequeremosactuaryacontinuaciónintroduciremoslasentenciaSQL:

<HTML>

Page 112: Manual de PHP - Walter Carnero · sencillo y directo con el que podrías empezar es PHP. Otra de las claves del éxito de PHP es que la mayoría de los CMS más populares (WordPress,

Manual de PHP

http://desarrolloweb.com/manuales/manual-php.html Página 112 de 142

<HEAD>

<TITLE>Insertar.php</TITLE>

</HEAD>

<BODY>

<?

//Conexion con la base

mysql_connect("localhost","tu_user","tu_password");

//selección de la base de datos con la que vamos a trabajar

mysql_select_db("mi_base_datos");

//Ejecucion de la sentencia SQL

mysql_query("insert into clientes (nombre,telefono) values ('$nombre','$telefono')");

?>

<h1><div align="center">Registro Insertado</div></h1>

<div align="center"><a href="lectura.php">Visualizar el contenido de la base</a></div>

</BODY>

</HTML>

Ejecutarejemplo

Losparámetrosuserypasswordsondefinidosporelcreadordelabase.Esconvenienteenunprincipio,alcrearnuestrasbases,trabajarsinellosconlocualdejaremoslascadenascorrespondientesvacias:"".

Ademásdelapropiainserción,elprogramaavisadelaintroduccióndelregistroyofreceunenlacehaciaunapáginadelecturalacualserácomentadaacontinuación.

NoentraremosenladescripcióndelaordenSQL,paracomprendermásacercadecómointroducirregistros,refererirsealtutorialdeSQL.

EsteartículoesobradeRubénAlvarezFuepublicadoporprimeravezen01/01/2001Disponibleonlineenhttp://desarrolloweb.com/articulos/12.php

SelecciónylecturaderegistrosconPHP

UtilizamoselcomandoSelectdeSQLparacrearunaseleccióndenuestratablaymostrartodoslosdatosenpantallapormediodeunbucle.ConPHP.

Dentrodeunabasededatos,organizadaportablas,laseleccióndeunatablaenteraodeunciertonumeroderegistrosresultaunaoperaciónrutinaria.

AquíosmostramosunaformabastanteclásicademostrarenpantallaapartirdeunbuclelosregistrosseleccionadosporunasentenciaSQL:

<HTML>

Page 113: Manual de PHP - Walter Carnero · sencillo y directo con el que podrías empezar es PHP. Otra de las claves del éxito de PHP es que la mayoría de los CMS más populares (WordPress,

Manual de PHP

http://desarrolloweb.com/manuales/manual-php.html Página 113 de 142

<HEAD>

<TITLE>lectura.php</TITLE>

</HEAD>

<BODY>

<h1><div align="center">Lectura de la tabla</div></h1>

<br>

<br>

<?

//Conexion con la base

mysql_connect("localhost","tu_user","tu_password");

//selección de la base de datos con la que vamos a trabajar

mysql_select_db("mi_base_datos");

//Ejecutamos la sentencia SQL

$result=mysql_query("select * from clientes");

?>

<table align="center">

<tr>

<th>Nombre</th>

<th>Teléfono</th>

</tr>

<?

//Mostramos los registros

while ($row=mysql_fetch_array($result))

{

echo '<tr><td>'.$row["nombre"].'</td>';

echo '<td>'.$row["telefono"].'</td></tr>';

}

mysql_free_result($result)

?>

</table>

<div align="center">

<a href="insertar.html">Añadir un nuevo registro</a><br>

<a href="actualizar1.php">Actualizar un registro existente</a><br>

<a href="borrar1.php">Borrar un registro</a><br>

</div>

</BODY>

</HTML>

Ejecutarscript

Lospasosarealizarson,enunprincipio,losvistosparalainsercióndeunregistro:Conexiónalabaseyejecucióndelasentencia.Estavez,lainformacióndedichaejecuciónseráalmacenadaenunavariable($result).

Elsiguientepasoseráplasmarenpantallalainformaciónrecogidaen$result.Estoloharemosmediantelafunción_mysql_fetcharrayquedevuelveunavariablearrayconloscontenidosdeunregistroalavezqueseposicionasobreelsiguiente.Elbuclewhilenospermiteleereimprimirsecuencialmentecadaunodelosregistros.

Page 114: Manual de PHP - Walter Carnero · sencillo y directo con el que podrías empezar es PHP. Otra de las claves del éxito de PHP es que la mayoría de los CMS más populares (WordPress,

Manual de PHP

http://desarrolloweb.com/manuales/manual-php.html Página 114 de 142

Lafunción_mysql_freeresultseencargadeliberarlamemoriautilizadaparallevaracabolaconsulta.Aunquenoesnecesariasuutilización,resultaaltamenteaconsejable.

EsteartículoesobradeRubénAlvarezFuepublicadoporprimeravezen01/01/2001Disponibleonlineenhttp://desarrolloweb.com/articulos/12.php

ActualizacióndeunregistrodelabasededatosconPHP

Explicamoscómomodificaroactualizarunregistroexistenteenunatabladeunabasededatos,conPHP.Esdecir,hacerunupdateparaunregistrodeunatabla,desdePHP.

Paramostrarcómoseactualizaunregistropresenteennuestrabasededatos,vamosahacerloapartirdeuncasounpocomáscomplejoparaqueempecemosafamiliarizarnosconestasoperaciones.Realizaremosunpardescriptsquepermitancambiarelnumerodeteléfonodelasdistintaspersonaspresentesennuestrabase.Elnombredeestaspersonas,asícomoelnuevonumerodeteléfono,seránrecogidospormediodeunformulario.

ElarchivodelformulariovaaserestavezunscriptPHPenelqueefectuaremosunallamadaanuestrabasededatosparaconstruirunmenúdesplegabledondeaparezcantodoslosnombres.Lacosaquedaríaasí:

<HTML>

<HEAD>

<TITLE>Actualizar1.php</TITLE>

</HEAD>

<BODY>

<div align="center">

<h1>Actualizar un registro</h1>

<br>

<?

//Conexion con la base

mysql_connect("localhost","tu_user","tu_password");

//selección de la base de datos con la que vamos a trabajar

mysql_select_db("mi_base_datos");

echo '<FORM METHOD="POST" ACTION="actualizar2.php">Nombre<br>';

//Creamos la sentencia SQL y la ejecutamos

$sSQL="Select nombre From clientes Order By nombre";

$result=mysql_query($sSQL);

echo '<select name="nombre">';

//Generamos el menu desplegable

while ($row=mysql_fetch_array($result))

Page 115: Manual de PHP - Walter Carnero · sencillo y directo con el que podrías empezar es PHP. Otra de las claves del éxito de PHP es que la mayoría de los CMS más populares (WordPress,

Manual de PHP

http://desarrolloweb.com/manuales/manual-php.html Página 115 de 142

{echo '<option>'.$row["nombre"];}

?>

</select>

<br>

Teléfono<br>

<INPUT TYPE="TEXT" NAME="telefono"><br>

<INPUT TYPE="SUBMIT" value="Actualizar">

</FORM>

</div>

</BODY>

</HTML>

Lamaneradeoperarparaconstruirelmenúdesplegableeslamismaqueparavisualizarlatabla.Denuevoempleamosunbuclewhileencombinaciónconlafunción_mysql_fetcharrayloquenospermitemostrarcadaunadelasopciones.

Elscriptdeactualizaciónserámuyparecidoaldeinserción:

Nota:ParaquiendeseeunareferenciacompletasobrecómosehacenlassentenciasUPDATEenellenguajeSQL,recomendamosleerelartículoActualizaciónderegistrosconUPDATEenSQL.

<HTML>

<HEAD>

<TITLE>Actualizar2.php</TITLE>

</HEAD>

<BODY>

<?

//Conexion con la base

mysql_connect("localhost","tu_user","tu_password");

//selección de la base de datos con la que vamos a trabajar

mysql_select_db("mi_base_datos");

//Creamos la sentencia SQL y la ejecutamos

$sSQL="Update Clientes Set telefono='$telefono' Where nombre='$nombre'";

mysql_query($sSQL);

?>

<h1><div align="center">Registro Actualizado</div></h1>

<div align="center"><a href="lectura.php">Visualizar el contenido de la base</a></div>

</BODY>

</HTML>

Comohabéispodidocomprobar,laoperaciónUPDATEnotienedemasiadacomplejidad.Sinembargo,paraafianzarestosconocimientosrecomendamosverelvídeosobrelaactualizaciónderegistrosenMySQLconPHP.

Page 116: Manual de PHP - Walter Carnero · sencillo y directo con el que podrías empezar es PHP. Otra de las claves del éxito de PHP es que la mayoría de los CMS más populares (WordPress,

Manual de PHP

http://desarrolloweb.com/manuales/manual-php.html Página 116 de 142

EsteartículoesobradeRubénAlvarezFuepublicadoporprimeravezen01/01/2001Disponibleonlineenhttp://desarrolloweb.com/articulos/12.php

BorradodeunregistroconPHP

Aprendemosaeliminarregistrosdeunatabladebasededatos,conunejemploprácticoenPHP.

Otradelasoperacioneselementalesquesepuedenrealizarsobreunabasededatosesborrarunregistro.Parahacerlo,SQLnosproponesentenciasdeltipoDelete.Veámosloconunejemploaplicadoanuestraagenda.

Cabeseñalarqueprimerodebemosseleccionarelregistroquesedeseaborraryluegorealizarelborradopropiamentedicho.Paraellocrearemosunmenúdesplegabledinámico,dondesepodráseleccionarelelementoquesedeseaborrar.LuegosepasaráaunapáginaPHPunareferenciaalelementoseleccionado,paraborrarlodelabasededatos.

<HTML>

<HEAD>

<TITLE>Borrar1.php</TITLE>

</HEAD>

<BODY>

<div align="center">

<h1>Borrar un registro</h1>

<br>

<?

//Conexion con la base

mysql_connect("localhost","tu_user","tu_password");

//selección de la base de datos con la que vamos a trabajar

mysql_select_db("mi_base_datos");

echo '<FORM METHOD="POST" ACTION="borrar2.php">Nombre<br>';

//Creamos la sentencia SQL y la ejecutamos

$sSQL="Select nombre From clientes Order By nombre";

$result=mysql_query($sSQL);

echo '<select name="nombre">';

//Mostramos los registros en forma de menú desplegable

while ($row=mysql_fetch_array($result))

{echo '<option>'.$row["nombre"];}

mysql_free_result($result)

?>

</select>

Page 117: Manual de PHP - Walter Carnero · sencillo y directo con el que podrías empezar es PHP. Otra de las claves del éxito de PHP es que la mayoría de los CMS más populares (WordPress,

Manual de PHP

http://desarrolloweb.com/manuales/manual-php.html Página 117 de 142

<br>

<INPUT TYPE="SUBMIT" value="Borrar">

</FORM>

</div>

</BODY>

</HTML>

ElsiguientepasoeshacerefectivalaoperaciónapartirdelaejecucióndelasentenciaSQLqueconstruimosapartirdelosdatosdelformulario:

<HTML>

<HEAD>

<TITLE>Borrar2.php</TITLE>

</HEAD>

<BODY>

<?

//Conexion con la base

mysql_connect("localhost","tu_user","tu_password");

//selección de la base de datos con la que vamos a trabajar

mysql_select_db("mi_base_datos");

//Creamos la sentencia SQL y la ejecutamos

$sSQL="Delete From Clientes Where nombre='$nombre'";

mysql_query($sSQL);

?>

<h1><div align="center">Registro Borrado</div></h1>

<div align="center"><a href="lectura.php">Visualizar el contenido de la base</a></div>

</BODY>

</HTML>

Nota:Varioscomentariospreguntanporelarchivolectura.phpqueestáenlazadoenelcódigodelejemplo.TenemosquedecirqueesearchivosecomentóenelartículodelaSelecciónylecturaderegistrosdelabasededatospormediodePHP.

ConestecapítulocerramoselbloquedeaccesosabasesdedatosconPHP.ParamasinformaciónrelacionadapodéisreferirosaltallerdePHPdondepodréisencontraralgúnqueotroartículointeresantealrespecto.Asimismo,paralosqueprefieranelvídeocomomaterialdidáctico,recomendamosverelVideotutorialsobrelasbasesdedatosconPHP.

EsteartículoesobradeRubénAlvarezFuepublicadoporprimeravezen01/01/2001Disponibleonlineenhttp://desarrolloweb.com/articulos/12.php

Page 118: Manual de PHP - Walter Carnero · sencillo y directo con el que podrías empezar es PHP. Otra de las claves del éxito de PHP es que la mayoría de los CMS más populares (WordPress,

Manual de PHP

http://desarrolloweb.com/manuales/manual-php.html Página 118 de 142

ActualizacióndefuncionesPHPparaaccesoaMySQL

LasnuevasversionesdePHPofrecenjuegosdefuncionesMySQLdiferentesdelostradicionales,queimplementandiversasmejorasenlagestióndebasesdedatos.

PHPestáenconstanteevoluciónypruebadeellosonlasnovedadesquevenimosacomentarenesteartículo.SetratadelasnuevasfuncionesdeaccesoabasesdedatosMySQLqueestándisponiblesdesdePHP5,connombresdiferentesalasfuncionesdisponiblesenelpasadoyquetambiéntienenalgunoscambiosenelmododetrabajar.LasnuevasfuncionesestáncreadasparadarrespuestaadiversasmejorasqueelsistemagestordebasesdedatosMySQLhaincorporadorecientemente.

Esteesuntemafundamental,sobretodoparalaspersonasqueconocenPHPdesdehacetiempo,quecomoyo,estábamosacostumbradosausarunjuegodefuncionesqueadíadehoyseencuentraobsoletoyquenoserecomiendautilizar.Realmente,enelmomentodeescribiresteartículolasfuncionesdeMySQLantiguastodavía,sepuedenusar,perolaprevisiónesqueseeliminenenPHP5.5,porloqueresultaimprescindibleactualizarnuestrosconocimientos.

Afortunadamente,esbastantesencilloelpasoalasnuevasfuncionesdeMySQL,puestoqueelesquemadefuncionamientoesprácticamenteelmismo,asícomolosnuevosnombresdefunciones,quetienenmuypocasvariaciones.Porlotanto,sitehasleídoelManualdePHPdeDesarrolloWeb.comyhasaprendidoconnosotrosatrabajarconlasbasesdedatos,notendrásrealmentemuchosproblemasenaprenderlasnovedadesquepasoarelataracontinuación.

DostiposdefuncionesparaaccesoalasbasesdedatosMySQL

UnadelasnovedadesquePHPnosofreceenlasrecientesfuncionesdePHPeslaincorporacióndedostiposaproximacionesaltrabajoconMySQL,queahorasepuedehacerporprocedimientos(funcionesnormalesdetodalavida)yporobjetos.

Nota:AntessólopodíamosaccederaMySQLporfuncionescomunes,peroahoratambiénpodemosaccederpormediodeclasesyobjetosdeprogramaciónorientadaaobjetos(POO).LaincorporaciónenelAPIdemétodosbasadosenPOOhacepatentequePHPestáteniendomuypresenteesteparadigmadedesarrollodentrodesunúcleoyquelatendenciaenlasnuevasversionesdePHPseráladepotenciarloaunmás.

Page 119: Manual de PHP - Walter Carnero · sencillo y directo con el que podrías empezar es PHP. Otra de las claves del éxito de PHP es que la mayoría de los CMS más populares (WordPress,

Manual de PHP

http://desarrolloweb.com/manuales/manual-php.html Página 119 de 142

Funcionesbasadasenprocedimientos

ComovenimoshaciendotodalavidaconPHP.Funcionesnormalesycorrientes,querecibenparámetrosyquedevuelvenvalores.

FuncionesbasadasenPOO

Realmentesonconstructoresparaobtenerobjetosymétodosalosquepodemosaccederdentrodeesosobjetospararealizarlasoperacionesconlabasededatos.

Hayqueaclararqueambasaproximacionessonperfectamenteválidasyquenocambianlascosasquesepuedenhacerdesdeunauotra.Portanto,decantarnosporunouotromodonoimplicaráningunaventajaenfuncionalidad,nitansiquieraderendimiento.Dehecho,ambosmodosdetrabajosonel"mismoperrocondistintocollar".Portanto,estanválidaunaeleccióncomolaotraynuestrapreferenciaserámásbienporgustosocostumbresalahoradedesarrollar.

Nota:LoquenoserecomiendaesenunmismoproyectocambiardeunoaotroestilodeaccesoabasededatosMySQLdemaneraarbitraria.Debemostenerencuentaquerealmenteesarecomendaciónnoesdebidoaquenotevayaafuncionartuprograma,opuedasteneralgúnproblemadeterminado,sinomásbienesunacuestióndeestiloyclaridadalahorademantenerelcódigodetuproyecto.

AccesoaMySQLconfuncionesporprocedimientos

EnelmencionadoManualdePHPvenimosofreciendoejemplosparaaccesoabasededatosconfuncionesdetodalavida.Poreso,enesteartículovamosamostrarlasdiferenciasqueexistenconrespectoalasfuncionesantiguas,usandotambiéncódigoporprocedimientos.Sinembargo,comoverásacontinuación,lasfuncionessonprácticamentelasmismasalasqueseleshaagregadouna"i".Porejemplo,mysql_connect()pasaasermysqli_connect().Losparámetrossonlosmismosenmuchoscasos,omuyparecidos.

Nota:esteartículonoesuntutorialdeaccesoabasesdedatosconPHP,paraesoyadisponemosdelmanualdePHPenDesarrolloWeb.com.RealmentesetratadeunaseriedeguíasparapoderreciclarnuestrosconocimientosconelPHPdeversionesanteriores.

Conexiónconlabasededatos:mysqli_connect()

Ahoraindicamostambiénlabasededatosalaquequeremosconectarnos.Yatención,porqueloquenosdevuelvelafunciónnoesunlinkoidentificadordelaconexiónconlabasededatos,sinounobjeto.PeroaunquenosepasPOO,notepreocupesporestedetalle,puespoconos

Page 120: Manual de PHP - Walter Carnero · sencillo y directo con el que podrías empezar es PHP. Otra de las claves del éxito de PHP es que la mayoría de los CMS más populares (WordPress,

Manual de PHP

http://desarrolloweb.com/manuales/manual-php.html Página 120 de 142

importaalosdesarrolladores,dadoquevamosausareseobjetocomosifuerasimplementeelidentificadordelaconexión,osea,vamosausarlocomohacíamosanteriormenteenPHP.

$conexion = mysqli_connect("localhost", "usuario", "clave", "mi_bbdd");

Cerrarlaconexión:mysqli_close()

Tenemosquepasarlecomoparámetrosiempreelobjetoqueobtuvimosaliniciarlaconexión.

mysqli_close($conexion);

Ejecutarunaconsulta:mysqli_query()

Estafunciónesexactamenteigual,aunqueenestecasorecibeobligatoriamentecomoprimerparámetroelobjetodeconexiónalabasededatosquerecibimosalconectarnos.ElsegundoparámetroeslasentenciaSQLquesedeseaejecutarenMySQL.

$resultado = mysqli_query($conexion, "select * from cliente");

Otroaspectointeresanteesquenosdevuelveunvalorquepuedeser,obienunbooleanoparasabersilaconsultaseejecutóconéxito,comoenelcasodeun"insert"o"delete",obienunobjetoresultadoconunconjuntoderegistrosenelcasodeun"select".

Extraerunregistrodelconjuntoderesultados:mysqli_fetch_array()

Estafunciónesexactamenteigual,recibeelconjuntoderesultadosdelquequeremossacarunregistro.Devuelveenestecasoun"array",peroestáigualmentemysqli_fetch_object()quedevolveríaunobjeto.

$fila = mysqli_fetch_array($resultado);

Contarelnúmerodefilasdeunresultado:mysqli_num_rows()

Tambiénesexactamenteigual,simplementelepasamoselobjetoconjuntoderegistrosdelquequeremossaberelnúmerodefilasoregistrosquecontiene.

$fila = mysqli_num_rows($resultado)

Conclusión

Page 121: Manual de PHP - Walter Carnero · sencillo y directo con el que podrías empezar es PHP. Otra de las claves del éxito de PHP es que la mayoría de los CMS más populares (WordPress,

Manual de PHP

http://desarrolloweb.com/manuales/manual-php.html Página 121 de 142

Engeneral,comoestáspudiendocomprobar,elsistemanovaríamuchodeloqueyaconocesenelpasado.Cambiannombresdefuncionesmínimamenteyalgúnparámetrosueltoaquíyallí.

CreoqueelpasoparausarlasnuevasfuncionesMySQLestanrápidoquenotienesentidoseguirusandolasfuncionesantiguasyademásenbreveelcambioseráobligadoporquelosaccesosantiguosquehacíamosaMySQLdejarándefuncionar.

EsteartículoesobradeMiguelAngelAlvarezFuepublicadoporprimeravezen11/03/2013Disponibleonlineenhttp://desarrolloweb.com/articulos/actualizacion-funciones-php-mysql.html

Page 122: Manual de PHP - Walter Carnero · sencillo y directo con el que podrías empezar es PHP. Otra de las claves del éxito de PHP es que la mayoría de los CMS más populares (WordPress,

Manual de PHP

http://desarrolloweb.com/manuales/manual-php.html Página 122 de 142

Subirunaaplicaciónwebalservidor

Unavezquehemosterminadounaaplicaciónwebenlocal,tenemosqueponerlaenproducciónenunservidordeInternet.Mostramoscómosubirtodaslaspáginasaunservidoryalgunasdelasposiblestareasquenostocarárealizarparasubirtambiénlabasededatos.

SubirunaaplicaciónPHPalservidor

VamosavercómosubirunaaplicaciónhechaenlocalaunservidordeInternet.Empezamosofreciendounaseriedepautasparasubirlosarchivos.

Enelpasadomesolicitaronqueescribiesesobreuntemaquehastaahoranohabíamostocadomásquederefilón,queconsisteenlapuestaenmarchadeunaaplicación,programadaenlocal,anuestroservidordehosting,esdecir,enelpasodesubirtodoslosarchivosPHPylabasededatosanuestroespacioenelservidorwebcontratadoenunproveedordealojamiento.

Eltemaesperoqueresultefamiliaramuchasdelaspersonasqueleennuestrosartículos,yaqueprobablementehayantenidoquepasarporesaetapaenalgunaocasión,aunquepretendodaralgunasclavesytruquillosquepuedenayudaratodos,tenganonoexperienciaenesteasunto.

Subirlosarchivos

Nuestroservidorwebdebetenerundirectorioparalapublicacióndelaspáginasweb.Eseseríaellugardondehayquesubirlosarchivos.php.

Dependiendodelproveedorconelquetrabajemos,eldirectoriodepublicaciónpuedevariar.Generalmente,cuandocontratamosunalojamiento,nosproporcionanunacuentadeFTPconlaqueconectarnosalservidorwebytransferirlosarchivosdenuestrositio,ademásdeunosdatosparalaconexión,queseránelnombredelservidoryelusuarioycontraseñaparaelaccesoalFTP.

Referencia:porsialguiennosabeloqueeselFTP,hablamosmássobreelloenelmanualdePublicarenInternet,concretamenteenelartículoSubirlosarchivosalservidor.

AlconectarnosalservidorconlosdatosdelFTP,quedebenserproporcionadospornuestroproveedor,accederemosaundirectorio.Estedirectoriopodríasereldepublicación,aunquegeneralmentenoesasí,sinoquesueleserunsubdirectoriollamado"HTML"o"docs"oalgosimilar,quecuelgadeldirectoriodeinicioennuestraconexiónFTP.Comodecía,estedirectoriopuedetenernombresdistintosenproveedoresdistintos,aunque,encualquiercaso,

Page 123: Manual de PHP - Walter Carnero · sencillo y directo con el que podrías empezar es PHP. Otra de las claves del éxito de PHP es que la mayoría de los CMS más populares (WordPress,

Manual de PHP

http://desarrolloweb.com/manuales/manual-php.html Página 123 de 142

conunasimplepreguntaanuestroproveedorresolveremosesaduda.

Losarchivossedebensubiraldirectoriodepublicación,oacualquiersubdirectoriodeeste.Endefinitiva,lostendremosquealojarporahídentroyparaaccederaellosbastaríaconescribirelnombredeldominiooURLdenuestroalojamiento,seguidodelnombredelarchivo.Situviésemosunarchivollamadohola.phpynuestroalojamientosehacontratadoparaeldominiowww.midominio.com,deberíamossubiresearchivoaldirectoriodepublicaciónyaccederíamosalarchivoescribiendo:

http://www.midominio.com/hola.php

SicreamossubdirectoriosdentrodeldirectoriodepublicaciónpodremosaccederaellosescribiendoelnombredeldominiooURLdenuestroalojamiento,seguidodelnombredeldirectorioyelnombredelarchivo.Porejemplo,sicreamosunsubdirectoriollamadopaginasytenemosdentrounarchivollamadopag1.php,podríamosaccederaéldelasiguientemanera.

http://www.midominio.com/paginas/pag1.php

Referencia:hayotroconceptointeresantequedeberíamosconocerllegadosaestepunto,queesel"documentopordefecto".ÉstenoesmásqueelarchivoqueseenvíaalnavegadorsienlaURLaccedidanoseespecificabaningúnarchivo.Suelellamarseindex.htmloindex.php(oindex.aspsinuestroservidorsoportaprogramaciónenASP),aunquepuedevariardeunproveedoraotro.HablamosmássobreeldocumentopordefectoennuestromanualdePublicarenInternet.

EsteartículoesobradeMiguelAngelAlvarezFuepublicadoporprimeravezen10/06/2003Disponibleonlineenhttp://desarrolloweb.com/articulos/12.php

ColocarlosarchivosPHPfueradeldirectoriodepublicación

Algunoscasosenlosquecolocararchivosfueradeldirectoriodepublicacióntienesentidoyutilidad.

Pordeciralgomássobreeltemadecolocarlosarchivos,queríaseñalarquecualquiercosaquepongamosfueradeldirectoriodepublicaciónnopodráseraccedidaatravésdelnavegador.Esdecir,sicreamosundirectorioquesellamefunciones_phpenelmismonivelqueeldirectoriodepublicación(fueradeldirectoriodepublicación)nopodremosaccederconelexploradoralosarchivosquecoloquemosdentrodeningunadelasmaneras.EstoesasíporquelaURLdeiniciodenuestroalojamientocorrespondeconesedirectorioynopodemosmovernoshaciadebajodeesedirectorioconlasURLs,quesonlamaneradeespecificaralnavegadorlosrecursosalosquesequiereacceder.

Nota:YaseexplicóloqueeraeldirectoriodepublicaciónenelcapítuloanteriorsobreSubirarchivosPHPalservidor.

Page 124: Manual de PHP - Walter Carnero · sencillo y directo con el que podrías empezar es PHP. Otra de las claves del éxito de PHP es que la mayoría de los CMS más populares (WordPress,

Manual de PHP

http://desarrolloweb.com/manuales/manual-php.html Página 124 de 142

NoseríaposiblesalirdeldirectoriodepublicaciónconunaURLcomoesta,pormuchoqueutilicemoseloperador..(quesirveparaaccederaldirectoriopadre).

http://www.midominio.com/../funciones_php/archivo_inalcanzable.php

Sinembargo,colocaralgunoscontenidosfueradeldirectoriodepublicaciónpuedesermuyútil.Porejemplo,podríamoscolocarallícopiasdeseguridaddealgunosarchivosodocumentosquesimplementequeremosguardarenelservidorparaaccederaellosdesdecualquierparteyconnuestroprogramadeFTP.

Hayotrautilidadmásinteresantesobrecolocararchivosfueradeldirectoriodepublicación.Setratadequemuchasvecesutilizamosennuestrosprogramastrozosdecódigorepetidamente,porejemplo,paraabrirycerrarbasesdedatos,paramostrarlacabeceradenuestroportal,paracomprobarqueunemailescritoenunformularioescorrecto,etc.EsmuyútilsepararestostrozosdecódigoenunarchivoaparteyllamaraestearchivoconlasfuncionesPHPinclude()orequire().Así,siundíamodificamoslacabeceradenuestroportal,sólolotendremosquemodificarenunarchivo,o,sicambialabasededatosqueutilizamossólotendríamosquemodificarelarchivoquehacelaconexiónalabasededatosunavez,enlugardeircambiándoloentodaslaspáginasPHPqueabríanlasbasesdedatos.

Estosarchivosnosonpáginasindependientes,sinotrozos.Seguramente,silosejecutamosporseparadonomostraríanningúnresultadoválido,inclusopodríandarmensajesdeerror.Porestarazónmerecelapenacolocarlosenunlugardondenadiepuedateneracceso:fueradeldirectoriodepublicación.ConPHPsiquepodremosaccederaesedirectorioparaincluiresosarchivos.SolamentedeberíamosutilizarlasfuncionesPHPinclude()orequire()indicandolarutaparaaccederalosarchivos.

Enelcasodequetengamosunapáginallamadahola.phpeneldirectoriodepublicaciónyunarchivo,quesellamaabre_base_datos.php,eneldirectoriofunciones_php,queestáfueradeldirectoriodepublicación,siquisiéramosacceder(desdehola.php)alarchivoqueabrelabasededatosloharíamosasí.

include("../funciones_php/abre_base_datos.php")

DesdePHPsíquepodemosaccederalosarchivosqueseencuentranfueradeldirectoriodepublicación.Paraelloespecificamoslarutaadecuada,enlaqueutilizamoseloperador..parabajaraldirectoriopadre.

Nadamásquedecirsobrelacolocacióndelosarchivos:unavezsituadoseneldirectoriodepublicaciónsepodráaccederaellosconnuestronavegadorysedeberíanejecutarperfectamente.Aunquecabeseñalarque,tantoPHPcomoelservidordondetrabajemos,puedentenerconfiguracionesdistintasypuedequealgúndetalledelaprogramacióndenuestraspáginasnofuncionecorrectamente.

Porejemplo,nuestroPHPpuededeclararonoautomáticamentelasvariablesquelleganatravésdeunformulario.Sienlocalsiqueestabaconfiguradoparahacerestoyenremotono,deberíamoslocalizarloslugaresdonderecogemoslasvariablesyutilizarlasvariablesde

Page 125: Manual de PHP - Walter Carnero · sencillo y directo con el que podrías empezar es PHP. Otra de las claves del éxito de PHP es que la mayoría de los CMS más populares (WordPress,

Manual de PHP

http://desarrolloweb.com/manuales/manual-php.html Página 125 de 142

entornocorrectas(mirarartículosobreProcesarvariablesdeformulariosyloscomentariosalpieparasabermásdeestaposiblefuentedeerrores).

Aunqueestenoesuncasohabitual,podemosponernosencontactoconnuestroproveedordealojamientoparaversipuedenayudarnosconfigurandoelsistemaoindicandolospasosaseguirparasolventarennuestrosscriptselasunto.

Comentario:elsiguientescriptcalculaelniveldedirectoriodelosscriptsquequeremosincluirenlapáginaactual.

// Hallamos el nivel de directorio en que está ubicada la página

1\. Se hace un recuento de los caracteres que contiene el nombre del script

actual.

-

$Chars = count_chars($PHP_SELF,1);

-

2\. Exploramos la tabla de los caracteres devueltos buscando el carácter ('/'

Código 47 ) de directorio (carpeta) que devuelve Apache.

-

foreach ($Chars as $Char=>$nChars){

if ($Char==47) {$n=$nChars;break;}

}

-

3\. Generamos una cadena de n-1 veces con la subcandena "../" que nos da el

nivel de directorio en que se encuentra el script.

-

if ($n==0) $PathString=""; else $PathString=str_pad("",($n-1)*3,"../");

EsteartículoesobradeMiguelAngelAlvarezFuepublicadoporprimeravezen10/06/2003Disponibleonlineenhttp://desarrolloweb.com/articulos/12.php

SubirunabasededatosalsevidordeInternet

ElsegundopasoparasubirunaaplicaciónPHPalservidorconsisteencolocarlabasededatosenel

Apartedelosarchivosdelapágina,debemossubirlabasededatosconlaquetenemosquetrabajar.LasbasesdedatosconlasquetrabajaPHPsonmuyvariadasyendistintoscasospodemosutilizarunauotra,porloquelosmodosdesubirlabasededatostambiénpuedenvariar.

Nota:Esteartículoylossucesivos,quetratansobresubirunabasededatosMySQLalservidor,seenglobantantodentrodelManualdePHPcomodelTallerdeMySQL.Porello,seráimportantedisponerdeconocimientosdeambastecnologíasparaentenderyaprovecharestasexplicaciones.

EsmuycorrientequenuestroproveedordehostingofrezcajuntoconPHPlabasededatos

Page 126: Manual de PHP - Walter Carnero · sencillo y directo con el que podrías empezar es PHP. Otra de las claves del éxito de PHP es que la mayoría de los CMS más populares (WordPress,

Manual de PHP

http://desarrolloweb.com/manuales/manual-php.html Página 126 de 142

MySQL,asíquelasnotasparasubiresabasededatosalservidordeesteartículovanencaminadasaofrecersolucionesparaesabasededatos.

LabasededatosMySQLnosepuedesubirporFTP,comoquesehacíaconlosarchivosdelcódigoPHP.Parasubirlatendremosqueutilizarotrosmecanismos.Voyadistinguirentretrescasosdistintosenlosquenospodríamosencontrarenestemomento:

1. Labasededatosquepretendemossubirestávacía.Tansólohemoscreadolastablas,peronohemosintroducidodatosenellaso,alosumo,tienenalgúndatoquehemosintroducidodepruebas.

2. LabasededatosquequeremossubirestácompletayesunabasededatosMySQL.Enestecasotenemoscreadalabasededatosenlocalycontodalainformacióndentroy,porsupuesto,queremosqueesainformaciónquedetambiénenlabasededatosremota.

3. Labasededatosestácompleta(comoelcasoanterior),peronoesunabasededatosMySQL.Enestecasoestaríamoshaciendounamigracióndelabasededatosdeunsistemagestoraotro.

Veremoslostrescasosporseparadoenadelante,aunque,antesdeello,vamosamostrarunasherramientasquenosservirándemuchaayudaparalaadministracióndecualquierbasededatosremota.

LasherramientasenconcretoserelatanenelmanualTallerdeMySQL,sonlassiguientes:

PhpMyAdmin.UnaaplicacióncreadaenPHPquepodemosinstalarennuestroespaciodealojamientoparaadministrarlabasededatos.MysqlControlCenter(enadelanteMyCC).UnaaplicaciónWindowsquepermitecontectarseamúltiplesbasesdedatosMySQL,queseencuentrenenlocaloenremoto.Access.TambiénpermiteadministrarunabasededatosMySQLconectadaenlocaloenremoto.Enestecasoseutilizaunainterfazquemuchosyaconocen,comoesAccess,paraadministrarunabasededatosquenadatienequevercondichoprograma.

Enlostrescasosloquenospermiterealizarelsoftwaredeadministraciónsontareassobrelabasededatosdetodotipo,comopuedensercreartablas,modificarlas,insertardatos,borrarlos,editarlos.Modificaroborrartablasocamposdelasmismas,etc.

Laeleccióndeunaherramietaodeotrapasaporlosrecursosquenospermitanutilizarennuestroproveedor.Básicamente,loquenospuededecantaraunaopciónuotra,essipermitenonoconectardemaneraremotalabasededatosMySQL.Conozcoalojamientosdondesepermiteesaconexiónremotaydondeno.

SinopermitenconectarnosremotamentenosdecantaremosporPhpMyAdmin,puesesunaaplicaciónPHPqueseconectaenlocalyalaqueseaccededesdeunapáginawebyesolopermitentodoslosproveedores,inclusohaymuchosquetieneninstaladoyaestesoftwareparaadministrarlasbasesdedatos.

Encasodequesínospermitanconectarnosremotamenteconlabasededatos,eligiremosMyCCoAccess,quesonaplicacionesWindowsmuchomáspotentesyrápidasquelasqueutilizaninterfazweb,comoPhpMyAdmin.EspreferibleutilizarMyCCporqueestá

Page 127: Manual de PHP - Walter Carnero · sencillo y directo con el que podrías empezar es PHP. Otra de las claves del éxito de PHP es que la mayoría de los CMS más populares (WordPress,

Manual de PHP

http://desarrolloweb.com/manuales/manual-php.html Página 127 de 142

especialmentedesarrolladoparaconectaryoperarconbasesdedatosMySQL.

EsteartículoesobradeMiguelAngelAlvarezFuepublicadoporprimeravezen26/06/2003Disponibleonlineenhttp://desarrolloweb.com/articulos/12.php

SubirbasededatosMySQLvacíaalservidor

Labasededatosquepretendemossubirestávacía.Tansólohemoscreadolastablas,peronohemosintroducidodatosenellaso,alosumo,tienenalgúndatoquehemosintroducidodepruebas.

Esmuynormalquehayamosdiseñadounabasededatosparanuestroproyectodesde0,definiendolasdistintasentidadesdenuestromodelodedatos,juntoconsuscamposysustipos.

Enestoscasoslomásprobableesquelabasededatosestévacía,obiencontengadatosquehayamosintroducidoamododepruebayquenoqueramosconservarcuandosubamoslaaplicaciónaInternet.

Laopciónmásinteresanteentoncespodríasercrearotravezlastablasquetenemosenlocalenlabasededatosremota.Paraellotenemosdosposibilidades:

Sitenemospocastablasybastantesencillas:LaspodemoscrearenremotoconalgunaherramientacomoPhpMyAdminoMyCC.

Sitienemuchastablasy/omuycomplicadas:Larecomendaciónseríahacerunbackupdelaestructuraenlocalyrestaurarlaenremoto.Estonosevitarátenerquevolveracreartodaslastablasydefinirtodossuscamposysustipos.Puedeserunpocomáscomplicadoperosindudanosahorrarátiempo.

ParahacerelbackupdelaestructuraenlocalpodemosutilizaralgunaherramientacomoPhpMyAdmin,obienutilizarelcomandomysqldumpdesdelíneadecomandosdeMS-DOS.

Page 128: Manual de PHP - Walter Carnero · sencillo y directo con el que podrías empezar es PHP. Otra de las claves del éxito de PHP es que la mayoría de los CMS más populares (WordPress,

Manual de PHP

http://desarrolloweb.com/manuales/manual-php.html Página 128 de 142

HerramientadebackupdePhpMyAdmin.Estámarcadalaopcióndeextraersolamentelaestructuradelastablas.Simarcamosademáslacasilla"Send",nuestronavegadorsedescargaráelbackupenunficherodetexto.Sinolopulsamossimplementesevisualizará.

Loquetenemosquehacerenestecasoesunbackupdelaestructuradelabasededatos,esdecir,los"createtables"osentenciasSQLparacrearlastablas.Seríaunmontóndesentenciasconestaforma:

# --------------------------------------------------------

#

# Table structure for table 'comentario'

#

CREATE TABLE comentario (

id_comentario int(5) unsigned NOT NULL auto_increment,

id_articulo int(4) DEFAULT '0' NOT NULL,

comentario text NOT NULL,

fecha int(14) unsigned DEFAULT '0' NOT NULL,

revisado tinyint(1) DEFAULT '0' NOT NULL,

nombre_comentario varchar(100) DEFAULT 'Nombre no especificado' NOT NULL,

email_comentario varchar(100) DEFAULT 'Email sin especificar' NOT NULL,

tipo tinyint(1) unsigned DEFAULT '1' NOT NULL,

PRIMARY KEY (id_comentario)

);

PararestaurarestassentenciastenemosopcionestantodentrodePhpMyAdmincomodeMyCC.EnamboscasosloquetenemosquehaceresejecutarestassentenciasenelservidorMySQLremoto.EnPhpMyAdmintenemosuncampoparaintroducirsentenciasSQLytambiénotrocampoparaseleccionarunarchivodetextocontodaslassentenciasSQL,paraejecutarlasunadetrásdeotra.EnMyCCtenemosunbotónquenospermiteabrirunaconsoladondeintroducirunaovariassentenciasSQLyejecutarlas.

HerramientadebackupyrestauracióndePhpMyAdmin

Page 129: Manual de PHP - Walter Carnero · sencillo y directo con el que podrías empezar es PHP. Otra de las claves del éxito de PHP es que la mayoría de los CMS más populares (WordPress,

Manual de PHP

http://desarrolloweb.com/manuales/manual-php.html Página 129 de 142

BotónparaintroducirsentenciasSQLenMyCC

Repetimos,estosólonosserviráparasubirlaestructuradelabasededatosynolosdatosquecontenga.Sideseamossubirtambiénlainformacióndelabasededatosentoncesdebemosutilizarotrasestrategias,relatadaspróximamente.

EsteartículoesobradeMiguelAngelAlvarezFuepublicadoporprimeravezen26/06/2003Disponibleonlineenhttp://desarrolloweb.com/articulos/12.php

SubirunabasededatosMySQLconlaestructuraylosdatos

ComotransferirunabasededatosMySQLquetenemosenlocalanuestroservidorremoto,incluyendotantolaestructuradelastablascomosusdatos.

Silabasededatosquedeseamossubirestállenadeinformaciónydeseamosqueseconserveunavezsubidalabasededatosaremoto,tenemosquerealizarunbackupdelabasededatosyrestaurarloenremoto.

Nota:EstasrecomendacionesestánpensadasparasubirunabasededatosMySQLquepodamostenerenlocalaunabasededatosMySQLquehayamoscontratadoenremoto.SilabaseorigennoesMySQLestaríamoshablandodeunamigracióndebasesdedatos,peroestoloveremosenunartículomásadelante.

Page 130: Manual de PHP - Walter Carnero · sencillo y directo con el que podrías empezar es PHP. Otra de las claves del éxito de PHP es que la mayoría de los CMS más populares (WordPress,

Manual de PHP

http://desarrolloweb.com/manuales/manual-php.html Página 130 de 142

Enestecasoelprocedimientoseríamuyparecidoaldesubirunabasededatosvacía,relatadoanteriormente,conlasalvedaddequeahoradebemosextraernosololaestructuradelabasededatos,sinotambiénlosregistrosquecontiene.

Paraellopodemosutilizarmysqldump,segúnserelataenesteartículo,obienPhpMyAdmin,seleccionandolaopciónqueindicaqueelbackupcontengalaestructuraylosdatos(Structureanddataenversioneseninglés).

LaestructuraylosdatosvendránenunficherodetextoconunaseriedesentenciasSQLparacrearlastablasylosinsertnecesariosparaintroducircadaunodelosdatos.

Pararestaurarlabasededatosloharemostalcomoseharelatadoparaelcasodequelabasededatosestuvieravacía,conlaayudadeunainstalacióndePhpMyAdminenremotoounMyCCqueseconectealabasededatoscontratadaenelservidordeInternet.

Sitenemosproblemasparasubirelficherodebackupdelabasededatosesposiblequeennuestroproveedordealojamientonospuedaayudarasubirelficheroyrestaurarlo.Comoelproveedordisponedelosservidoresensuspropiasinstalaciones,tienemuchasmásposibilidadesquenosotrosparatrabajarconlasbasesdedatos,sintemoraquelaslentascomunicacionesporInternetarrojenerroresenlarestauracióndelosdatos.

Sinuestroproveedornopuedeayudarnos,seguramentedispongaynosindiquealgúnmecanismopararealizarlatareasinlugaraerrores.Puedeocurrinosconalgúnproveedorquenosdigaqueseencargadetodoperonosexijaelpagodelashorasdetrabajodelinformáticoquevaarestaurarelbackupdelabasededatos.Sinoponefacilidadesnisiquieraenestoposiblementeseamejorirpidiéndolesquenosdevuelvaneldineroinvertidoporquesuservicionoseríamuybueno.

EsteartículoesobradeMiguelAngelAlvarezFuepublicadoporprimeravezen23/07/2003Disponibleonlineenhttp://desarrolloweb.com/articulos/12.php

MigrarunabasededatosaMySQL

IndicacionesútilesparamigrarunabasededatosaMySQL,esdecir,cuandotenemosquesubirunabasededatoslocalencualquiergestoraunabasededatosremotaenMySQL.

Elúltimocasoenelquenospodemosencontraralahoradesubirunabasededatosanuestroproveedordealojamientoesquelabasededatoslatengamoscreadaenlocal,peroenunsistemagestordistintodelquevamosautilizarenremoto.EnremotosuponemossiemprequevamosautilizarlabasededatosMySQL.EnlocalpodríamosdisponerdeunabasededatosAccess,SQLServerodeotrosistemadebasededatos.

Page 131: Manual de PHP - Walter Carnero · sencillo y directo con el que podrías empezar es PHP. Otra de las claves del éxito de PHP es que la mayoría de los CMS más populares (WordPress,

Manual de PHP

http://desarrolloweb.com/manuales/manual-php.html Página 131 de 142

Elprocesodelamigraciónpuedeserbastantecomplejoy,comohaytantasbasesdedatosdistintas,difícildedarunarecetaquefuncioneentodosloscasos.Además,apartedeladificultaddetransferirlainformaciónentrelosdossistemasgestoresdebasededatos,tambiénnosinfluirámuchoenlacomplejidaddelproblemaeltipodelosdatosdelastablasqueestamosutilizando.Porejemplo,lasfechas,loscamposnuméricoscondecimalesolosboleanospuedendarproblemasalpasardeunsistemaaotroporquepuedenalmacenarsedemanerasdistintaso,enelcasodelosnúmeros,conunaprecisióndistinta.

RecomendacionesparamigrardeAccessaMySQL

SinuestrabasededatosanteriorestabaconstruidaenAccesslotenemosbastantefácil,graciasaqueMySQLdisponedeundriverODBCparasistemasWindows,quenospermiteconectarAccessconelpropioMySQLypasarinformaciónfácilmente.

EstetemaestárelatadoenelartículoExportardatosdeMySQLaAccess,aunquehayqueindicarquesideseamoshacerunaexportacióndesdeAccessenlocalaMySQLenremotopuedehaberproblemasporquenotodoslosalojadorespermitenlasconexionesenremotoconlabasededatos.Sinotenemosdisponibleunaconexiónenremotoconnuestroservidordebasesdedatosvamosatenerquecambiarlaestrategiaunpoco.

LaideaenesteúltimocasoesinstalarMySQLenlocalyrealizarlamigracióndesdeAccessenlocalaMySQLenlocalyluegopodríamoshacerunbackupdelabasededatoslocalysubirlaaremoto,talycomoseharelatadoantes.

RecomendacionesparamigrardesdeSQLServeraMySQL

Laverdadesquenohetenidoestecasonunca,perohayquedecirqueAccesstambiénnospuedeayudarenestecaso.AccesspermiteseleccionarunabasededatosSQLServerytrabajardesdelapropiainterfazdeAccess.LaideaesqueAccesstambiénpermitetrabajarconMySQLyposiblementehaciendounpuenteentreestosdossistemasgestorespodemosexportardatosdeSQLServeraMySQL.

LoqueesseguroqueutilizandoelpropioAccessdepuentepodríamosrealizareltrabajo.PrimeroexportandodeSQLServeraAcessyluegodesdeAccessaMySQL.

Otrasbasesdedatosuotrastécnicas

SilabasededatosorigendisponedeundriverODBCnohabrá(enteoría)problemaparaconectarlaconAccess,demanerasimilaracomoseconectaconMySQL.EntoncespodríamosutilizarAccessparaexportarlosdatos,porquedesdeallísepodríanaccederalosdossistemasgestoresdebasesdedatos.

SinotenemosAccess,olabasededatosoriginalnotienedriverODBC,obiennonosfuncionacorrectamenteelprocesoynosabemoscómoarreglarlo,otraposibilidadesexportarlosdatosaficherosdetexto,separadosporcomasoalgoparecido.Muchasbasesdedatostienenherramientasparaexportarlosdatosdelastablasaficherosdetexto,loscualessepuedenluegointroducirennuestrosistemagestordestino(MySQL)conlaayudadealgunaherramientacomoPhpMyAdmin.

Page 132: Manual de PHP - Walter Carnero · sencillo y directo con el que podrías empezar es PHP. Otra de las claves del éxito de PHP es que la mayoría de los CMS más populares (WordPress,

Manual de PHP

http://desarrolloweb.com/manuales/manual-php.html Página 132 de 142

Paraello,enlapáginadepropiedadesdelatablaencontraremosunaopciónparahacerelbackupdelatablayparaintroducirficherosdetextodentrodeunatabla(Inserttextfilesintotableeninglés).

Accediendoaeseenlacepodremosverunformulariodondeintroducirlascaracterísticasdelficherodetexto,comoelcarácterutilizadocomoseparadordecampos,oelterminadordelíneas,etc,juntoconelpropioarchivoconlosdatos,yPhpMyAdminseencargarádetodoeltrabajodeincluiresosdatosenlatabla.

Comosehabrásupuesto,esnecesariotenercreadalatablaenremotoparaquepodamosintroducirlelosdatosdelficherodetexto.

Page 133: Manual de PHP - Walter Carnero · sencillo y directo con el que podrías empezar es PHP. Otra de las claves del éxito de PHP es que la mayoría de los CMS más populares (WordPress,

Manual de PHP

http://desarrolloweb.com/manuales/manual-php.html Página 133 de 142

Cambiosdeunformatodedatosaotro

Todalamigracióntienequetenerencuentamuyespecialmente,comoyaseseñaló,lasmanerasquetengacadabasededatosdeguardarlainformación,esdecir,delformatodesustiposdedatos.Tenemosquecontarsiempreconlaposiblenecesidaddetransformaralgunosdatoscomopuedenserloscamposboleanos,fechas,camposmemo(textoconlongitudindeterminada),etc,quepuedenalmacenarsedemanerasdistintasencadaunodelossistemasgestores,origenydestino.

Enalgunoscasosposiblementetengamosquerealizaralgúnscriptquerealiceloscambiosnecesariosenlosdatos.Porejemplopuedeserparalocalizarlosvaloresboleanosguardadoscomotrue/falseavaloresenteros0/1,queescomoseguardaenMySQL.Tambiénlasfechaspuedensufrircambiosdeformato,mientrasqueenAccessaparecenencastellano(dd/mm/aaaa)enMySQLaparecenenelformatoaaaa-mm-dd.PHPpuedeayudarnosenlatareadehacerestescript,tambiénVisualBasicScriptparaAccesspuedehacerestastareascomplejasyelpropiolenguajeSQL,abasedesentenciasdirigidascontralabasededatos,puedeservirparaalgunasaccionessencillas.

EsteartículoesobradeMiguelAngelAlvarezFuepublicadoporprimeravezen23/07/2003Disponibleonlineenhttp://desarrolloweb.com/articulos/12.php

Page 134: Manual de PHP - Walter Carnero · sencillo y directo con el que podrías empezar es PHP. Otra de las claves del éxito de PHP es que la mayoría de los CMS más populares (WordPress,

Manual de PHP

http://desarrolloweb.com/manuales/manual-php.html Página 134 de 142

EpílogosalManualdePHP

DiversosartículosquefinalizanestemanualdePHPyofrecenintroduccionesadiversosasuntosquesoninteresantesparaconocersobreestelenguajedeprogramación.Introduccionesaalgunasherramientasespecialmenteútiles,quepuedenayudarnosadesarrollarpáginasweb.

SeguridaddeproyectosPHP

Cómoevitarquenuestrosproyectoswebseanatacadosfácilmente.

Debidoalosavancesennuestromediotecnológico,nosencontramosconsituacionesquenosamarganlaexistencia,comoporejemplo:cuandonuestraswebssecaen,ingresodevirusanuestroPC,spamennuestroscorreos,etc.

Eltérminoseempezóautilizarenelaño2000porLuisvonAhn,ManuelBlumyNicholasJ.HopperdelaCarnegieMellonUniversity,yJohnLangforddeIBM.

ElsistemaCaptchatienelassiguientescaracterísticaspordefinición:

Soncompletamenteautomatizados,esdecir,noesnecesarioningúntipodemantenimientonideintervenciónhumanaparasurealización.Estosuponegrandesbeneficiosencuantoafiabilidadycoste.

Elalgoritmoutilizadoespúblico.Deestaforma,larupturadeuncaptchapasaaserunproblemadeinteligenciaartificialynolarupturadeunalgoritmosecreto.

Pueshabiendovistounpocoloqueescaptcha“CompletelyAutomatedPublicTuringtesttotellComputersandHumansApart(PruebadeTuringpúblicayautomáticaparadiferenciaramáquinasyhumanos).

Enesteescenario,podríamosencontrarnoscondossituacionesbiendiferentes:

Page 135: Manual de PHP - Walter Carnero · sencillo y directo con el que podrías empezar es PHP. Otra de las claves del éxito de PHP es que la mayoría de los CMS más populares (WordPress,

Manual de PHP

http://desarrolloweb.com/manuales/manual-php.html Página 135 de 142

Tenerunsitiomontadoytenerqueprotegerlo.Programarunsitiodesdecero.

Escapedelasentradas.Paramuchoslamaneraidealdeprotegerunsite.Comoyahemosvistoenalgunodeloscasos,nonosesútil.Losmáshabitualessonelusode:

addslashes()/stripslashes()htmlentities($string,ENT_QUOTES)htmlspecialchars()mysql_real_string()

Teniendoactivadaslasmagic_quotes_gpcennuestrophp.ini,quenospondrápordefectounslashentodoslosstrings(evitandolostediosos"addslashes()").Entodocaso,elusodedichoselementosnospodrásalvardemuchosdelosataques.

Evitar,salvoencasosnecesarios,quelosformulariosPOSTsellamendesdeotrodominioquenoseaeldelpropioservidor.Enestecaso,nosevitaremosqueunatacanteavezadoutiliceunscriptatalefectoparairbloqueandonuestroservidoryllenándolodedatosinútiles.

Vamosaver,¿quéclasedeconfiguraciónseríalaóptimaparaqueunsistemaPHPfueramássegurocontratodotipodeataques?

Estasdirectivasserían:

Openbase_dirEstadirectivabienconfiguradaevitarálosataques"trasversaldirectories",debidoaquelimitaejecucióndeficherosalentornoqueescojamos.

Allow_furl_openoffEsimportantequeestadirectivaestéenOFFparaevitar"RemoteFileInclusion",yaquelainhabilitacióndeestadirectivanopermitiráalaaplicaciónhacerincluderemotos.

Register_globalsoffComoyahemosexplicado,quizálamásmaléfica(yobsoleta)formadequenuestrosatacantesdesplieguentodosupotencialesmedianteestadirectivaactivada.Esdecir,cualquierparámetroquenosvengaporPOSToGETpuedeserunavariablepotencialmentepeligrosaennuestroaplicativo.Así,cualquierparámetroexternosetratarádeformacuidadacon$_GET['param'],$_POST['param'],$_FILES['param']paraestablecerquétipodevariablessonexternasycuálesno.

Noserecomienda,anoserquesetengamuyclaroquéseestáhaciendo,elusode$_REQUEST,puesahípuedeentrar'cualquiercosa'quenosvengaexternamente,yfácilmentepodríanintroducirnosvaloresnoesperados.

Safe_modeonEstadirectivaactivadaevitarálaejecucióndealgunoscomandospotencialmentedañinosennuestrosistema,ademásdelchequeodeciertasfuncionesquepuedanconsiderarsedelicadas.Unalistadedichasfuncionespuedeencontrarseaquí:

php.net/manual/en/features.safe-mode.functions.php

Especialatenciónmerecentambiénlasdirectivas“safe_mode*”quecomponenlafamilia.

Page 136: Manual de PHP - Walter Carnero · sencillo y directo con el que podrías empezar es PHP. Otra de las claves del éxito de PHP es que la mayoría de los CMS más populares (WordPress,

Manual de PHP

http://desarrolloweb.com/manuales/manual-php.html Página 136 de 142

safemode:safe_mode_gidsafe_mode_include_dirsafe_mode_exec_dirsafe_mode_allowed_env_varssafe_mode_protected_env_vars

Porúltimo,unasfuncionesque,segúnlacasuísticadenuestroaplicativopudieraevitarnosalgúnsustoporlaejecucióndecomandossensiblesquenoqueremos(ynodebemos)utilizar:

disable_functions<lista de funciones>disable_classes<lista de clases>

EscaneodepuertosUnamaneradeevitarataquesatodosistemaoperativo,yaseamediantewebomediantecualquierotrotipodevulnerabilidad,seríamediantelaejecucióndecódigoremotooinyeccióndecódigonodeseadoenserviciosquepuedantenerrelaciónconnuestrosistema.

Paraelloserecomiendaejecutarunescaneodepuertosdenuestramáquina(noúnicamentepuerto80-httpo443-SSL)paraaveriguarlasposiblesvulnerabilidadesoexploitsquepuedanafectaranuestrosistemayservidorweb:

Losmásconocidossonnmapynessus.Elfuncionamientodenmappuedellegarasersencillo,aunquetieneundesplieguedeopcionesque,abuenseguro,muchagenteencontraráinteresante.

Unaejecucióndeesteprogramapuededarlugaraunresultadocomoeste:

StartingNmap4.53(http://insecure.org)at2008060312:05CESTInterestingportson192.168.1.1:Notshown:1711closedportsPORTSTATESERVICE21/tcpopenftp23/tcpopentelnet80/tcpopenhttpMACAddress:00:02:CF:81:6F:89(ZyGateCommunications)

Nessus,encambio,nosofreceráunaherramientacliente/servidorqueutilizaráunabasededatosconlasvulnerabilidadesqueestadísticamentehanpodidoocasionar“desastres”ynosavisamedianteesteescaneo.

Lainterfaz,además,esbastantemásamigableynosmostraráunasestadísticasdelosprocesosejecutados.

Escaneodevulnerabilidadesweb

Page 137: Manual de PHP - Walter Carnero · sencillo y directo con el que podrías empezar es PHP. Otra de las claves del éxito de PHP es que la mayoría de los CMS más populares (WordPress,

Manual de PHP

http://desarrolloweb.com/manuales/manual-php.html Página 137 de 142

Másenconsonanciaconelobjetivodeesteartículo,estánlosescaneosdevulnerabilidadespropiamenteweb.Estosescaneossepuedenbasarenvariaspremisas,empleandosistemasdeconocimiento,funcionesheurísticaseinclusotécnicasfuzz,queveremosmásadelante.Unabuenacombinacióndeestoselementospuededarnosmuchaspistasalahoradeprotegernuestrositeyllegardondenosotrosnoalcanzamos.Empecemosporlosescaneadoresautomáticosmásempleadosypopulares.

Acunetix

Acunetix,quegozadeunaversiónFreeEdition(sóloparaHTMLInjection),peroconunagranvariantedesistemasdeinyección,unabasededatosampliayunainterfazmuyamigable.Losprocesosporlosquepuede“atacarse”puedenservariosylosperfilesdeataque–sisetienelaversióndepago–delosmásvariopintos,muchosdeellosyaloshemosvistoaquí.

SSS(ShadowSecurityScanner)

Similaralanteriorencuantoasistemaweb,quizánotancompleto,peroqueofrecetambiénelsondeodeotrosprotocoloscomoFTP,NetBios,módulosdeApachedelquesetenganconstanciaquehayvulnerabilidades.

TécnicasFuzz

Sellamafuzzingalasdiferentestécnicasdetesteodeaplicativosquegenerandatossecuencialesyaleatoriosparaobtenerasílasvulnerabilidadesdelavictima.Estesistemapuedesermuypotente,puescombinalaaleatoriedadenlosataquesconataquesbasadosenformatosheurísticos.Unalistadeestospotentesescaneadoresdevulnerabilidadespuedenencontrarseen:

www.infosecinstitute.com/blog/2005/12/fuzzers-ultimate-list.html

Page 138: Manual de PHP - Walter Carnero · sencillo y directo con el que podrías empezar es PHP. Otra de las claves del éxito de PHP es que la mayoría de los CMS más populares (WordPress,

Manual de PHP

http://desarrolloweb.com/manuales/manual-php.html Página 138 de 142

UnejemplolopodemostenerejecutandoelWebFuzzer,conlicenciaGPL,escritoenC:

/gunzip.altervista.org/g.php?f=projects#webfuzzer

PHPIDS

PHP-IDSesunsistemabasadoenPHPqueactúacomoIDS(IntrusionDetectSystem)yqueseaplicaatodosnuestrosarchivosbuscandoalgúntipodeinyecciónovulnerabilidad.PuededetectardesdeXSS,SQLInjection,RFIyataquesLDAPInjectionytieneinclusohastamódulosespecializadosparadistintostiposdeCMS.

MódulosApache

Deentreellos,existenmuchosquenospuedenayudaranuestrocometido,aunquenoscentraremosenlossiguientes:

Mod_rewriteFamososobretodoparaelusodeURL-Friendly,puesreescribelaentradatransformándolaenotras“Humanreadibility”.Personalmenterecomiendoelusodemod_security,debidoaquemod_rewritetienelógicaslimitacionesalnoserunmódulodiseñadoatalefecto.

Conclusión

Noesuncasotrivialtenerqueprotegerunsiteweb,tantosiyaestáhechocomosilotenemosquedesarrollardenuevo.Laúnicaformadeobstaculizarelejerciciodeestosatacantesseráconocercuálessonsustécnicas,mantenerseactualizadoregularmentedelasvulnerabilidadesdenuestroentorno(SistemaOperativo,Lenguaje,basededatosymódulosylibreríasasociados),encasodeserunprogramaconocido(comounWordPress,Joomla!,PostNuke)mantenersealertaalosbugsque,altruistamente,algunosatacantespublicanenwebs.

Además,conunsistemaIDSquenospuedaircomunicandoquépasaconnuestroslogs,laevolucióndeestosmismosylaconstanteevaluacióndelasvulnerabilidadesdenuestrosistema,juntoconunescaneoautomático,técnicasfuzzyunaprogramaciónsólida,yalgúnmódulodestinadoalaseguridadharándenuestroservidorwebunafortaleza(casi)inexpugnable.

EsteartículoesobradeBrianHernándezFuepublicadoporprimeravezen13/06/2013Disponibleonlineenhttp://desarrolloweb.com/articulos/seguridad-proyectos-php.html

Page 139: Manual de PHP - Walter Carnero · sencillo y directo con el que podrías empezar es PHP. Otra de las claves del éxito de PHP es que la mayoría de los CMS más populares (WordPress,

Manual de PHP

http://desarrolloweb.com/manuales/manual-php.html Página 139 de 142

Problemadelerror404OKenPHP

Tenemosqueasegurarnosqueelerror404,depáginanoencontrada,seacorrectamenteenviadoalnavegadorparaquenolellegueunHTTP/1.x404OK.

HayvecesqueconPHPqueremosenviarunerror404depáginanoencontrada,paraavisaralnavegadorqueunapáginanoexiste.Essencilloenviarporlascabecerasdelhttpunerror404,perohayqueasegurarsequeelcódigodeerrorestébienenviadoparanodarinformacionesambiguasalosclientesqueseconectenalservidor.

Estoesimportanteporqueelcódigo404tambiénsirvealosbuscadoresomotoresdebúsqueda,parainformarqueunapáginanoexiste.Sidamosinformacionesambiguasalosbuscadorespuedequeredundenegativamenteenlaclasificacióndenuestrositio.

Elproblemaquequeremoscomentarahoraeseltípicoerror"404OK".Estoesunaambigüedad:404espáginanoencontradayOKquieredecirquetodohaidobien.Perosinoencontrólapágina¿CómoesquedecimosqueOK?EsoesalgoquesepuedeevitarenviandoelerrorcorrectamenteenlacabeceradelHTTP.

Paraenviaruncódigodeerror404porlascabecerasdelHTTPconPHPtenemosquehacerlosiguiente:

<?

header("HTTP/1.0 404 Not Found");

?>

Conlafunciónheader()dePHPenviamosinformaciónenlacabecerasdelhttp.Enestecasohemosenviadounacabecera404NotFound.Atención,porquelafunciónheader()debeinvocarseantesdehaberescritonadaenlapágina,osea,antesdehaberenviadoningunainformaciónalnavegador.

Perodependiendodelaconfiguracióndenuestroservidorestopuedefuncionarono.

Lamejormaneradesaberquéestamosenviandoporlascabecerasdelhttpesutilizarunprogramaquenosmuestrelascabecerasquesegenerantantoenelclientecomoenelservidor.Existenvariosprogramasquenospodríanservir,peronosotrosvamosarecomendaraquíunaextensióndeFirefoxquehemoscomentadoyaenotroartículo:VercabecerasHTTPconLiveHttpHeaders.

Veremosqueenalgunasocasionesenviandoestacabeceraelnavegadorrecibeuncódigodeerrorcomoeste:

HTTP/1.x404OK

Esoesalgoquetenemosqueevitar,porqueesambiguo.Lacabeceradeseablesería:

HTTP/1.x404NotFound

Page 140: Manual de PHP - Walter Carnero · sencillo y directo con el que podrías empezar es PHP. Otra de las claves del éxito de PHP es que la mayoría de los CMS más populares (WordPress,

Manual de PHP

http://desarrolloweb.com/manuales/manual-php.html Página 140 de 142

Puesbien,cuandolacabeceraquegeneramosesHTTP/1.x404OKtenemosquehacerlosiguienteparaconseguireldeseadoHTTP/1.x404NotFound.

<?

header("HTTP/1.0 404 Not Found");

header("Status: 404 Not Found");

?>

Primeroleindicamoslacabeceradelhttpcomo404yluegolanzamosotracabeceraindicandoqueelestatusquetienequeenviares"NotFound".Estodeberíafuncionarentodosloscasos.Esposiblequeconunasoladelasdoscabecerasenviadasnosenvíeyaelerror404NotFound,dependedelaconfiguracióndenuestroservidorquenecesitemosunauotra.Perosiindicamoslasdosenlaspruebasquehehechoconvariosservidoressiempreherecibidoelcódigodeerrorcorrecto.

InsistoenquelobuenoesqueveamosquécabecerasdelHTTPestamosenviandoconunproductocomoLiveHttpHeaders.AsípodremosestarsegurosdequécabecerastenemosqueenviaryquécódigoPHPeselcorrectoennuestrocaso.

PorqueenalgunosservidoresPHPsienviamossóloestacabecera:

<?

header("Status: 404 Not Found");

?>

Nosenvíaalnavegadorelcódigo:

HTTP/1.x200OK

Porejemplo,enestecasoestodavíapeor,porquenosotroshabíamosqueridoenviarunerror404yenrealidadloquehallegadoalnavegadoresun200OKquequieredecirpáginaencontradaycorrecta.

Endefinitiva,cabeestudiardetalladamenteesteasuntoparaasegurarnosqueestamosenviandolacabeceracorrectayelerror404esclaro.

EsteartículoesobradeMiguelAngelAlvarezFuepublicadoporprimeravezen16/08/2007Disponibleonlineenhttp://desarrolloweb.com/articulos/problema-error-404-php.html

LibreríasJSONparaPHP

InformaciónsobrelasdistintaslibreríasyopcionesparautilizarlanotacióndeobjetosJavascriptJSONenprogramasrealizadosconellenguajePHP.

Page 141: Manual de PHP - Walter Carnero · sencillo y directo con el que podrías empezar es PHP. Otra de las claves del éxito de PHP es que la mayoría de los CMS más populares (WordPress,

Manual de PHP

http://desarrolloweb.com/manuales/manual-php.html Página 141 de 142

JSONesunanotaciónJavascriptparaescribirobjetosquesehahechobastantepopularenelmundodeldesarrollodewebsyqueseutilizaendiversoslenguajesdeprogramación,componentes(habitualmenteAjax),etc.Suéxitosedebeaqueesunaexcelenteformaparaalmacenarinformaciónquedeseamoscompartirentredistintoscomponentesolenguajesdelasaplicacionesweb.SitrabajamosconAjaxyalgunodelosframeworksJavascriptexistentes,yahabremosnotadoestaposibilidadyposiblementeyaestemosutilizandoJSONounanotaciónsimilar.

JSON,cuyassiglassignificanJavaScriptObjectNotation(enespañolNotacióndeObjetosdeJavaScript),esunformatoligero,fácildeescribirocodificar,asícomotambiénesfácildeleerporlossereshumanos.DesdeJavascriptpodemosprocesardirectamentecualquierobjetoJSONyexistenlibreríasparalamayoríadeloslenguajesdeprogramaciónquetienenfuncionesparainterpretaresteformato.Porellosehaadoptadouniversalmente.ParamásinformaciónpodemosvisitarelsitiowebdeJSONenhttp://www.json.org/.

EstoquieredecirqueconJSONpodemoscomunicardatosfácilmenteentrescriptsJavascriptyscriptsPHP.Porejemplo,pensemosenunavalidacióndeformularioquesedeseahacerconAjax.LosdatosdelformulariosepuedenenviaraPHPpormediodePOSTyluegopodríamosdesdePHPenviaraJavascriptelresultadodevalidaresosdatosenelservidor.Comolavalidaciónpuedeserpositivaonegativa,asícomopuedetenermásomenoscódigosdeerroryaccionesarealizardependiendodelainformaciónprocesada,elscriptPHPtienequemandarunarespuestamásomenoselaboradaalscriptJavascriptyunaposibilidadesenviaresosdatosdesdePHPutilizandolanotaciónJSON.

DisponibilidaddelasfuncionesJSONenPHP

PHPdisponedevariasfuncionesparahacerdistintostratamientosconnotacióndeobjetosJSON,quepermiteconvertirunobjetoPHP,ocualquierotrotipodevariable,aunstringconnotaciónJSON,asícomocrearunobjetoPHPapartirdeunstringcodificadoconJSON.

EnPHP,comodecíamos,esposibleproduciryconsumirdatoscargadosconnotaciónJSON,pormediodeunasfuncionesdelasquedisponeellenguaje,queexistendemanerapredeterminadaenlosservidoresmodernosdePHPyquesepuedenutilizartambiéneninstalacionesantiguasdePHP,aunqueconalgúntrabajodeinstalaciónadicional.

ApartirdePHP5.2lasfuncionesJSONestándisponiblessiempre,perosiutilizamosporejemploPHP4tendríamosqueinstalarlasmanualmente.Paraelloexistenvariospaquetesdelibrerías,queprovienendediversasfuentes,quetienenfuncionesparatratarconJSONdesdePHP.

PaqueteJSONdePECLEstepaquete,delrepositoriodelibreríasPHPPECL,escompatibleconPHP4.3.0osuperior.EnversionessuperioresaPHP5.2estádisponiblepordefecto.Enversionesanterioresdellenguajesetendríaqueinstalardemaneraseparada.

LibreríaJSON-PHPEsunalibreríadefuncionesqueseconocetambiénconelnombrede"Services_JSON".OriginariamenteescritaporMichalMigurski,enlaactualidadseencuentradisponibledentrodelframeworkPHPPEAR:http://pear.php.net/package/Services_JSON

JSONLibenZendFrameworkEsunalibreríadefuncionesparatratamientoconJSON

Page 142: Manual de PHP - Walter Carnero · sencillo y directo con el que podrías empezar es PHP. Otra de las claves del éxito de PHP es que la mayoría de los CMS más populares (WordPress,

Manual de PHP

http://desarrolloweb.com/manuales/manual-php.html Página 142 de 142

queformapartedelframeworkPHPZend.

XML-RPCparaPHPPormediodeunaextensiónparalalibreríaphp-xmlrpc,tambiénsepuedetratarconnotacióndeobjetosJSON.

Lasparticularidadesdecadasistemasonligeramentedistintas.Cabedecirquelamásinteresanteseríalaprimera,queformapartedePECL,puestoqueestáescritaenCyportantoserámásrápidadeejecutarse,alformarpartedeloscomponentesnativosdePHP.ComodecimossólopodremosdisponerdeellaapartirdePHP5.2,peroenservidoresantiguostendríamosqueinstalarlaaparte,loqueamenudoserácomplicado,oinclusoimposibleparasitioswebenproducciónyenunalojamientocompartido.

Asíque,sinuestroservidorPHPnodisponedelasfuncionesJSONporestarpocoactualizado,noscostarámuchomenosesfuerzoydoloresdecabezautilizarotralibreríadistintaalabásicadePECL.Enestecaso,porlafacilidaddeinstalación,serecomendaríalautilizacióndelalibreríaquevieneenPEAR,quesepuededescargardelpropiositiodePEAR,enlaURLhttp://pear.php.net/package/Services_JSON

Nota:HemospublicadoenDesarrolloWeb.comenpasadosartículosalgunasreferenciasútilesparainstalarPEARyutilizaralgunoscomponentesdeesteframeworkPHP.esteframeworkPHP.

Existeunartículomuyinteresante,aunqueeninglés,quecomparalasdiversaslibreríasexistentesparausarJSONdesdePHP,quecontienediversasinformacionestécnicas,requisitosyunanálisisdeldesempeñodecadauna.

EnelpróximoartículoexplicaremoscómoutilizarlasfuncionesJSONenPHPpormediodelasfuncionesnativasdellenguaje.

EsteartículoesobradeMiguelAngelAlvarezFuepublicadoporprimeravezen22/09/2009Disponibleonlineenhttp://desarrolloweb.com/articulos/librerias-json-php.html