manual de php - walter carnero · sencillo y directo con el que podrías empezar es php. otra de...

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

Upload: others

Post on 14-Jun-2020

30 views

Category:

Documents


0 download

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