You are on page 1of 134

U.T.

1INSTALACINDESERVIDORESDEAPLICACIONESWEB
1.SERVIDORESWEB Cuando un usuario se conecta a Internet y solicita una pgina web a travs de su barra de direcciones,loquehaceesestablecercontactoconelordenadorquetienealmacenadaesapgina web. En este ordenador est funcionando un programa que se conoce, genricamente, como servidorweb.Esteprogramabuscalapginasolicitadaeneldiscodurodelservidoryselaenvaal cliente.Poranaloga,elclienteesunordenador(aqueldesdeelquenosconectamosaInternet)y un programa cliente (el navegador con el que nos conectamos y donde se muestra la pgina solicitada). Cuando desde un navegador solicitamos una pgina web, el ordenador no se conecta directamentealservidordedichapgina.SeconectaaunodelosservidoresDNSestablecidos.El servidor DNS contiene un directorio con todas las pginas web del mundo y las IPs de los correspondientesservidores.Aspues,elDNSbuscaenlalistalapginasolicitadayelnmerode IPcorrespondiente.Estoesloquesellamaresolverelnombre. SITIOSDINMICOS Cuandotenemosunapginaescritaqueutilizanicamentelastecnologasdelladocliente(HTML yJavaScript)sedicequeesesttica.Estosignificaquesuscontenidossonsiemprelosmismos.Si queremosquecambien,debemoshacerlonosotros,editandolapgina,paraquelosusuariosvean los nuevos contenidos. A menudoesto es imposible, debido a que hay muchas ocasiones en las queloscontenidosdebenserdependientesdeunasolicitudporpartedelusuario. Las pginas dinmicas emplean lo que se conoce como programacin en el lado del servidor. Desde el punto de vista tcnico, la principal diferencia es que una pgina esttica, cuando es llamadaporuncliente,bajaalnavegadortalcomoest,ysemuestracomoes.Cuandoelcliente llamaaunapginadinmica,existeunprocesoenelladodelservidorquecreaenesemomentola pgina,incorporandoloscontenidosqueelclientehasolicitado,ysirvelapginarecincreadaal cliente. Otro cliente que solicite la misma pgina con otros contenidos recibir un resultado diferente.Poresosehabladepginasdinmicas,porquesucontenidopuedevariarysegeneraen elservidorenelmomentodelasolicitud. 2.INSTALACINYCONFIGURACINDESERVIDORESDEAPLICACIONESWEB ANLISISDEREQUERIMIENTOS Laspginasdinmicasseprogramanempleandotecnologasdeservidor.Paraprobaryrealizarlas prcticas de este Mdulo necesitaramos tener un servidor de red que nos proporcionara los servicios necesarios. En este caso lo ideal es tener nuestro propio servidor en casa para poder implementar y configurar los servicios que necesitemos. Para ello, vamos a utilizar un solo ordenadorcomoclienteyservidor.Lanicadiferenciaesque,alllamaralaspginasascreadas, enlugardeusarunadireccindeInternetusaremosladireccindenuestrapropiamquinalocal. Luego,unavezcreadoyprobadounsitio,losubiremosalservidorremotoquenosintereseyall estardisponibleparatodoelmundo. SERVIDORWEBYSISTEMAGESTORDEBASESDEDATOS:INSTALACINYCONFIGURACIN
U.T.1INSTALACINDESERVIDORESDEAPLICACIONESWEB Pgina:1

Servidor Apache. El programas que emplearemos es Apache porque es el ms extendido en Internet.Estoesporqueesgratuitoyesunodelosmsrobustosqueexisten,muyseguroantelos ataquesdelaRed. IntrpretedePHP.Cuandoelusuariosolicitaunapginadesarrolladamedianteestatecnologa,el intrprete de PHP, instalado en el equipo servidor, lee el cdigo de dicha pgina y lo ejecuta.A continuacingeneraunapginaHTMLcomoresultado,yselaentregaalservidorweb,quiensela envaalcliente. Base de datos MySQL. Sirve para obtener informacin almacenada en una base de datos en el servidor.MySQLposeeunmotordedatosmuyrpidotantograbandodatos,comolocalizndolos y recuperndolos. Adems ofrece una gran seguridad sobre la integridad de los datos almacenados. Paramontarelservidorweb,elintrpretedePHPyelmotordebasesdedatosMySQLcontamos con una aplicacin llamada AppServ. Est disponible en la direccin: http://www.appservnetwork.com Pasos:

U.T.1INSTALACINDESERVIDORESDEAPLICACIONESWEB Pgina:2

SeguidamenteinstalamoselmotordebasesdedatosdeMySQL:

U.T.1INSTALACINDESERVIDORESDEAPLICACIONESWEB

Pgina:3

Sinoseinicializadurantelainstalacin,sepuedehacermanualmenteconelarchivo:

CONFIGURACINDELSERVIDOR Hayqueestablecerunpardeparmetros: Primeramentetodoslossitiosdinmicosquerealicemosdebernestaralojadosenunacarpeta especficamentecreadaalefecto,queactuarcomoservidor.Porejemplo,creamosunacarpeta llamada:C:\miswebs. Unavezcreadalaanteriorcarpeta,accedemosalacarpetaAppServydentrodeestaauna llamadaconf,laabrimosconuneditordetextoplanoysustituimoslaslneas: DocumentRoot"c:/miswebs"yunpocomsabajo<Directory"C:/miswebs"> TambinhayqueasegurarsequelalneaServernametienelocalhost. Seguardanloscambiosysetienequereiniciarelordenador. 3.PROCESAMIENTODECDIGO:LENGUAJESDESCRIPTENCLIENTEYSERVIDOR PGINASQUESEPROCESANENELCLIENTE.Sonlasqueseejecutanenelnavegadordelusuario. LENGUAJESWEBDECLIENTE Loslenguajesqueseutilizanparacrearestaspginassonprincipalmente:HTML,Javascript,Visual BasicScript,DHTML,CSSyAppletsdeJava. HTML.ElcdigoHTML,indicabsicamentedndecolocarcadatexto,cadaimagenocadavideoy laformaquetendrnestosalsercolocadosenlapgina. Javascript. Es el lenguaje de programacin del lado del cliente ms utilizado. Con Javascript podemos crear efectos especiales en las pginas y definir interactividades con el usuario. El navegadordelclienteeselencargadodeinterpretarlasinstruccionesJavascriptyejecutarlaspara realizarestosefectoseinteractividades,demodoqueelmayorrecurso,ytalvezelnico,conque cuentaestelenguajeeselpropionavegador. Visual Basic Script. Est basado en Visual Basic, un popular lenguaje para crear aplicaciones Windows.ElmododefuncionamientodeVisualBasicScriptparaconstruirefectosespecialesen pginas web es muy similar al utilizado en Javascript y los recursos a los que se puede acceder tambinsonlosmismos:elnavegador.

U.T.1INSTALACINDESERVIDORESDEAPLICACIONESWEB

Pgina:4

DHTML. No es precisamente un lenguaje de programacin. Ms bien se trata de una nueva capacidad de la que disponen los navegadores modernos, por la cual se puede tener un mayor control sobre la pgina que antes. DHTML nos da ms control sobre la pgina porque los navegadoresmodernosincluyenunanuevaestructuraparavisualizarenpginaswebdenominada capa.Lascapassepuedenocultar,mostrar,desplazar,etc. Para realizar las acciones sobre la pgina, como modificar la apariencia de una capa, seguimos necesitandounlenguajedeprogramacindelladodelclientecomoJavascriptoVBScript. CSS. Son las siglas de Cascading Style Sheets, en espaol Hojas de estilo en Cascada. Es una tecnologaquenospermitecrearpginaswebdeunamaneramsexacta.GraciasalasCSSsomos muchomsdueosdelosresultadosfinalesdelapgina,pudiendohacermuchascosasquenose podahacerutilizandosolamenteHTML,comoincluirmrgenes,tiposdeletra,fondos,colores... Applets de Java. Es otra manera de incluir cdigo a ejecutar en los clientes que visualizan una pginaweb.SetratadepequeosprogramashechosenJava,quesetransfierenconlaspginas webyqueelnavegadorejecutaenelespaciodelapgina. La principal ventaja de utilizar applets consiste en que son mucho menos dependientes del navegador que los scripts en Javascript, incluso independientes del sistema operativo del ordenadordondeseejecutan.Adems,JavaesmspotentequeJavascript,porloqueelnmero deaplicacionesdelosappletspodrsermayor. Como desventajas en relacin con Javascript cabe sealar que los applets son ms lentos de procesar y que tienen espacio muy delimitado en la pgina donde se ejecutan, es decir, no se mezclancontodosloscomponentesdelapginanitienenaccesoaellos.Esporelloqueconlos applets de Java no podremos hacer directamente cosas como abrir ventanas secundarias, controlarFrames,formularios,capas,etc. PGINAS WEB DEL SERVIDOR. Estas pginas descargan al servidor algunos trabajos, ofrecen respuestasinmediatasalasaccionesdelusuarioypermitenlautilizacindealgunosrecursosdela mquinalocal. Las pginas del servidor son tiles en muchas ocasiones. Con ellas se puede hacer todo tipo de aplicacionesweb.Desdeagendasaforos,sistemasdedocumentacin,estadsticas,juegos,chats, etc. Son especialmente tiles en trabajos en los que se tiene que acceder a informacin centralizada,situadaenunabasededatosenelservidor,ycuandoporrazonesdeseguridadlos clculosnosepuedenrealizarenelordenadordelusuario. Son necesarias porque para hacer la mayora de las aplicaciones web se debe tener acceso a muchos recursos externos al ordenador del cliente, principalmente bases de datos alojadas en servidoresdeInternet. LENGUAJESWEBDESERVIDOR PHP, Hypertext Preprocesor. Es un lenguaje de programacin del lado del servidor gratuito e independientedeplataforma,rpido,conunagranlibreradefuncionesymuchadocumentacin. Laspginasqueseejecutanenelservidorpuedenrealizaraccesosabasesdedatos,conexiones enred,yotrastareasparacrearlapginafinalqueverelcliente.Elclientesolamenterecibeuna pginaconelcdigoHTMLresultantedelaejecucindePHP.Comolapginaresultantecontiene nicamentecdigoHTML,escompatiblecontodoslosnavegadores.

U.T.1INSTALACINDESERVIDORESDEAPLICACIONESWEB

Pgina:5

Fue creado originalmente en 1994 por Rasmus Lerdorf, pero como PHP est desarrollado en poltica de cdigo abierto, a lo largo de su historia ha tenido muchas contribuciones de otros desarrolladores. Este lenguaje de programacin est preparado para realizar muchos tipos de aplicaciones web gracias a la extensa librera de funciones con la que est dotado. La librera de funciones cubre desdeclculosmatemticoscomplejoshastatratamientodeconexionesdered. AlgunasdelasmsimportantescapacidadesdePHPson:compatibilidadconlasbasesdedatos mscomunes,comoMySQL,mSQL,Oracle,Informix,yODBC,porejemplo.Incluyefuncionespara elenvodecorreoelectrnico,uploaddearchivos,creardinmicamenteenelservidorimgenes enformatoGIF,inclusoanimadasyunalistainterminabledeutilidadesadicionales.

CGI,CommonGatewayInterface.Eselsistemamsantiguoqueexisteparalaprogramacinde las pginas dinmicas de servidor. Actualmente se encuentra un poco desfasado por diversas razones entre las que destaca la dificultad con la que se desarrollan los programas y la pesada cargaquesuponeparaelservidorquelosejecuta. LosCGIseescribenhabitualmenteenellenguajePerl,sinembargo,otroslenguajescomoC,C++o VisualBasicpuedensertambinempleadosparaconstruirlos. ASP,ActiveServerPages.EslatecnologadesarrolladaporMicrosoftparalacreacindepginas dinmicasdelservidor.ASPseescribeenlamismapginaweb,utilizandoellenguajeVisualBasic ScriptoJscript(JavascriptdeMicrosoft). JSP,JavaServerPages.EncastellanovendraadeciralgocomoPginasdeServidorJava.Es,pues, unatecnologaorientadaacrearpginaswebconprogramacinenJava. LENGUAJEXML. XML,contodaslastecnologasrelacionadas,representaunamaneradistintadehacerlascosas, ms avanzada, cuya principal novedad consiste en permitir compartir los datos con los que se
U.T.1INSTALACINDESERVIDORESDEAPLICACIONESWEB Pgina:6

trabajaatodoslosniveles,portodaslasaplicacionesysoportes.Aspues,elXMLjuegaunpapel importantsimoenestemundoactual,quetiendealaglobalizacinylacompatibilidadentrelos sistemas,yaqueeslatecnologaquepermitircompartirlainformacindeunamanerasegura, fiable,fcil.Adems,XMLpermitealprogramadorylossoportesdedicarsusesfuerzosalastareas importantescuandotrabajaconlosdatos,yaquealgunastareastediosascomolavalidacinde estos o el recorrido de las estructuras corre a cargo del lenguaje y est especificado por el estndar,demodoqueelprogramadornotienequepreocuparseporello. Vemos que XML no est slo, sino que hay un mundo de tecnologas alrededor de l, de posibilidades, maneras ms fciles e interesantes de trabajar con los datos y, en definitiva, un avance a la hora de tratar la informacin, que es en realidad el objetivo de la informtica en general. XML, o mejordicho, el mundo XML no es un lenguaje, sinovarios lenguajes, no esuna sintaxis, sino varias y no es una manera totalmente nueva de trabajar, sino una manera ms refinada que permitirque todas las anteriores se puedan comunicarentre s sinproblemas,ya quelosdatoscobransentido.XMLesinteresanteenelmundodeInternetyelebussiness,yaque existenmuchossistemasdistintosquetienenquecomunicarseentres. 4.COMPROBANDOELFUNCIONAMIENTO Paraprobarqueelservidorfunciona,creamosunarchivollamadopruebaApache.htmconelblock denotas.
<html> <body> Apache funcionando </body> <7html>

ParaprobarquefuncionaPHP,creamoselarchivopruebaPHP.php.
<?php> phpinfo(); ?>

U.T.1INSTALACINDESERVIDORESDEAPLICACIONESWEB

Pgina:7

Siseejecutalaopcinvercdigofuentedelapgina:

U.T.1INSTALACINDESERVIDORESDEAPLICACIONESWEB

Pgina:8

U.T.2INSTALACINDEGESTORESDECONTENIDOS
1.GESTORESDECONTENIDO.CONCEPTOS Unsistemadegestindecontenidos(eninglscontentmanagementsystem,abreviadoCMS)es un programa que permite crear y administrar contenidos, principalmente en pginas web. Consisteenunainterfazquecontrolaunaovariasbasesdedatosdondesealojaelcontenidodel sitio. El sistema permite manejar de manera independiente el contenido y el diseo, adems permitelafcilycontroladapublicacinenelsitioavarioseditores. UnCMSsiemprefuncionaenelservidorwebenelqueestalojadoelportal.Elaccesoalgestorse realiza generalmente a travs del navegador web, y se puede requerir el uso de FTP para subir contenido. Cuando un usuario accede a una URL, se ejecuta en el servidor esa llamada, se seleccionaelesquemagrficoyseintroducenlosdatosquecorrespondandelabasededatos.La pginasegeneradinmicamenteparaeseusuario,elcdigoHTMLfinalsegeneraenesallamada. Normalmentesepredefineenelgestorvariosformatosdepresentacindecontenidoparadarle laflexibilidadalahoradecrearnuevosapartadoseinformaciones. 2.TIPOSDEGESTORESDECONTENIDOSMASUTILIZADOS PlataformasdeGestindeContenidoDrupal(PHP).PoderosoCMSmuyconocidoporlacalidad desucdigoyporlaseguridadquebrinda,esestableydeactualizacincontinua,configuracin sencilla, instalacin gil, importante cantidad de mdulos y temas visuales, excepcional documentacinycomunidadactivaymuyamigable,granconceptodenodo. Mambo(PHP).CMSmuyfcildeusar,peroconposibilidadesunpocolimitadas. Joomla.EsteeselCMSmasusadoeninternet,grandesportalesdetodotiposehanmontadobajo estepoderosogestordecontenido,porsuvariedaddeplantillas,ademsdesuampliacomunidad dedesarrolladoreslibresquesacandiversosmdulosparapoderinstalarlos. TIPOSDEGESTORESDECONTENIDOPARAFOROS SMFSimpleMachinesForum,abreviadoSMF,esungestordecontenidosgratuito.Seencuentra orientadoalacreacindecomunidadesonline,teniendocomoejephpBBesunsistemadeforos gratuito basado en un conjunto de paquetes de cdigo programados en el popular lenguaje de programacin web PHP y lanzado bajo la Licencia pblica general de GNU, cuya intencin es central la gestin de foros. Escrito enteramente en PHP utiliza MySQL la de proporcionar fcilmente,yconampliaposibilidaddepersonalizacin,unaherramientaparacrearcomunidades. TIPOSDEGESTORESDECONTENIDOCMSPARABLOGS WordPress es un sistema de gestin de contenido enfocado a la creacin de blogs (sitios web peridicamenteactualizados).DesarrolladoenPHPyMySQL,bajolicenciaGPL.WordPressseha convertidoenelCMSmspopulardelablogosfera. B2EvolutionesunodelosCMSparacreacindeblogscomoalternativaaWordpress.Disponede temasypluginsvariadosalestilodelosCMSextensibles.
U.T.2InstalacindeGestoresdeContenidos Pgina:1

3.FUNCIONESBSICASDEUNGESTORDECONTENIDOS

Creacindecontenidos.Sepuedengenerarcontenidosgraciasaloseditoresintegradosdelos CMS,setratadeeditoresdeltipoWYSIWYGconlosquesepuedeverelaspectofinaldel documentoamedidaqueseelabora. Gestindecontenidos.Cuandounusuariocreaundocumento,sealmacenaenunabasededatos juntoconotrasinformacionesdeinters.Asmismo,seconsignantambinlosusuariosalosque sehadadodealta,laestructuradelportal,losestilosytemasutilizados,ademsdetodala informacingeneradaapartirdelasfuncionalidadesdelCMS. Publicacindecontenidos.Cuandoelusuariodaporterminadouncontenido,puedepublicarlo enesemismomomentoobienprogramarloparaqueaparezcaenunafechaconcreta. PresentacindelCMS.Sepuedenutilizardesdecualquiernavegadorypermitenestablecerel idioma,elhusohorarioeinclusolamonedadeseada. 4.JOOMLA.REQUERIMIENTODEFUNCIONAMIENTOEINSTALACIN EsunCMSdinmicoquepermitelacreacindesitioswebparalapublicacindenoticias,difusin delainformacindecualquiertipo,portalescorporativos,sitioswebparacomercioelectrnico, etc. Es una aplicacin web que se distribuye con licencia pblica general GPL. En buena parte est escritaenPHPypuededescargarseenelsitiooficialdelproyectohttp://www.joomla.org
Loselementosbsicosparasufuncionamientoson:

BasededatosMySQL.Almacenaentablasdiferenciadastodalainformacindelsitio,as comogranpartedelaconfiguracindelsistema. MotorPHP.Ejecutardenesdebsqueda,almacenamiento,consultaymodificacinsobre la base de datos. Los datos obtenidos se transforman en pginas web que son interpretadas,mostradasporlosnavegadoresyentendiblesparalosusuarios. ServidorHTTPApache. Encuantoalaspectoyfuncionalidad,loselementosbsicosofrecidosporJoomlason: Plantillas(templates).Eslapartedelsoftwarequedeterminalaapariencia,ladisposicindelos mdulos,etc. Extensiones (mdulos y componentes) para generar formularios dinmicos; la gestin de documentos;creargalerasdeimgenesmultimedia;elcomercioelectrnico;foros,blogsychats; calendarios; servicios de directorio; boletines de noticias; el registro de datos; la publicacin de anuncios;lagestindesuscripcin.
Los diferentes requerimientos de funcionamiento y ayuda estn en la pgina web http://ayuda.joomlaspanish.org/ayudajoomla

U.T.2InstalacindeGestoresdeContenidos Pgina:2

INSTALACINDEJOOMLA Unavezquesehadescargadoelpaquetedelsitiowebcorrespondienteyseextraenlosarchivos en una carpeta creada dentro de la que tenemos como localhost (UT 1, pg. 4). Realizamos los siguientespasos:
U.T.2InstalacindeGestoresdeContenidos Pgina:3

Creacindelabasededatos:
U.T.2InstalacindeGestoresdeContenidos Pgina:4

5.ESTRUCTURADELCMSJOOMLA LaestructuradeJoomlasecomponededospartesbiendiferenciadas:frontend(opartepblica)y backend(elcentrodeadministracin). FRONTEND.Constadelossiguienteselementos: LogoJoomla! Menconenlacesalasseccionesdelportal. Bannerpublicitario. Barradenavegacin. Menprincipal. ltimasnoticiasincorporadasenelportal. Contenidosmsvisitados. Zonadondeeladministradormuestraalgunanoticiaocomunicadodeinters. Zonacentralconnoticias. Zonadeencuestas. Zonadeusuariosenlnea. ZonadeenlacesrelacionadosconelproyectoJoomla! Formularioparaelregistrodeusuarios. Zonadesindicacin. Zonadeaccesibilidad. Todasestaszonassonconfigurables. BACKEND.Essoloaccesibleparadeterminadosperfilesdeusuario.Desdelapginaprincipaldel portalwebdeJoomla,eladministradorsepuedeconectardedosformas: 1. Proporcionandoelnombredeusuarioylacontraseadeladministradoralrellenarel formulariodeconexin. 2. SeleccionandolaopcinAdministracindelbloquederecursos.

Apartirdeestemomentoaccedemosavariosbotonesdeaccesorpidoadiferentesaccionesy unabarrademensdesplegable.

U.T.2InstalacindeGestoresdeContenidos

Pgina:5

6.PERSONALIZACINDELAINTERFAZ

PRCTICA1.PERSONALIZACINIDIOMA
Conestaprcticatienesqueconseguirqueelentornoesteenidiomaespaol.Paraellotienesque hacerlospasos: 1.Descargaeinstalacindelasextensionesparaelfrontyparaelback.Ladescargalapuedes hacerdesdeladireccin:http://extensiones.joomlaspanish.org/ 2.Activacindelidiomaespaol. Elaspectofinaldebeser:

7.CONFIGURACINGLOBALYASPECTODEJOOMLA CONFIGURACINDELSITIO Metadatos.Informacinsobrelosdatosdelsitioweb.esimportantedefinirlosparaquelos motoresdebsquedapuedanlocalizarelportal. SEO(SearchEngineOptimization).Procesodeoptimizacindeunsitioyqueconsisteenaplicar diversastcnicasparaquelosbuscadoresdeinternetsitenelportalbasadoenJoomla!enlas primerasposicionesdentrodesuspginasderesultadosenfuncindetrminosyfrasesclave.


U.T.2InstalacindeGestoresdeContenidos Pgina:6

CONFIGURACINDELSISTEMA Configuracindelsistema.Contienelapalabrasecretaqueeslacontraseacifradadel administrador. Parmetrosdeladepuracindeerrores.Permitendepurarelsistemaoelidioma. Parmetrosdelacach.Activanelusodelacachdelnavegadorparaagilizarelaccesoa contenidosyadescargados. Configuracindelasesin.Estableceeltiempoquedurarlasesindelosusuariosregistrados.Al cabodeesetiempo,seforzardenuevoelregistro.


U.T.2InstalacindeGestoresdeContenidos Pgina:7

CONFIGURACINDELSERVIDOR Enestepanelpodemosconfiguraraspectoscomolaposibilidaddecomprimirlaspginas, establecerparaelportalelhusohorario,asignarparmetrosbsicosdeconfiguracindelFTP, configurarlabasededatosyelservidordecorreos.

CONFIGURACINDEPERMISOS Entreotrasopcionespermiteydeniegaelregistrodelosusuariosyactivaonolascuentasdelos nuevosusuarios.

U.T.2InstalacindeGestoresdeContenidos Pgina:8

UNIDAD DE TRABAJO 3: USUARIOS Y GRUPOS. PERFILES. CONTROL DE ACCESOYSEGURIDAD.


Joomla!establecedosgrandesgruposdeusuarios: Usuarios del administrador (backend): son usuarios que pueden acceder a la administracindelportal. Tipos: . Mnager o gestor: En el men Sitio tiene acceso a una parte restringida de las opcionesdelpaneldecontrol,comoelgestormultimedia.EnOpciones,puedeaccedera lostemsdemenperonocrearlosoeliminarlos..Disponedetodoslospermisosparala gestindeloscontenidos. . Administrador: Adems de todos los permisos del mnager, puede ocuparse de la gestindelosmensylosusuarios(exceptoelsperadministrador)yencargarsedela instalacindecomponentesymdulos,aunquenodelasplantillasnidelosidiomas. . Sper administrador: posee acceso total y absoluto a toda la administracin del portal.

PRCTICA1
Crearunusuarioperfilmanageryotroconperfiladministrador. Usuariosdelsitio(frontend):sonusuariosquepuedenaccederadeterminadassecciones delapartepblica. Tipos: . Registered: Puede acceder a las zonas de la parte pblica de Joomla! a las que el administradorasigneesteniveldeacceso.Eselperfildelamayorpartedelosusuarios delportal. . Author: Se le permite enviar artculos, pero no publicarlos ni tampoco editar los escritos por otros usuarios. Su tarea queda pendiente hasta que un administrador los aprueba. . Editor: Puede enviar artculos y editar los de otros usuarios, pero no puede publicarlos. .Publisher:Disponedepermisosparaenviar,modificarypublicarsusartculosolos deotrosusuarios. Aestosusuarioscabeaadirlosannimos,quienesnoseregistranenelportalytienen accesoalaspartesqueeladministradorconfiguracomopblicas(Public). PRCTICA2 Crearunusuarioconelperfil"Registered". Traducealcastellanoelnombredelmduloquepermitelaconexindelosusuarioscon cuentaenelportal.

U.T.4GESTINDEEXTENSIONES
PorextensionesentendemostodoaquelloquerealizaalgunatareaenJoomla!yque,juntoalCore (coraznoncleodeJoomla!),complementanydesarrollantodalapotencialidaddelsistema.Son extensionesloscomponentes,losmdulos,losplugins,losidiomasylasplantillas(templates).

Los Componentes son quiz las aplicaciones ms importantes que juegan un papel fundamental en la gestin de contenidos de Joomla! Son pequeos programas independientesentres,queestnjuntoalncleodeJoomla!,obiensedescarganaparte, yposteriormenteseinstalandesdeelpaneldeAdministracindeJoomla!. Cada componente tiene su propia tabla en la base de datos de Joomla! y tambin sus propios archivos. Esto es precisamente lo que les da una independencia en el funcionamiento y no interfieren, en general, unos con otros. Adems, esto brinda la posibilidaddequepuedenserinstaladosodesinstaladosencualquiermomento,esdecir, el sistema permite un asincronismo temporal en la instalacin/desinstalacin de estas aplicaciones. Hay distintos tipos de componentes y de muy diversas funcionalidades (se designa el nombredeloscomponentesconelprefijo"com_"): ComponentesquefuncionanenelFrontendyenlaAdministracindeJoomla!Ejemplos: com_content,com_weblinks,com_newsfeeds,etc. Componentes que funcionan exclusivamente en la Administracin de Joomla! Ejemplos: com_frontpage,com_login,com_massmail,com_templates,etc. Componentes que funcionan exclusivamente en el Frontend, no son tan comunes, generalmentesoncreadospordesarrolladoresindependientes. Componentes que combinan su funcionamiento con mdulos, generalmente la gran mayora.Ejemplos:com_banners,com_polls,com_login,etc. Los Mdulos son aplicaciones mucho ms simples que los componentes y generalmente son una extensin o complemento de algn componente. Los mdulos muestran informacinsecundaria,simplificadaybrevequetomandelabasededatos.Perotambin tienenfuncionesmsimportantesquellevaracabo:puedenpublicarlosenlacesdelmen, recogerdatosdeaccesomedianteunformulario,etc. Los Plugins son aplicaciones que literalmente interceptan los artculos de contenido (documentosotemsdecomponentes)antesdesermostradosypublicadosenelsistema, y le agregan informacin adicional o lo alteran en forma dinmica, completando as el contenidototalquevaaserentregadoalnavegadordelusuariofinal.Lospluginspueden ser llamados mediante comandos especiales, o se pueden mostrar de forma predeterminadaparaciertoscontenidos/componentes.Originalmente,eltrminoutilizado era Mambot, y era sta la funcin que desempeaban, pero su denominacin cambia porque los plugins ofrecen posibilidades mucho ms amplias, pueden mejorar la funcionalidadenelmbitodelentornodetrabajo. LosIdiomassonpaquetesdearchivosque,unavezinstalados,permitenqueelFrontendy elBackendestexpresadoenunidiomadeterminado. Las Plantillas (Templates) deciden cmo se muestra el espacio web, tanto el Frontend comoelBackend,enelnavegadordelusuario.
1

ComprenderlaestructuradelainterfazvisualdelFrontenddeJoomla!esfundamental.Paraun usuario novel significar poder situar adecuadamente los mdulos que quiere que sean visualizadosenlanavegacinquehadecidido.Peroparaunusuariomedio/avanzado,quequiera manipularplantillasdetercerosocrearlassuyaspropias,esnecesarioquesepaencadamomento cmosituarloquesevisualizarenelFrontend.

GESTINDEPLANTILLAS
EnJoomlaloscontenidosvanporunladoyeldiseoporotro.Encualquiermomentopodremos modificar el diseo de todo (o parte) del sitio Web sin alterar el contenido de los artculos publicadosolaestructuradeseccionesycategoras(organizacininterna). LasplantillasenJoomlasonmuyimportantes,puesdefinirnlaubicacindepequeosprogramas (mdulos) que permitirn hacer operaciones tan importantes como acceder al sitio (login), mostrar ciertos contenidos, banners, ubicar columnas y otros elementos de nuestro sitio Web. Una plantilla bien diseada supondr prcticamente el 70% del triunfo de nuestra Web. De ah queunodelosprimerosprocesosarealizarunavezinstaladoJoomla,traslaconfiguracinbsica, sealaseleccineinstalacindeunaplantilla(yesrecomendablequestavayaaserladefinitiva, oluegotendremosmuchosproblemas) DesdeelGestordePlantillas,alqueseaccedeenelmen"Extensiones>GestordePlantillas" podremosrealizarmuchasoperacionesconlasqueyatenemosinstaladas,peroJoomla,adems permitelainstalacindenuevasplantillasquepodemosdescargargratuitamentedeInternet. POSICIONESDEMDULOSENUNAPLANTILLA Cada plantilla distribuye de forma diferente las distintas zonas de contenidos (mdulos) en diferentesposicionesdentrodelapgina.Aunqueposteriormenteveremosenotrocaptuloqu sonlos"mdulos"yparaqusirven,ahoranosinteresaconocerquecadaplantillatieneunaserie de espacios dedicados a la ubicacin de mdulos de Joomla. Esto es muy importante pues definir la ubicacin de ciertos controles y pequeos programas en nuestra pgina, como el formulariodeacceso,unmen,unaencuesta...Estaszonasestnpredefinidasenlaplantillayno pueden ser modificadas, salvo que tengamos conocimientos en el desarrollo de plantillas (PHP, xHTML,CSS...) Cadaespaciodedicadoaubicarmdulosrecibeunnombrequeloidentificarposteriormenteen el "gestor de mdulos": top, right, left, user1, user2... user32. Cada plantilla tiene sus propios "huecos" y los ubica en posiciones diferentes. En ocasiones reciben nombres similares, aunque cadaplantillapuedeseguirsupropioesquemadeposicionesdemdulos.Porejemplo,sielhueco paramdulosocupalacolumnadeladerecha,aesteespacioseledenominar"right",osiocupa lazonasuperior,seledenominar"top". UnaprcticacomneneldiseodesitiosWebconJoomlaesconocerestosespaciosparaubicar mdulos,puessonmuyimportantes.Avecesesconvenientecontarconunesquemaenpapelde laposicindeestaszonas(lopuedesdibujaramano),paraposteriormenteconocerdndesituar nuestrosmdulos.Hayalgunasplantillasqueacompaanunaimagen"JPG"conlaposicindelas zonasparamdulos.
2

EjemplodeldiseodelaplantillaBizBlue: newsflashload Positiontop1 Positiontop2 Positiontop3 .... Cada"hueco"ozonademdulospermitelainsercindeunoovariosmdulos.

PRCTICASSOBRELAINSERCINDEALGUNOSMDULOSENNUESTRAPLANTILLA
PRCTICA1.Enposition3(Right2)deBizBlueponerunmduloconvisualizacindefotos aleatorias.PASOS: Buscarextensineinstalarla. Administradordemdulos.NuevoyseleccionarTipodemdulo. Ttulo,posicin,subirfotos,... PRCTICA2.Enposition4(Right3)deBizBlueponerunmdulocalendario.PASOS: Buscarextensineinstalarla. Administradordemdulos.NuevoyseleccionarTipodemdulo. Ttulo,posicin,... PRCTICA3.Enposicinnewflashload(bannersload)deBizBlueponerotromdulodefotos aleatorias.Puestoqueyaestinstaladalaextensin,pasamosdirectamenteacrearelnuevo mdulo. PRCTICA4.Quitarlogoconpropiedadesdelaplantilla. PRCTICA5.Cambiarfotodecabeceradesdeeldirectoriocorrrespondiente. PRCTICA6.CambiarelttulodelMenprincipalydelformulariodeacceso.SeaccedeaGestin deMdulosysecambiaelTtulo.

U.T.5GESTINDECONTENIDOS
Enquordensecreanloscontenidos?Cmoempezar?ycmoseguir? UnavezqueyaestJoomlainstalado,configuradoyfuncionando,debescomenzarporordende importanciaa: 1. Definir y crear los "contenedores" de primer orden (los que engloban todo): las CATEGORAS. 2. Crear los "contenedores" de segundo orden (que pertenecen a las CATEGORAS): las SUBCATEGORAS. 3. Cargarlainformacinpertenecientesasuspropiassecciones/categoras. 4. Definir y crear la navegabilidad o "mens" (los accesos que van a tener los navegantes/usuariosaesosdocumentoswebpublicados). Lospuntos3y4(inclusolospuntos1,2,3,y4)puedeniralternndose.Peromuchosprincipiantes tratandecrearlosmensolosenlacesprimero,yluegoloscontenidos.Notardanendarsecuenta que"nosabencmohacer".Estoesunerror,elordencorrectoesas:

creacin y publicacin de categora >> creacin y publicacin de subcategora >> creacinypublicacindelosdocumentos>>construccindelmendenavegacin


CONTENIDOS Desdeelpuntodevistadelagestindecontenidos,Joomla!permiteunaclasificacindeartculos de contenidos organizados dentro de categoras, y pueden ser manipulados fcilmente para modificarsuclasificacinylanavegacinqueserealizaratravsdeellos. Se puede necesitar que un determinado artculo de contenido no est definido dentro de una seccin/categora.Hablamos,portanto,decontenidosnoclasificados. Aparte, se puede decidir que haya contenidos archivados. Archivar un artculo de contenido suponedecidirquesigueactivo,peronoseencuentraclasificadodentrodelacategoraoriginal. De hecho, supone crear una estructura paralela de categoras, identificadas de igual forma, e incluso,permiterealizarvnculosenlosmensaestascategorasoartculosarchivados. Tomarbuenasdecisionesenlascategorasysubcategorasquesirvanparaclasificaryvisualizarlos contenidos es, sin duda, una de las tareas que deben ser mejor meditadas para poder tener un buensitioweb. Loscontenidospuedensercreados,editadosypublicadosdesdeelFrotnendydesdeelBackend, pero las opciones de creacin de categoras para su clasificacin, ordenacin, archivado y eliminacindebensergestionadasdesdeelBackend. MENS Lanavegacinyelaccesoalosrecursosenelsitiowebserealizanatravsdelanavegacinquese decideenlosmens.

LomensenJoomla!songruposdevnculosacategoras,artculosdecontenido,componenteso pginasexternas. Los mens son mdulos, hay distintos tipos de mens y pueden ser creados todos los que necesitemos.Inclusopuedenmostrarsediferentesmensdependiendodelapginaporlaquese est navegando. Cada men debe tener un nombre de identificacin nico usado internamente porJoomla!.Unmensloesvisibleenelsitiowebsielcorrespondientemdulomod_mainmenu esthabilitado(publicado). Joomla! utiliza un nico mdulo de men, llamado internamente mod_mainmenu. Los mens quesehancreadoenlainstalacinestnasociadosainstanciasdeestemdulo.Ycadavezquese creaoeliminaunmenseactasobrelainstanciadeeste. Pensardetenidamentequmens,conquelementosdemenydndesernaccesiblesypara quusuarios,serunapartedeterminanteenlaelaboracindenuestrositioweb,sinduda. CREACINDEUNMENENJOOMLA1.6 ElprocesodecreacindeunmenenJoomla1.6noesunatareasencilla.Enrealidad,esunade lasmscomplejas,dadoquesedebenseguirunaseriedepasosylasconfiguracionesrequierende ingresarunabuenacantidaddeparmetros,losquedebensercomprendidosensutotalidadpara obtenerbuenosresultados. Lacomplejidaddelsistemadecreacindemensderivadelaimportanciadelosmismosydela cantidaddefuncionesquecumplen.Elprocesodecreacindeunmenconstadetrespasos: 1. Crear el men, que consiste simplemente en crear el espacio, el mdulo, donde se colocarnloselementosdelmen. 2. Creacindeloselementosdemen. 3. Ubicacinypublicacindelmdulomen. Creacindelmdulomen La creacin de un nuevo men tiene como primer paso la instalacin de un mdulo de caractersticas especiales, como son los mens. Para cumplir este paso, deberemos acceder al GestordeMens,empleandoelconocorrespondientedelPaneldeControloatravsdeMens /GestordeMensdelmenprincipaldelAdministradordeJoomla1.6. Laventanaqueseapareceresunlistadodelosmensexistentes.Estelistado,comopodemos ver en la imagen de abajo, tiene en el eje vertical la lista de todos los mens que contiene la pgina.Elejehorizontalestdivididoencolumnas,quesonlassiguientes: 1. Casillasdeverificacin,mediantelascualessepuedenseleccionarunoomsmenspara realizaraccionesenbloque,comoborrar.Encasodequeserealiceunaseleccinmltiple y se emplee una accin que solo puede realizarse en un men a la vez, como editar, el menqueseabrirparalaedicinserelltimodelalistaseleccionada. 2. Ttulo y tipo de men, contenidos en la misma celda. Adems de dar la informacin mencionada, son enlaces que dirigen, el ttulo, al gestor de elementos de men con los elementos filtrados para este men en forma exclusiva, y el tipo de men dirige a la ventanadeedicindemenscorrespondienteaestemismomen. 3. Nmerodeelementosdemen,columnaqueasuvezestdivididaentrescolumnas,que informan cada una de ellas, la cantidad de elementos publicados, los elementos no publicados y la cantidad de elementos que se encuentran en la papelera. Cada uno de estos nmeros, tambin son enlaces que dirigen al gestor de elementos de men, que mostrar solo los elementos que corresponden a este men y que se encuentran en el estadodepublicacinquecorresponde.

4. Mdulos vinculados al men. Esta es otra de las novedades ms importantes con que cuenta Joomla 1.6 respecto de las versiones anteriores. Con un mismo men pueden crearsemsdeunmdulo,loquepermitequeendiferentespginas,elmenseaubicado endiferentesposiciones,comoyaveremosmsadelante.EstodotaaJoomla1.6deuna granflexibilidadenlapresentacindelaspginas. 5. Informacindelnmerodeidentificacindelmen(ID). Paracrearunnuevomen,deberemoshacerclicenelbotnNuevodelabarradeherramientas queseencuentraenlapartesuperiordellistado.Conesto,accedemosalasiguienteventana:

Enesteformulario,encontramosdoscamposobligatoriosyunoopcional.Enelprimercampose debe colocar el ttulo del men; en el segundo, el tipo de men; un ltimo campo opcional, permiteinsertarunadescripcindelmen. Creacindeelementosdemen Para crear elementos de men, podemos acceder de varias formas al gestor de elementos de men.Enprimerlugar,desdelapestaaubicadaenlapartesuperiordelgestordemens,que permiteintercambiarlasvistasconelgestordeelementosdemen.Comoyasemencionantes, tambinpuedeaccedersealoselementosdemendeunmenespecficoatravsdelttulodel mendellistadodemens. Cuandoestamoscreandoloselementosdeunmenespecfico,lavamsdirectadeaccedera ellos es la ltima. En la parte superior del listado de elementos, se encuentra un buscador que permitefiltrarlasbsquedasporniveldeacceso,estadodepublicacin,pormen,pornivelde menyporlenguaje,paraelcasodequeoptemosporeditarelementoscorrespondientesavarios mensdiferentes. Paragenerarunnuevoelementodemen,debemoscliquearenNuevo,abrindoselasiguiente ventana:

Enlaimagenvemosquelaventanaestdivididaentressecciones,laprincipal,alaizquierda,y dospestaasdesplegablesubicadasaladerecha. Enlaseccindelaizquierdaseencuentranlosdatosfundamentalesdelelemento.

El primer campo es el que podremos seleccionar el tipo de elemento. Cuando hacemos clic en Seleccionar,seabrelasiguienteventana:

Enestalistadetiposdeelementosdemen,nosencontramosconvariostiposdeelemento,que son Contactos, Feed de Noticias, Enlaces Web, Artculos, Bsquedas, Gestin de Usuarios, Wrapper(especiedeIFramequepermitemostrarotrositiowebdentrodelapgina). Hayuncampottulodelmenuncampoenelquesepuedeintroducirunalias,quepuedeser utilizado, entre otras funcionalidades, para ser utilizado en otros mens. A continuacin, un campopermitelaintroduccindenotas,queserefiereacualquieranotacinquepuedaresultar til. Enelcamposiguientesemuestraellinkdelelemento,quepuedesereditadodeformatalquese genere una URL ms amigable que las que Joomla 1.6 genera por defecto. En las listas desplegablesqueseencuentranacontinuacin,esposibleseleccionarelestadodepublicacin,el niveldeacceso,elmenalquecorresponde,elementopadreparaelcasodequesetratedeun elementodesubmen,eltargetolaformaenqueseabrirelobjetivo(mismaventana,nueva ventanaconnavegacinonuevaventanasinnavegacin). Debajoseencuentradosbotonesderadioquepermitenhacerquelapginaalaqueseaccede desdeelelementoeslapginapordefectoopginaprincipal.Estafuncinpermitemodificarla pginadeiniciodelsitio. Luegoencontramosdoslistasdesplegablesqueposibilitanseleccionarelidiomaylaplantillacon que se mostrar. Esto tambin es novedad en Joomla 1.6, y habilita a la utilizacin de varias plantillasenunmismositio,ascomomltipleslenguajes. Tiposdeelementodemen Dentrodecadatipodeelementodemen,nosencontramoscondistintostiposdepresentacin deloscontenidos.Loscontactospuedenpresentarsedelassiguientesformas: Listadodecategoras:muestraunlistadodelascategorasdecontacto. Listadecontactosenunacategora. Contactoindividual. Contactosdestacados. Losfeeddenoticiaspuedenmostrarsedelassiguientesformas: Listadetodaslascategorasdefeeddenoticias. Listadefeedsdenoticiasdeunacategora. Unfeeddenoticiasenparticular. Losenlacestambinpuedensermostradosentresformas: Listadodetodaslascategoradeenlaces. Listadeenlacesdentrodeunacategora. Envo de enlaces: muestra un formulario con el que se pueden enviar enlaces desde el frentedelapgina. Loselementosrelacionadosconlosartculosmuestranlossiguientestipos: Artculos archivados: en esta vista se muestran todos los artculos que se encuentran archivados. Artculoindividual:muestraunnicoartculocuandoseaccededesdeesteelemento. Listadodecategoras:muestratodaslascategorasdeartculos. Blogdecategora:Muestralaintroduccindelosartculosdeunacategoraenformatode blog,permitiendoconfigurarsisemostrarnenunaomscolumnas. Listadeunacategora:Muestratodoslosartculosdeunacategoraespecfica. Artculosdestacados. Crear artculo: Permite la creacin de un artculo desde el frente de la pgina. Esta funcionalidadesnuevaenJoomla1.6,yestespecialmentepensadaparalosusuariosque tenganpermisosdeautor.

Cuando se selecciona Bsqueda como tipo de elemento, lo que se muestra al hacer clic en el elemento es el listadosurgido de una bsqueda. Esto resulta especialmente tilpara presentar, porejemplo,losartculosrelacionadosconunapalabraclave. Loselementosrelacionadosconlagestindeusuarios,brindanaccesoadistintasfuncionalidades yutilidadespropiasdelosusuarios. Formulariodeaccesoparausuariosregistrados. Accesoalperfildeusuario. Pginadeedicindeperfildeusuario. Formularioderegistro. Recordatoriodenombredeusuario. Restablecimientodecontrasea. Cuando se selecciona un elemento de men tipo Wrapper, lo que aparece en la pgina es un IframedeunaURLespecificadaenlaconfiguracindelelementodemen. Los links del sistema son utilidades que permiten acceder a distintas funcionalidades, como enlacesexternosointernos,unaliasdeelementodemen(esdecir,unacopiadeunelemento contenidoenotromen)ounseparadordetexto. Otrasopciones:

AladerechadelaventanaNuevoElementodeMen,nosencontramoscondospestaasque abren dos formularios desplegables. En el primero de estos formularios se pueden introducir metadatosopcionales.Elmanejodeestoselementospuedencontribuirenelposicionamientode lapginaenbuscadores.

El primer campo corresponde a una descripcin del ttulo del enlace del men. Luego, la posibilidaddeinsertarunestiloCSSpropioalenlacedelmen.Tambinesposibleinsertaruna imagen del men, mediante el empleo de un enlace que se ubicar en el campo existente, o tambinseleccionarunaimagenubicadaenalgunadelascarpetasdelainstalacindeJoomla1.6.

2RMDULO:IMPLANTACINAPLICACIONESWEB

2011/2012

UNIDADDETRABAJO7:INICIACINALAPROGRAMACINDEDOCUMENTOSWEB UTILIZANDOLENGUAJESDESCRIPTDESERVIDOR
1.CONCEPTOSYCLASIFICACIN PGINASWEBDINMICAS Llamaremos dinmicas a las pginas cuyos contenidos s pueden ser modificados de forma automtica o mediante la intervencin de un usuario bien sea desde el cliente y/o desde el servidor. Paraqueesasmodificacionespuedanproducirseesnecesarioquealgooalguienespecifique:qu, cmo,cundo,dndeydequformadebenrealizarse,yqueexistaotroalgooalguiencapazde acceder,interpretaryejecutartalesinstruccionesenelmomentopreciso. Igualqueocurreenlavidacotidiana,lasespecificacionesylasinstruccionesrequieren:unlenguaje paradefinirlas;unsoporteparaalmacenarlasyunintrpretecapazdeejecutarlas. Scripts Se llama script a un conjunto de instrucciones escritas en un lenguaje determinado que van incrustadas dentro de una pgina WEB de modo que su intrprete pueda acceder a ellas en el momentoenelqueserequierasuejecucin. Cuando se incrustan scripts en una pgina WEB empiezan a convivir en un mismo documento informacionesdestinadasadistintosintrpretes. Por una parte, el cdigo HTML que ha de ser interpretado por el navegador, y por la otra, los scriptsquehandeserejecutadosdependiendodellenguajeenelquehayansidoescritosporsu intrpretecorrespondiente. La manera de diferenciar los contenidos es delimitar los scripts marcando su comienzo con una etiquetadeapertura<script>ysealandoelfinalconunaetiquetadecierre</script>. LoquenoestcontenidoentreesasetiquetasseconsiderarcdigoHTML. La posibilidad de insertar en un mismo documento scripts desarrollados en distintos lenguajes obligaaespecificarculsehautilizadoencadacaso,paraqueenelmomentoenelquevayana serejecutadosseinvoqueelintrpreteadecuado. Paraello,dentrodelapropiaetiquetadeapertura(<script>)seinsertaunareferenciaaltipode lenguajeconestasintaxis:language="nombre" Porejemplo:
<script language="PHP"> ...... ...... instrucciones .. ...... </script> indicara que las instrucciones estn escritas con la sintaxis de PHP. Por el contrario, en este otro supuesto: <script language="JavaScript"> ...... ...... instrucciones .. ...... </script>
UT7:INI.ALAPROG.DEDOCUMENTOSWEBUTILIZANDOLENGUAJESDESCRIPTDESERVIDOR Pagina:1

2RMDULO:IMPLANTACINAPLICACIONESWEB

2011/2012

ParaelcasoconcretodePHP,existeunasintaxisalternativa,muchomscmodayqueeslaque seusahabitualmente.Eslasiguiente:
<? ...... ......instrucciones.. ...... ?>

<?harlamismafuncinque<scriptlanguage="PHP">y?>serequivalentea</script>. Lenguajesdelladodelservidor Unlenguajeesdelladodelservidorcuandolaejecucindesusscriptsseefecta,porinstanciade este el servidor, antes de dar respuesta a la peticin, de manera que el cliente no recibe el documentooriginalsinoelresultantedeesainterpretacinprevia. Cuando se usan estos tipos de lenguaje el cliente recibe un documento en el que cada script contenidoeneloriginalhabrsidosustituidoporlosresultadosdesuejecucin. Estoesalgoatenermuyencuenta,porque,enestecaso,losusuariosnotendrnlaposibilidadde visualizarelcdigofuente,mientrasquecuandosetratadelenguajesdelladodelclientesiempre esposiblevisualizarlosscripts,bienseadeformadirectamirandoelcdigofuentedelapgina recibidaoleyendoelcontenidodeficherosexternosvinculadosaellaquesonbastantefciles deencontrarenlacachdelnavegador. Lautilizacindeestetipodescriptsrequierequeelintrpretedellenguajeseaaccesibleestdel ladodesdeelpropioservidor.Cmoresuelvesusdudaselservidor? Dado que en unos casos el servidor debe entregar el documento original pginas estticas o pginasdinmicasenlasqueseusanlenguajesdelladodelclientemientrasqueenotroscasos pginasdinmicasusandolenguajesdelladodelservidortienequedevolverelresultadodela ejecucindelosscripts,esrazonablequetepreguntes:cmosabeelservidorloquedebehacer encadacaso?Larespuestaessimple.Esohayquedecrselo.Yseledicedeunaformabastante simple.Seindicaalponerlaextensinaldocumento. Sienlapeticinsealudeaundocumentoconextensin.htmo.htmlelservidorentenderque esapginanorequierelaintervencinpreviadeningnintrpretedesuladoyentregarlapgina tal cual. Si en esa peticin se aludiera a una extensin distinta .php, por ejemplo el servidor entenderaqueantesdeservirlapginadebeleerlayrequeriralintrpretedePHPqueejecute losscriptsdesarrolladoseneselenguaje(encasodequeloscontuviera)ydevolveraalclienteel documentoqueresultaradelaseventualesejecucionesdetalesscripts. RequisitosparaelusodellenguajePHP Deacuerdoalocomentadoenlosprrafosanterioresyenlosesquemasquetenemosladerecha, elusodellenguajePHPrequieretenerinstaladoyconfigurado: Unsoftwaredeservidor configuradoparainteractuarconelintrpretedePHPquesoporteelprotocoloHTTPyqueen nuestrocasosereldenominadoservidorApache. ElintrpretedePHP.
UT7:INI.ALAPROG.DEDOCUMENTOSWEBUTILIZANDOLENGUAJESDESCRIPTDESERVIDOR Pagina:2

2RMDULO:IMPLANTACINAPLICACIONESWEB

2011/2012

Unsoftwaredeservidordebasesdedatoscapazdesergestionadomediantefuncionespropias dePHP. UtilizaremoselservidordebasesdedatosconocidocomoMySQL.

2.INSTALACINDELEDITORDEPHP InstalacindeleditorPhpCoderPro! A lo largo del curso va a sernos de gran utilidad el uso un editor de textos que nos permita identificarlosnmerosdelneadenuestrosscriptsyquealaveznosayudemedianteresaltado detextosadepurarlasintaxis. Existen multitud de editores y podrs utilizar a tu gusto este o cualquier otro que uses habitualmente. El hecho de sugerirte este obedece a al hecho de que es gratuito, bastante completo,consumepocosrecursosysevaactualizandoperidicamente. 3.PGINASPHP Las pginas PHP pueden ser pginas web normales a las que se cambia la extensin, poniendo .phpenvezde.htm.html. Enunapginacuyonombretengaporextensin.phpsepuedeninsertarinstruccionesescritas enlenguajePHPanteponiendo<?alaprimerainstruccinyescribiendodespusdelaltima?>. Acadaunodeestosbloquesdeinstruccioneslellamaremosunscript. No existe lmite en cuanto al nmero de scripts distintos que pueden insertarse dentro de una pgina.
UT7:INI.ALAPROG.DEDOCUMENTOSWEBUTILIZANDOLENGUAJESDESCRIPTDESERVIDOR Pagina:3

2RMDULO:IMPLANTACINAPLICACIONESWEB

2011/2012

4.SINTAXIS LaprimerainstruccinPHPqueconoceremosseresta:
echo "un texto..";

LainstruccinechoseguidadeuntextoentrecomilladoharqueelPHPescribaenlapginaweb resultantelocontenidoenesacadenadetexto. Alfinaldecadainstruccindebemosinsertarsiempreunpuntoycoma(;) El(;)indicaraPHPqueloquevieneacontinuacinesunanuevainstruccin. Parafacilitarladepuracinlosscriptsnosuelenescribirsedosinstruccionesenunamismalnea.


print "un texto..";

La instruccin print tiene una funcin similar no es exactamente la misma a la descrita para echo.
print ("un texto..");

Esta es otra posibilidad la ms habitual de utilizar print. Aqu encerramos entre parntesis la cadena que pretendemos que aparezca impresa en la pgina web. El hecho de que utilicemos parntesisnonosevitatenerqueencerrarlacadena(texto)aimprimirentrecomillas. Comillasdentrodecomillas Existendostiposdecomillas:dobles"(SHIFT+2)ysencillas'(tecla?enminsculas). Cuando es preciso anidar comillas deben utilizarse tipos distintos para las exteriores y para las interiores. Paraqueunaetiquetaechointerpreteunascomillascomotextoynocomoelfinaldelacadena esnecesarioanteponerlesunsignodebarrainvertida(\). Enningncasoniconechoniconprintestpermitidosustituirlascomillasexteriores(lasque encierranlacadena)por\".EstasintaxissoloesvlidaparaindicaraPHPquedebeinterpretarlas comillascomouncarcterms. LaprimerapginaenPHP Observemos este cdigo fuente. Como vers, se trata de una pgina web muy simple que no contieneningnscriptPHP.Hemosguardadoesapginaconelnombreejemplo1.htmlyluegola hemosvueltoaguardarsinmodificarnadaensuscontenidoscomoejemplo1.php.
<html> <head> <title>Aprendiendo PHP</title></head> <body> Esta es una pgina supersimple </body> </html>
UT7:INI.ALAPROG.DEDOCUMENTOSWEBUTILIZANDOLENGUAJESDESCRIPTDESERVIDOR Pagina:4

2RMDULO:IMPLANTACINAPLICACIONESWEB

2011/2012

Sivisualizamosambosejemplosveremosquelosresultadossonidnticos. LosprimerosscriptPHP Editemos la pgina anterior (ejemplo1.php) y aadmosle nuestra primera etiqueta PHP guardndolacomoejemplo2.php.Esteseraelcdigofuente:
<html> <head> <title>Aprendiendo PHP</title></head> <body> Esta es una pgina super simple <? echo "Aparecer esta linea?"; ?> </body> </html>

Veamosahoraunejemploconlasdiferentesopcionesdeusodelascomillas(ejemplo3.php):
<html> <head> <title>Aprendiendo PHP</title></head> <body> <? /* Las instrucciones PHP son las que aparecen en rojo. Las etiquetas en azul intenso son el cdigo HTML. Todo lo que aparece en este color son lneas de comentario de las que hablaremos ms adelante. Cuando rescribas estos primeros scripts bastar que incluyas las instrucciones escritas en rojo */ /* ponemos <br> al final del texto para que cuando se aparecer en una lnea diferente */ # aqu utilizamos solo unas comillas echo "Este texto solo lleva las comillas de la instruccin<br>"; # aqu anidaremos comillas de distinto tipo echo "La palabra 'comillas' aparecer entrecomillada<br>"; # esta es otra posibilidad invirtiendo el orden de las comillas echo 'La palabra "comillas" aparecer entrecomillada<br>'; # una tercera posibilidad en la que utilizamos un mismo # tipo de comillas. Para diferenciar unas de otras anteponemos # la barra invertida, pero esta opcin no podramos utilizarla # al revs. # No podramos poner \" en las comillas exteriores. echo "La palabra \"comillas\" usando la barra invertida<br>"; ?> </body> </html>

PRCTICA1
CreaunsubdirectorioenelLOCALHOSTdetuservidoryponlecomonombrepracticas.Escribecon tu editor un script similar al ejemplo3.php utilizando print y print() en vez de echo. Guarda el documentoenlacarpetapracticasconelnombrepractica1.phpycompruebasufuncionamiento. Recuerdaqueparavisualizarlodebersescribirentunavegador:
UT7:INI.ALAPROG.DEDOCUMENTOSWEBUTILIZANDOLENGUAJESDESCRIPTDESERVIDOR Pagina:5

2RMDULO:IMPLANTACINAPLICACIONESWEB

2011/2012

http://localhost/practicas/practica1.php LNEASDECOMENTARIO Porquusarlneasdecomentario? Aprimeravistapuedenparecerintiles.Paraqurecargarlaspginasconcontenidosquenose vanaverniejecutar? Laslneasdecomentariosirvenparapoderrecordarenunfuturoquesloquehemoshechoal escribirunscriptyporquraznlohemoshechoas. Amedidaquevayamosavanzandoversqueenmuchoscasostendremosqueaplicarestrategias individualespararesolvercadaproblemaconcreto. Cuandonecesiteshacerunacorreccinounamodificacinalcabodeuntiempoversqueconfiar en la memoria no es una buena opcin. Es mucho mejor utilizar una lnea de comentario que confiarenlamemoria. Para insertar comentarios en los scripts de PHP podemos optar entre varios mtodos y varias posibilidades: Unasolalnea Bastacolocarlossmbolos//alcomienzodelalneaodetrsdelpuntoycomaquesealaelfinal deunainstruccin.Tambinsepuedeusarelsmbolo#encualquieradelasdosposiciones. Variaslneas Siuncomentariovaaocuparmsdeunalneapodremosescribir/*alcomienzodelaprimerade ellasy*/alfinaldelaltima.Laslneasintermediasnorequierendeningntipodemarca. Los comentarios para los que usemos la forma /* ... */ no pueden anidarse. Si, por error, lo hiciramos,PHPnosdarunmensajedeerror. Ensayandolneasdecomentario(ejemplo4.php)
<HTML> <HEAD> <TITLE>Ejemplo 4</TITLE> <BODY> <? // este comentario no se ver en la pgina echo "Esto se leer <BR> "; // Esto no se leer /* este es un comentario de mltiples lneas y no se acabar hasta que no cerremos as.... */ echo "Este es el segundo comentario que se leer<BR>"; # Este es un comentario tipo shell que tampoco se leer # Este obviamente tampoco echo ("Aqu el tercer texto visible"); #comentario invisible /* Cuidado con anidar /* comentarios
UT7:INI.ALAPROG.DEDOCUMENTOSWEBUTILIZANDOLENGUAJESDESCRIPTDESERVIDOR Pagina:6

2RMDULO:IMPLANTACINAPLICACIONESWEB
multilnea con estos*/ a PHP no le gustan */ ?> </body> </html>

2011/2012

Alejecutarlonosdarunerror.Estoesunamuestra,delaimportanciaquetieneelevitaranidar loscomentarios Enelejemplo4ahemosquitadoel/*quevadelantedecomentariosyel*/quevadespusde multilneaconestosyfuncionaperfectamente.


<HTML> <HEAD> <TITLE>Ejemplo 4a</TITLE> <BODY> <? // este comentario no se ver en la pgina echo "Esto se leer <BR> "; // Esto no se leer /* este es un comentario de mltiples lneas y no se acabar hasta que no cerremos as.... */ echo "Este es el segundo comentario que se leer<BR>"; # Este es un comentario tipo shell que tampoco se leer # Este obviamente tampoco echo ("Aqu el tercer texto visible"); #comentario invisible /* Cuidado con anidar a PHP no le gustan */ ?> </body> </html>

PRCTICA2
Escribe un script en el que se utilicen las funciones print, print() y echo aadiendo con los diferentesformatoslneasdecomentarioqueexpliquenlasintaxisdecadaunadelasfunciones. Gurdalocomopractica2.phpeneldirectoriopracticasycompruebasufuncionamiento. CONSTANTES Unaconstanteesunvalorunnmeroounacadenaquenovaasermodificadoalolargodel procesodeejecucindelosscriptsquecontieneundocumento. Paramayorcomodidad,acadaunodeesosvaloresseleasignaunnombre,demodoquecuando vayaaserutilizadobasteconescribirsunombre. Cuandoponemosnombreaunaconstantesedicequedefinimosesaconstante.
UT7:INI.ALAPROG.DEDOCUMENTOSWEBUTILIZANDOLENGUAJESDESCRIPTDESERVIDOR Pagina:7

2RMDULO:IMPLANTACINAPLICACIONESWEB

2011/2012

Cmodefinirconstantes? EnPHPlasconstantessedefinenmediantelasiguienteinstruccin:
define("Nombre","Valor")

Los valores asignados a las constantes se mantienen en todo el documento, incluso cuando son invocadasdesdeunafuncin. Noesnecesarioescribirentrecomillaslosvaloresdelasconstantescuandosetratadeconstantes numricas. Si se realizan operaciones aritmticas con constantes tipo cadena, y su valor comienza por una letra,PHPlesasignavalorcero. Si una cadena empieza por uno o varios caracteres numricos, al tratar de operarla aritmticamentePHPconsiderarnicamenteelvalordelosdgitosanterioresalaprimeraletrao carcternonumrico. Elpuntoentrecaracteresnumricosesconsideradocomoseparadordepartedecimal. Talcomopuedesverenelcdigofuentedelejemploquetienesmsadelante,esposibledefinir constantesalasqueseasignecomovalorelresultadodeunaoperacinaritmtica. Medianteunasolainstruccinechosepuedenpresentar(enlaventanadelnavegadordelcliente) deformasimultneavariascadenasdecaracteresy/oconstantesyvariables.Bastaconponerlas unaacontinuacindeotrautilizandounacomacomoseparadorentrecadaunadeellas. Laformaanteriornoeslanicanilamshabitualdeenlazarelementosmediantelainstruccin echo. Si en vez de utilizar la coma usramos un punto (el concatenador de cadenas) conseguiramoselmismoresultado. Cuandoenlacemoselementosdistintoscadenas,constantesy/onmeroshemosdetenermuy encuentalosiguiente: Cadaunadelassucesivascadenasdebeirencerradaentresuspropiascomillas. Losnombresdeconstantesnuncavanentrecomillas. Lasinstruccionesprinttambinpermitenconcatenarcadenasenunamismainstruccin.Eneste caso solo es posible usar el punto como elemento de unin. Si pusiramos comas como hacamosconechoPHPnosdaraunerror. Veamosunejemplodeconstantes(ejemplo5.php)
<HTML><HEAD><TITLE>Constantes</TITLE></HEAD> <BODY> <? /*DefiniremoslaconstanteEurPtayleasignaremoselvalor166.386*/ define("EurPta",166.386); /*DefiniremoslaconstantePtaEurasignndoleelvalor1/166.386 Enestecasoelvalordelaconstanteeselresultado delaoperacinaritmticadividir1entre166.386*/ define("PtaEur",1/166.386); /*DefinimoslaconstanteCadenasyleasignamoselvalor:
UT7:INI.ALAPROG.DEDOCUMENTOSWEBUTILIZANDOLENGUAJESDESCRIPTDESERVIDOR Pagina:8

2RMDULO:IMPLANTACINAPLICACIONESWEB 12Estaconstanteesunacadena*/ define("Cadena","12Estaconstanteesunacadena"); /*DefinimoslaconstanteCadena2yleasignamoselvalor: 12.54Constanteconpuntodecimal*/ define("Cadena2","12.54Constanteconpuntodecimal"); /*Comprobemoslosvalores. Observalanuevaformaenlaqueutilizamosecho Lohacemosenlazandovariascadenasseparadascon puntoy/ocoma,segnsetratedeechoodeprint*/ echo"ValordelaconstanteEurPta:",EurPta,"<BR>"; echo"ValordelaconstantePtaEur:".PtaEur."<BR>"; print"ValordelaconstanteCadena:".Cadena."<BR>"; print"ValordelaconstanteCadenaxEurPta:".Cadena*EurPta."<br>"; print"ValordelaconstanteCadena2xEurPta:".Cadena2*EurPta."<br>"; echo"Conecholosnmerosnonecesitanirentrecomillas:",3,"<br>"; print"Enelcasodeprintsisonnecesarias:"."7"."<br>"; print("inclusoentreparntesisnecesitanlascomillas:"."45"."<br>"); print"Solohayunaexcepcinenelcasodeprint."; print"Silosnmerosvanenunprintindependientenonecesitancomillas"; print23; #Pondremoslaetiquetadecierredelscriptyescribiremos #unalneadecdigoHTMAL ?> <br>Ahoraveremoslosmismosresultadosusandolafunctionprueba<br><br> <? #Estamosdentrodeunnuevoscriptabiertoporel<?anterior /*Escribiremosunafuncinalaque(tenemosqueponerlesiempreunnombre) vamosallamarprueba()*/ functionprueba(){ echo"ValordelaconstanteEurPta:".EurPta."<BR>"; print"ValordelaconstantePtaEur:".PtaEur."<BR>"; echo"ValordelaconstanteCadena:",Cadena,"<BR>"; print("ValordelaconstanteCadenaxEurPta:". Cadena*EurPta."<br>"); print("ValordelaconstanteCadena2xEurPta:". Cadena2*EurPta."<br>"); } #Lasfuncionessoloseejecutancuandosoninvocadas
UT7:INI.ALAPROG.DEDOCUMENTOSWEBUTILIZANDOLENGUAJESDESCRIPTDESERVIDOR

2011/2012

Pagina:9

2RMDULO:IMPLANTACINAPLICACIONESWEB /*Lafuncinanteriornoseejecutarhastaqueescribamos unalneacomoestadeabajoenlaqueponemos nicamenteelnombredelafuncin:prueba() */ ?> <? prueba(); ?> </body> </HTML>

2011/2012

PRCTICA3
Escribe un script (gurdalo como practica3.php) en el que se definan dos constantes, una numrica y otra de cadena y en el que mediante la las opciones print y echo aparezca en la pgina web resultante un comentario sobre el tipo de cada una de ellas seguido de su valor. Intentaconseguirqueloselementosconcatenadosaparezcanenlapresentacinseparadosporun espacio. VARIABLES PodramosdecirqueesunespaciodelamemoriaRAMdelordenadorquesereservaalolargo deltiempodeejecucindeunscriptparaalmacenarundeterminadotipodedatoscuyosvalores son susceptibles de ser modificados por medio de las instrucciones contenidas en el propio programa. Nombresdevariables EnPHPtodoslosnombresdevariabletienenqueempezarporelsmbolo$. Las nombres de las variables han de llevar una letra inmediatamente despus del smbolo $ $pepe1 es un nombre vlido, pero $1pepe no es un nombre vlido. Para PHP las letras maysculasylasminsculassondistintas.Lavariable$pepeesdistintade$Pepe. Tiposdevariables En PHP no es necesario definir el tipo de variable, por lo tanto, una misma variable puede contener una cadena de caracteres en un momento del proceso y, posteriormente, un valor numrico,susceptibledeseroperadomatemticamente. Definicindevariables PHP no requiere una definicin previa de las variables. Se definen en el momento en que son necesariasyparaellobastaqueselesasigneunvalor. Lasintaxisesesta: $variable=valor; El valor puede ser una cadena (texto o texto y nmeros que no requieren ser operados matemticamente)oslounnmero.Enelprimerodeloscasoshabraqueescribirelvalorentre comillas.
UT7:INI.ALAPROG.DEDOCUMENTOSWEBUTILIZANDOLENGUAJESDESCRIPTDESERVIDOR Pagina:10

2RMDULO:IMPLANTACINAPLICACIONESWEB

2011/2012

mbitodelasvariables Losvaloresdeunavariabledefinidaencualquierpartedeunscriptsiemprequenoseadentrode unafuncinpuedenserutilizadosdesdecualquierotrapartedeesescript,exceptodesdedentro delasfuncionesquecontuvieraelpropioscriptodesdelasquepudieranestarcontenidasenun ficheroexterno.Siunavariableesdefinidadentrodeunafuncinslopodrserutilizadadentro deesafuncin. SienunafuncinaludimosaunavariableexternaaellaPHPconsideraresallamadacomosila variabletuvieravalorcero(encasodesertratadacomonmero)ounacadenavaca(""esuna cadenavaca). Igualocurrirasidesdefueradeunafuncinhiciramosalusinaunavariabledefinidaenella. Sidefinimosdosvariablesconelmismonombre,unadentrodeunafuncinyotrafuera,PHPlas considerardistintas.Lafuncinutilizarcuandoseaejecutadasuspropiosvaloressinquesus resultadosmodifiquenlavariableexterna. Variablesglobales Locomentadoanteriormente,admitealgunasexcepciones.Lasfuncionespuedenutilizarvalores de variables externas a ellas pero ello requiere incluir dentro de la propia funcin la siguiente instruccin:globalnombredelavariable; Porejemplo:global$a1; En una instruccin global pueden definirse como tales, de forma simultnea, varias variables. Bastaconescribirlosnombresdecadaunadeellasseparadosporcomas. P.ej.:global$a1,$a2,$a3; Variablessuperglobales A partir de la versin 4.1.0 de PHP se ha creado un nuevo tipo de variables capaces de comportarsecomoglobalessinnecesidaddequesedefinancomotales. Estasvariablesquenopuedensercreadasporusuario,recogendeformaautomticainformacin muyespecficaytienennombrespreasignadosquenopuedenmodificarse. Lasestudiaremosunpocomsadelante.Porahora,slocitarlosnombresdealgunasdeellas: $_SERVER,$_POST,$_GETo$_ENVsonlosdelasmsimportantes. Ejemplodelusodelasvariablesylaformadeutilizarlasenlosdiferentesmbitos(ejemplo6.php).
<HTML> <HEAD> </HEAD> <BODY> <? # Definimos la variable $pepe como vaca $pepe=""; # Definimos las variables $Pepe y $Pepa (ojo con maysculas y minsculas) $Pepe="Me llamo Pepe y soy serio y formal"; $Pepa="Me llamo Pepa y tambin soy seria y formal"; ?>
UT7:INI.ALAPROG.DEDOCUMENTOSWEBUTILIZANDOLENGUAJESDESCRIPTDESERVIDOR Pagina:11

2RMDULO:IMPLANTACINAPLICACIONESWEB
<!-- esto es HTML, hemos cerrado el script -->

2011/2012

<center><b>Vamos a ver el contenido de las variables</b></center> <!-un nuevo script PHP -->

<? echo "<br> El valor de la variable pepe es: ",$pepe; echo "<br> No ha puesto nada porque $pepe est vaca"; echo "<br> El valor de la variable Pepe es: ",$Pepe; ?> <center><b><br>Invocando la variable desde una funcin</b></center> <? /* Escribiremos una function llamada vervariable Observa la sintaxis. La palabra function delante y el () al final seguidos de la llave. Hasta que no cerremos la llave todas las lneas sern consideradas parte de la funcin */ function vervariable(){ echo "<br> Si invoco la variable Pepe desde una funcin"; echo "<br>me aparecer en blanco"; echo "<br>El valor de la variable Pepe es: ",$Pepe; } /* esta llave de arriba seala el final de la funcin. Los contenidos que hay en adelante ya no pertenecen a ella */ /* Haremos una llamada a la funcin vervariable. Las funciones no se ejecutan hasta que no se les ordena y se hace de esta forma que ves aqu debajo: nombre de la funcin seguido de los famosos parntesis */ vervariable(); ?> <!-- mas HTML puro --> <center><b><br>Ver la variable desde la funcin poniendo <i>global</i></b></center> <? # una nueva funcin function ahorasi(){ # aqui definiremos a $Pepe como global # la funcin leer su valor externo global $Pepe; echo "<br><br> Hemos asignado mbito global a la variable"; echo "<br>ahora Pepe aparecer"; echo "<br>El valor de la variable Pepe es: ", $Pepe; } # hemos cerrado ya la funcin con la llave. # Tendremos que invocarla para que se ejecute ahora ahorasi(); ?>
UT7:INI.ALAPROG.DEDOCUMENTOSWEBUTILIZANDOLENGUAJESDESCRIPTDESERVIDOR Pagina:12

2RMDULO:IMPLANTACINAPLICACIONESWEB

2011/2012

<center><b><br>Un solo nombre y dos <i>variables distintas</i></b><br> Dentro de la funcin el valor de la variable es <br></center> <? function cambiaPepa(){ $Pepa="Ahora voy a llamarme Luisa por un ratito"; echo "<br>",$Pepa; } cambiaPepa(); ?> <center>... pero despus de salir de la funcin vuelvo al valor original...</center> <? echo "<br>",$Pepa; ?>

</BODY> </HTML>

PRCTICA4
Escribeunscript(gurdalocomopractica4.php)enelqueunamismavariabletomedosvalores distintossinutilizarningunafuncin.Luegoaadealscriptunafuncinquepresenteesemismo nombredevariableconunvalordistintodelosanteriores,comprobandoqueestaltimaopcin nomodificelltimovalordeaquellos. CONSTANTESPREDEFINIDAS PHPdisponedealgunasconstantespredefinidasquenorequierenlainstruccin:
define("Nombre","Valor")

Algunasdeellassonestas: __FILE__ Recoge el nombre del fichero que se est ejecutando y la ruta completa de su ubicacin en el servidor. __LINE__ Recoge el nmero de lnea (incluidas lneas en blanco) del fichero PHP cuyos scripts est interpretando.PuederesultarmuytilparadepurarprogramasescritosenPHP. PHP_OS Recoge informacin sobre el Sistema Operativo que utiliza el servidor en el que se est interpretandoelfichero. PHP_VERSION RecogelaversindePHPqueestsiendoutilizadaporelservidor.
UT7:INI.ALAPROG.DEDOCUMENTOSWEBUTILIZANDOLENGUAJESDESCRIPTDESERVIDOR Pagina:13

2RMDULO:IMPLANTACINAPLICACIONESWEB

2011/2012

Unejemploconconstantespredefinidas(ejemplo7.php)
<HTML> <HEAD> </HEAD> <BODY> <? # La constante del sistema __FILE__ nos devolver echo "La ruta completa de este fichero es: "; echo __FILE__; # # # # La constante del sistema __LINE__ nos devolver el nmero de lnea que se est interpretando tambin cuenta las lneas en blanco cuenta las lneas y vers que devuelve ... 16

echo "<br>Esta es la lnea: ",__LINE__, "del fichero"; echo "<br>Estamos utilizando la versin: ",PHP_VERSION, " de PHP"; echo "<br>El PHP se est ejecutando desde el sistema operativo: ",PHP_OS; ?> </BODY> </HTML>

PRCTICA5
Escribeunscript(gurdalocomoejercicio5.php)queconstruyaunapequeapginawebenlaque aparezcaeltexto"Estsutilizandolaversin:5.2dePHP"(incluidaslascomillasyextrayendoel nmerodeversindelaconstantepredefinidacorrespondiente).Tratadequetodaslasetiquetas HTMLqueutilicesestnrecogidasenvariablesPHP,demaneraquenoexistaningunalneaenel cdigofuentedelapginaqueestfueradelasetiquetas<?...?> VARIABLESPREDEFINIDAS Lastablasdevalores Lainformacinsobrevariablesyvaloressepuedeextraerdelaconfiguracindelservidor. Existendosnombresdevariabledistintosquecompartenelmismovalor. Existenvariablesquecomienzanpor$_,yotraslohacenpor$HTTPyesoesalgomuyimportante. Enelprimercasosealudealasvariablessuperglobales,mientrasquelasotrasvariablesnotienen esecarcter. Razonesdeladuplicidad Laduplicidaddevariablessejustificaporlosiguiente:Lasvariablessuperglobalesseintrodujeron en PHP a partir de la versin 4.1.0 y no existan con anterioridad. Con muy buen criterio, los desarrolladoresPHPoptaronpormantenerlasvariablespredefinidasdelasversionesanteriores
UT7:INI.ALAPROG.DEDOCUMENTOSWEBUTILIZANDOLENGUAJESDESCRIPTDESERVIDOR Pagina:14

2RMDULO:IMPLANTACINAPLICACIONESWEB

2011/2012

paraevitarquelosprogramadoresquemigraransusaplicacionesaestasnuevasversionesdePHP sevieranobligadosareescribirelcdigodesusscripts. Ejemplo:lassiguientesvariablesdevuelvenennmerodelaIPatravsdelaqueestaccediendo elusuarioanuestroservidor: $_SERVER['REMOTE_ADDR'] y $HTTP_SERVER_VARS['REMOTE_ADDR'] Aunque los valores de ambas variables van a ser siempre idnticos, no ocurre lo mismo con su mbito. Para qu sirven? Estas variables recogen informacin muy importante. Esta informacin ser relativaasuconfiguracin:nombre,rutas,nombresdepginas,IPdelservidor,etctera. Losdistintostipos Principalmentetenemosaquellasconvaloresdelasvariablesdedeentorno(ENV)ylasdeservidor (SERVER),pero,ademsdeellas,existenalgunasotrascuyosnombresyutilidadesson: Variablesdesesin Lasidentificaremosporlosnombres$_SESSIONopor$HTTP_SESSION_VARS. Estetipodevariableslasutilizaremoscuandohagamosmencinalusodesesiones. VariablesdelmtodoPOST Las identificaremos por los nombres $HTTP_POST_VARS o por $_POST. Este tipo de variables que utilizaremos con frecuencia recogen la informacin que se enva desde el cliente para ser utilizadaporelservidor. VariablesdelmtodoGET Las identificaremos por los nombres $HTTP_GET_VARS o por $_GET. Son muy similares a las anteriores. Laexistenciadelosdostipossejustificaporquetambinexistendostiposdemtodos(maneras) deenviardatosdesdeelclientehastaelservidor. CuandoelmtododeenvoeselllamadoGETlosdatosserecogenenvariablesdeestetipo,y,por elcontrario,siesemtodoenvofueraPOSTserecogeranenaquellas. Variablesdetransferenciadeficheros Lasidentificaremosporelnombre$HTTP_FILES_VARSopor$_FILES. Para el caso de transferencia de ficheros desde el cliente al servidor subir ficheros es necesario un procedimiento distinto de los anteriores. Ser en este caso cuando se utilicen variablesdeestetipo. EltipoGLOBALS

UT7:INI.ALAPROG.DEDOCUMENTOSWEBUTILIZANDOLENGUAJESDESCRIPTDESERVIDOR

Pagina:15

2RMDULO:IMPLANTACINAPLICACIONESWEB

2011/2012

A diferencia de las anteriores, las variables de este tipo disponen de una sintaxis nica $GLOBALSsinquequepaningunaotraopcin.Sufinalidadesrecogerenunatablalosnombres detodaslavariablesestablecidascomoglobalesencadamomentoascomosusvalores. OTRASVARIABLES Valoresdelasvariables Cuando hablbamos de las variables, nos referamos a su mbito y comentbamos que las variables definidas dentro de una funcin pierden sus valores en el momento en el que abandonemoselmbitodeesafuncin,esdecir,cuandofinalizasuejecucin. Decamostambinquesielmbitoenelquehubierasidodefinidafueraexternoaunafuncinlos valores slo se perderan temporalmente mientras durara la eventual ejecucin de las instruccionesdeaquellayque,unavezacabadoeseproceso,volvanarecuperarsusvalores. Bajoestascondiciones,siinvocramosrepetidamentelamismafuncinobtendramoscadavezel mismoresultado. Las posibles modificaciones que pudieran haberse efectuado (a travs de las instrucciones contenidas en la funcin) en el valor inicial de las variables, se perderan cada vez que abandonramos la funcin con lo cual, si hiciramos llamadas sucesivas, se repetiran tanto el valorinicialcomoelresultado. Variablesestticas Para poder conservar el ltimo valor de una variable definida dentro de una funcin basta con definirla como esttica. La instruccin que permite establecer una variable como esttica es la siguiente:
static nombre = valor;

P.ej:silavariablefuera$ayelvalorinicialasignadofuera3escribiramos:static$a=3; Lavariableconservarelltimodelosvaloresquepudohabrseleasignadodurantelaejecucin delafuncinquelacontiene.Noretomarelvalorinicialhastaqueseactualicelapgina. Variablesdevariables Ademsdelmtodohabitualdeasignacindenombresalasvariablesponerelsigno$delantede una palabra, existe la posibilidad de que tomen como nombre el valor de otra variable previamentedefinida.Laformadehacerloseraesta:$$nombre_variable_previa; Veamosunejemplo: Supongamosquetenemosunavariablecomoesta:$color="verde"; Siahoraqueremosdefinirunanuevavariablequeutilicecomonombreelvalor(verde)queest contenido en la variable previa ($color), habramos de poner algo como esto: $$color="es horrible"; Cmopodramosvisualizarelvalordeestanuevavariable? Habratresformasdeescribirlainstruccin: print$$color;oprint${$color};otambinprint$verde; Cualquieradelasinstruccionesanterioresnosproduciralamismasalida:eshorrible.
UT7:INI.ALAPROG.DEDOCUMENTOSWEBUTILIZANDOLENGUAJESDESCRIPTDESERVIDOR Pagina:16

2RMDULO:IMPLANTACINAPLICACIONESWEB

2011/2012

Podemos preguntarnos cmo se justifica que existan dos sintaxis tan similares como $$color y ${$color}?Qupintanlasllaves?. Lautilizacindelasllavesesunaformadeevitarsituacionesdeinterpretacinconfusa. Supongamosquelasvariablestienenunnombreunpocomsraro. Porejemploque$colornosellamaassino$color[3](podraserque$colorfueraunarrayuna listadecoloresyqueestavariablecontuvieraeltercerodeellos). En este supuesto, al escribir: print$$color[3] cabra la duda de siel nmero 3 pertenece(esun ndice)alavariable$colorosiesenmerocorrespondea$$color. Conprint${$color[3]}nohabralugarparaesasdudas.Estaramosaludiendodeformainequvoca a3comondicedelavariable$color. Quocurrecuandolavariablepreviacambiadevalor? Cuandolavariableutilizadaparadefinirunavariabledevariablecambiadevalornosemodificani elnombredeestaltimanitampocosuvalor. Puedesveresteconcepto,conunpocomsdedetalle,enelcdigofuentedelejemplo. EjemplodeVariablesestticas(ejemplo8.php)
<? # Observa que hemos prescindido de los encabezados HTML. # No son imprescindibles para la ejecucin de los scripts /* Escribamos una funcin y llammosla sinEstaticas Definamos en ella dos variables sin ninguna otra especificacin e insertemos las instrucciones para que al ejecutarse se escriban los valores de esas variables */ function sinEstaticas(){ # Pongamos aqu su valores iniciales $a=0; $b=0; # Imprimamos estos valores iniciales echo "Valor inicial de $a: ",$a,"<br>"; echo "Valor inicial de $b: ",$b,"<br>"; /* Modifiquemos esos valores sumando 5 al valor de $a y restando 7 al valor de $b. $a +=5 y $b -=7 sern quienes haga esas nuevas asignaciones de valor ya lo iremos viendo, no te preocupes */ $a +=5; $b -=7; # Visualicemos los nuevos valores de las variables echo "Nuevo valor de $a: ",$a,"<br>"; echo "Nuevo valor de $b: ",$b,"<br>"; } # Escribamos ahora la misma funcin con una modificacin que ser # asignar la condicin de esttica a la variable $b
UT7:INI.ALAPROG.DEDOCUMENTOSWEBUTILIZANDOLENGUAJESDESCRIPTDESERVIDOR Pagina:17

2RMDULO:IMPLANTACINAPLICACIONESWEB
# Llamemos a esa funcin: conEstaticas function conEstaticas(){ # Definimos $b como esttica $a=0; static $b=0; echo "Valor inicial de $a: ",$a,"<br>"; echo "Valor inicial de $b: ",$b,"<br>"; $a +=5; $b -=7; echo "Nuevo valor de $a: ",$a,"<br>"; echo "Nuevo valor de $b: ",$b,"<br>"; }

2011/2012

# Insertemos un texto que nos ayude en el momento de la ejecucin print ("Esta es la primera llamada a sinEstaticas()<br>");

# Invoquemos la funcin sinEstaticas; sinEstaticas(); # Aadamos un nuevo comentario a la salida print ("Esta es la segunda llamada sinEstaticas()<br>"); print ("Debe dar el mismo resultado que la llamada anterior<br>"); # Invoquemos por segunda vez sinEstaticas; sinEstaticas(); # Hagamos ahora lo mismo con la funcin conEstaticas print ("Esta es la primera llamada a conEstaticas()<br>"); conEstaticas(); print ("Esta es la segunda llamada a conEstaticas()<br>"); print ("El resultado es distinto a la llamada anterior<br>"); conEstaticas(); ?>

EjemplodeVariablesdevariables(ejemplo9.php)
<? # Definamos una variable y asignmosle un valor $color="rojo"; # Definamos ahora una nueva variable de nombre variable # usando para ello la variable anterior $$color=" es mi color preferido"; # Veamos impresos los contenidos de esas variables print ( "El color ".$color. $$color ."<br>"); #o tambin print ( "El color ".$color. ${$color}."<br>"); # o tambin
UT7:INI.ALAPROG.DEDOCUMENTOSWEBUTILIZANDOLENGUAJESDESCRIPTDESERVIDOR Pagina:18

2RMDULO:IMPLANTACINAPLICACIONESWEB
print ( "El color ".$color. $rojo."<br>"); # advirtamos lo que va a ocurrir al visualizar la pgina

2011/2012

print ("Las tres lneas anteriores deben decir lo mismo<br>"); print ("Hemos invocado la misma variable de tres formas diferentes<BR>"); # cambiemos ahora el nombre del color $color="magenta"; /* La variable $rojo seguir existiendo. El hecho de cambiar el valor a $color no significa que vayan a modificarse las variables creadas con su color anterior ni que se creen automaticamente variables que tengan por nombre el nuevo valor de $color

*/

# Pongamos un mensaje de advertencia para que sea visualizado en la salida print print print print ("Ahora la variable \$color ha cambiado a magenta<br>"); ("pero como no hemos creado ningua variable con ese color<br>"); ("en las lineas siguientes no aparecer nada <br>"); ("detrs de la palabra magenta <br>");

# Escribimos los print advertidos print (" El color ".$color.$$color."<br>"); print (" El color ".$color.${$color}."<br>"); # Comprobemos que la variable $rojo creada como variable de variable # cuando $color="rojo" an existe y mantiene aquel valor print ("Pese a que \$color vale ahora ".$color."<br>"); print ("la vieja variable \$rojo sigue existiendo <br>"); print ("y conserva su valor. Es este: ".$rojo); ?>

TIPOSDEVARIABLES En PHP noes necesaria una definicin previadel tipo devariables. Segn los valores que se les vayanasignando,lasvariablespodrncambiardetipodemodoautomticoyseirnadaptando alosvaloresquecontenganencadamomento. LasvariablesenPHPpuedenserdetrestipos: Enteras(tipoInteger) Decomaflotante(tipoDouble) Cadenas(tipoString) Cualquier nmero entero cuyo valor est comprendido entre 231 ser interpretado por PHP como de tipo Integer. Si el valor de una variable es un nmero decimal o siendo entero desborda el intervalo anterior, bien por asignacin directa o como resultado de una operacin aritmtica,PHPlaconvierteatipoDouble.Cualquiervariablealaqueseleasignecomovalorel contenido de una cadena de caracteres (letras y/o nmeros delimitados por comillas) es interpretadaporPHPcomotipoString.
UT7:INI.ALAPROG.DEDOCUMENTOSWEBUTILIZANDOLENGUAJESDESCRIPTDESERVIDOR Pagina:19

2RMDULO:IMPLANTACINAPLICACIONESWEB

2011/2012

Determinacindetiposdevariables PHPdisponedelafuncin:gettype(variable)quedevuelveunacadenadecaracteresindicandoel tipodelavariablequecontiene.Lacadenadevueltaporestafuncinpuedeser:Integer,doubleo string. Forzadodetipos PHPpermiteforzarlostiposdelasvariables.EsoquieredecirquesepuedeobligaraPHPaasignar un tipo determinado a una variable determinada, siempre que los valores que contenga estn dentrodelrangodelnuevotipodevariable.Lostipossepuedenforzartantoenelmomentode definirlavariablecomodespusdehabersidodefinida. Forzadoyasignacinsimultneadevalores Alasignarunvaloraunavariable,sepuedeforzarsutipodelasiguienteforma.Sideseamosque lavariablepaseasertipodedoublebastaconanteponerasuvalorentreparntesistalcomo seindicaunadelasexpresiones:(double),(real)o(float). Porejemplo:$a=((double)45); o $a=((float)45); o$a=((real)45);cualquieradeellasproducirael mismoefecto:convertirlavariable$aatipoDouble. ParaforzarunavariableatipoIntegerpodemosanteponerasuvalorunadeestasexpresiones: (integer),o(int).Porejemplo:$b=((integer)4.5);o$b=((int)45);produciranelmismoefecto: convertirlavariable$batipoInteger. ParaforzarunavariableatipoStringbastaconanteponerasuvalor(entreparntesis):(string). Porejemplo:$c=((string)4.5);convertiralavariable$catipoString. Forzadodetiposenvariablesyadefinidas La forma ms aconsejable de forzado de tipos en variables que ya estuvieran definidas previamente,eselusodelasiguienteinstruccin:settype(var,tipo)dondevareselnombredela variable cuyo tipo pretendemos modificar y tipo una expresin que puede contener (entre comillas) uno de estos valores: 'double', 'integer', o 'string' segn se trate de forzar a: coma flotante,entero,ocadena. Unejemplopodrasereste:settype($a,'integer')queconvertiraatipoenterolavariable$a. Laejecucindelainstruccinsettypedevuelve(dacomoresultado)unvalorquepuedeser:trueo false(10)segnlaconversinsehayarealizadoconxitoonohayapodidorealizarse. Operacionescondistintostiposdevariables PHPpermitelarealizacindeoperacionesaritmticasconcualquieradelostrestiposdevariables yadecaelresultadoaltipomsapropiado. Enlatabladeladerechapuedesveralgunosejemplos,pero,enresumen,ocurrelosiguiente: Al operar con dos enteros, si el resultado est dentro del rango de los enteros, devuelve un entero. Sialoperarcondosenteroselresultadodesbordaelrangoentero,conviertesuvalor,deforma automtica,altipocomaflotante. Aloperarunenteroconunavariabletipocomaflotanteelresultadoesdecomaflotante.

UT7:INI.ALAPROG.DEDOCUMENTOSWEBUTILIZANDOLENGUAJESDESCRIPTDESERVIDOR

Pagina:20

2RMDULO:IMPLANTACINAPLICACIONESWEB

2011/2012

Aloperarconunacadenalohacecomosisetrataradeunentero.Sihaycaracteresnumricosal comienzo,losextrae(hastaqueaparezcaunpuntoouncarcternonumrico)ylosoperacomo unnmeroentero. SiunacadenanocomienzaporuncarcternumricoPHPlaoperartomandosuvalornumrico comoCERO. Tiposdevariables EnelcuadrosiguientepodemosverlostrestiposdevariablesqueutilizaPHP.

Determinacindeltipodevariableutilizada DadoquePHPgestionalasvariablesdeformaautomticaymodificalostiposdeacuerdoconlos valores que va tomando durante la ejecucin del script, se pude recurrir a la funcin gettype(nombredelavariable)paradeterminareltipodelavariableactual. Enlatablasiguientetienesalgunosejemplosdeaplicacindeesafuncin. PodemosobservarenlacolumnaSintaxisqueparavisualizarelresultadoanteponemosechoa gettype.Esdecir,leindicamosaPHPquemuestreelresultadoobtenidoaldeterminareltipode variable.

Forzadodetipos

UT7:INI.ALAPROG.DEDOCUMENTOSWEBUTILIZANDOLENGUAJESDESCRIPTDESERVIDOR

Pagina:21

2RMDULO:IMPLANTACINAPLICACIONESWEB

2011/2012

Al modificar los tipos de variables pueden modificarse sus valores. Si forzamos a entera una variable que contenga un nmero decimal se perdera la parte decimal y la variable modificada solocontendraelvalordelaparteentera. Sitratamosdeconvertiranumricaunavariablealfanumricaelnuevovalorseracero. Aqutienesalgunosejemplosrelacionadosconlaadvertenciaanterior.

Forzadodetiposusandosettype() Aqutienesalgunosejemplosdelusodeesafuncin.Latablaestorganizadaenbloquesdetres filas que corresponden a la ejecucin de tres instrucciones y a la visualizacin del resultado de cadaunadeellas. Elresultadodesettypeprimerafilasolopodrser10segnlainstruccinsehayaejecutado conxitoonohayapodidorealizarse. Enlasegundafilacomprobamoselnuevotipodevariableobtenidamediantelaejecucindela instruccin anterior y en la tercera visualizamos los nuevos valores de la variable, que pueden habercambiadocomoconsecuenciadelcambiodetipo.

UT7:INI.ALAPROG.DEDOCUMENTOSWEBUTILIZANDOLENGUAJESDESCRIPTDESERVIDOR

Pagina:22

2RMDULO:IMPLANTACINAPLICACIONESWEB

2011/2012

Tiposdevariabledelosoperadoresydelosresultados La tabla siguiente contiene en cada fila los valores asignados a dos variables (A y B) y el resultadodelasumadeambas.Acontinuacinserecogenlostiposdevariabledecadaunade ellasyeldelresultado.EltipodeesteltimogeneradoporPHPestarcondicionadoporelvalor delresultadodecadaunadelasoperaciones.

UT7:INI.ALAPROG.DEDOCUMENTOSWEBUTILIZANDOLENGUAJESDESCRIPTDESERVIDOR

Pagina:23

2RMDULO:IMPLANTACINAPLICACIONESWEB

2011/2012

UT7:INI.ALAPROG.DEDOCUMENTOSWEBUTILIZANDOLENGUAJESDESCRIPTDESERVIDOR

Pagina:24

U.T.8UTILIZANDOFORMULARIOS
1.PHPDINMICO Loquehemosvistohastaelmomento,solonoshaservidoparaescribirunaseriedescriptsPHPy ver los resultados de su ejecucin, pero an no hemos visto de qu forma se puede lograr que interactenelclienteyelservidor.Veamoscmohacerlo. Pasosprevios Quvalortieneregister_globalsentuphp.ini? Si se encuentra en OFF (comprobar con http://localhost/pruebaphp.php) se debe modificar esa directivadejndolacomoregister_globals=ONyguardarloscambios. Antesdehacerunamodificacinenphp.inienhttpd.confdesactivaelservidorApache.Cuando hayas acabado con los cambios vuelve a ponerlo en marcha (de lo contrario te aparecer el mensaje:nosepuedeencontrarelservidor)yyaarrancaratendiendoalanuevaconfiguracin. 2.ENVOATRAVSDELNAVEGADOR Laformamssimpledequeunclientepuedaenviarvaloresaunservidoresincluiresosvalores enlapropiapeticin,insertndolosdirectamenteenlabarradedireccionesdelnavegador. Formadeenvo Deber insertarse en la barra de direcciones del navegador lo siguiente: pagina.php?n1=v1&n2=v2dondepagina.phpserladireccindelapginaquecontieneelscript quehadeprocesarlosvalorestransferidos. ?esuncarcterobligatorioqueindicaquedetrsdelvanaserinsertadosnombresdevariables ysusvalores. n1,n2,etcterarepresentanlosnombresdelasvariables. =eselseparadordelosnombresdelasvariablesysusvaloresrespectivos. v1,v2,...simbolizanelvalorasignadoacadaunadelasvariables. &eselsmboloqueseparalosdistintosbloquesvariable=valor. Losnombresdelasvariablesnuncallevanelsigno$. Losvaloresdelasvariablesseannmerosocadenasnuncaseescribenentrecomillas. Algunos caracteres especiales (& por ejemplo) no pueden escribirse directamente dado que se prestanaconfusin(nosabrasiesunvalordeunavariableosisetratadeelsmbolodeunin. En esos casos es necesario sustituir en carcter por su codificacin URL que representa cada carcteranteponiendoelsigno%alvalordesucdigoASCIIexpresandoenformatohexadecimal. Sepuedenincluirtantosnombre=valorcomosedesee.Lanicarestriccineslalongitudmxima permitida por el mtodo GET (el utilizado en este caso) que se sita en torno a los 2.000 caracteres. Ejemplo10.php
<? /* Escribamos una instruccin, que imprima en pantalla el valor de una variable ($a), una "x" que har funciones de aspa en la presentacin, otra variable ($b), el signo igual y $a*$b que es el producto de ambas variables El simbolo de multiplicar es (*) */ print ($a." x ".$b." = ".$a*$b); U.T.8UTILIZANDOFORMULARIOS Pgina:1

?>

Lallamadadeberahacersedelaforma: http://localhost/practicas/ejemplo10.php?a=21&b=456 Recepcindedatos Cuandoesrecibidaporelservidorlapeticindeundocumentoconextensin.phpenlaquetras el signo ? se incluyen una o varias parejas nombre = valor, los nombres de las variables y sus valoresrespectivosseincluyen,deformaautomtica,envariablespredefinidasdeltipo: $HTTP_GET_VARS['n1'] $HTTP_GET_VARS['n2'] enlasquen1,n2,...coincidenexactamenteconnombresasignadosacadaunadelasvariablesen esatransferencia. Cada una de esas variables contendr como valor aquel que hubiera recibido a travs de la peticin. Si la versin de PHP es superior a la 4.1.0, esos mismos valores se incluirn en variables superglobales del tipo $_GET de modo que en el supuesto de que la versin lo soporte los valoresdelapeticintambin(estaopcinnoexcluyelaanterior)estarandisponiblesen: $_GET['n1'] $_GET['n2'] Segnelmodoenqueestconfiguradoelphp.inipodracaberunaterceraposibilidadderegistro de esos valores. Si la directiva register_globals en el fichero php.ini est configurada con la opcinON,losvalorestransferidosdesdeelnavegadorademsdeserrecogidosenlasvariables anterioressonasignadosaotrasvariablesdeltipo:$n1,$n2,...cuyosnombressonelresultado deanteponerelsmbolo$alosnombresdelasvariablescontenidasenlapeticin. Laeleccinalahoradeescribirlosscriptsdeunouotrotipodevariabledebehacerseteniendoen cuentaque: Esta ltima sin duda la ms cmoda tiene el problema de que slo es vlida cuando register_globals=ony,adems,eslamsinseguradetodas. La superglobal $_GET tiene una sintaxis ms corta que su alternativa y, adems, aade como ventajasucondicindesuperglobal,quepermiteutilizarlaencualquiermbitosinnecesidadde declararla expresamente como global. Es la opcin del futuro. Su nico inconveniente es que puedenoestardisponibleenhostingsqueanmantienenversionesantiguasdePHP. Ejemplo11.php
<? /* Modifiquemos la instruccin anterior y utilicemos las variables predefinidas $HTTP_GET_VARS['a'], $HTTP_GET_VARS['b'] en vez de $a y $b que utilizbamos en el ejemplo anterior */ # Pongamos un comentario de advertencia. Recuerda que <br> # sirve para insertar un salto de lnea en la salida print ("Este resultado es el que utiliza $HTTP_GET_VAR<br>"); print ($HTTP_GET_VARS['a']." x ".$HTTP_GET_VARS['b']." = ". $HTTP_GET_VARS['a']*$HTTP_GET_VARS['b']); /* Ahora trataremos de comprobar que tambin podemos utilizar la superglobal $_GET como $_GET['a'] y $_GET['b'] con iguales resultados que las anteriores */ # Un comentario para identificar el origen del resultado print("<br>El resultado siguiente ha sido generado usando $_GET <br>"); print ($_GET['a']." x ".$_GET['b']." = ".$_GET['a']*$_GET['b']); ?> U.T.8UTILIZANDOFORMULARIOS Pgina:2

Lallamadatambindeberhacerse: http://localhost/practicas/ejemplo11.php?a=21&b=456 Recuerda: Los nombres de variables son distintos si se cambian maysculas y minsculas. Pon mucho cuidadoenescribirloscorrectamente. Losnombresdelasvariablespredefinidas,talescomo$HTTP_GET_VARS,$_GET,etcteravanen maysculas. Noolvidesponerpuntoycomaalfinaldecadalneadeinstrucciones. Prestaatencinalaapertura/cierredecomillasymuchamsatencinansisetratadecomillas anidadas.Enestecasoprocurausar(")paralasexterioresy(')paralasinteriores. En modo local puedes establecer las configuraciones de php.ini a tu antojo y, adems, ests utilizando una versin 5.2... de PHP que permite superglobales. Esta versin junto con la posibilidaddemodificarphp.initepermiteutilizarcualquieradelasopcionesdetransferenciade variables. Pero,sipretendespublicartuspginasutilizandounhostingajenodebescerciorartedeculessu versin de PHP no todos tienen instaladas versiones superiores a 4.1.0 y conocer la configuracindesusphp.ini. Tenencuentaqueallnovasapodermodificarlasconfiguracionesydenotenerencuentaestos aspectos,puedesverteobligadoamodificartucdigofuenteparaadecuarloalaconfiguracinde tuhosting. 3.ENVOATRAVSDEFORMULARIOS Lainteraccinclienteservidorqueacabamosdever,resultaincmodaensuusoynodemasiado esttica. Hayunasegundaopcinladeusomsfrecuentequeeslautilizacindeformularios. Los formularios no son elementos propios de PHP actan del lado del cliente y su estudio es mspropiodelmbitodeHTMLquedePHP. Ejemplo12.php
<HTML> <HEAD> </HEAD> <BODY> <!-- Un formulario debe empezar siempre con una etiqueta de este tipo <form ...>en el que ser obligatorio indicar con esta sintaxis action='nombre.extension' nombre.extension debe contener el nombre (o la ruta completa en el caso de que estuviera en un directorio o hosting distinto del que alberga el documento que contiene el formulario desde el que se realiza la peticin es opcional incluir method que puede tener dos valores method='GET' method='POST', por defecto (cuando no se indica) el envo se realizar usando method='GET' tambin es opcional -a los efectos de PHP- incluir name ese valor es til cuando se incluyen scripts del lado del cliente del tipo JavaScript //--> <form name='mi_formulario' action='formu1.php' method='post'> <!-- Pueden incluirse textos dentro del formulario --> U.T.8UTILIZANDOFORMULARIOS Pgina:3

Escribe tu nombre: <!-- Uno de los tipos de campos posibles es el tipo texto su sintaxis (hablamos de HTML) requiere la etiqueta <input type='text'> que indica el contenido del texto esa etiqueta debe incluir obligatoriamente un name='nombre' el nombre a usar sern caracteres alfabticos, sin tildes ni ees y sin espacios. Salvo excepciones que comentaremos no puede usarse el mismo nombre para dos campos distintos el value='' puede no contener nada entre las comillas tal como ocurre aqu o contener el texto que por defecto queremos que aparezca en ese campo al cargar el formulario. el size=xx es opcional. Su utilidad es la de ajustar el tamao de la ventana al nmero de caracteres que se indiquen //--> <input type='text' name='nombre' value='' size=15><br> Escribe tu clave: <!-<input type='password'> solo se diferencia del anterior en que en el momento de rellenarlo se sustituyen los caracteres visualizados (no el contenido) por asteriscos //-->

<input type='password' name='clave' value=''><br> Elige tu color de coche favorito:<br> <!-Los <input type='radio'> permite optar entre varios valores posibles. Habr que repetirlos tantas veces como opciones queramos habilitar. Todos los input correspondientes a la misma opcin deben tener el mismo nombre (name) value='loquesea' deber tener un valor distinto en cada uno de ellos. Ese valor (loquesea) ser transferido a travs del formulario Si queremos que una opcin aparezca marcada (por defecto) al cargar el formulario, deberemos incluir en su etiqueta la palabra checked los contenidos de value no se visualizan en el navegador por lo que conviene incluir una descripcin de los valores despus de cerrar la etiqueta de cada input Al enviar el formulario solo se transmite el value correspondiente a la opcin seleccionada //-->

<input type='radio' name='color' value='Rojo'>Rojo</br> <input type='radio' checked name='color' value='Verde'>Verde</br> <input type='radio' name='color' value='Azul'>Azul</br> Elige los extras:<br> <!-Cada uno de los <input type='checkbox'> requiere un nombre distinto (name) y un valor (value) permite optar entre varios Esos valor (loquesea) sern transferidos a travs del formulario cuando la casilla de verificacin est marcada Si queremos que una casilla aparezca marcada (por defecto) al cargar el formulario, deberemos incluir en su etiqueta la palabra checked los contenidos de value tampoco aqu se visualizan en el navegador por lo que conviene incluir una descripcin de los valores despus de cerrar la etiqueta de cada input Al enviar el formulario solo se transmite los value Pgina:4

U.T.8UTILIZANDOFORMULARIOS

correspondiente a la opcin marcadas

//-->

<input type='checkbox' name="acondicionado" value="Aire"> Aire acondicionado<br> <input type='checkbox' checked name="tapiceria" value="Tapicieria"> Tapiceria en piel<br> <input type='checkbox' name="llantas" value="aluminio"> Llantas de aluminio<br> Cul es el precio mximo<br> que estaras dispuesto a pagar? <!-La etiqueta <input type='select'> requiere un nombre y requiere tambin una etiqueta de cierre </select> Entre ambas -apertura y cierredeben incluirse las diferentes opciones entre las de etiquetas <option>valor<option> Al enviar el formulario se transmite lo contenido despus de opcin en la opcin seleccionada si dentro de una etiqueta option escribimos selected ser esa la que aparezca por defecto al cargarse el formulario//-->

<select name="precio"> <Option>Menos de 6.000 euros</option> <Option>6.001 - 8.000 euros</option> <Option selected >8.001 - 10.000 euros</option> <Option>10.001 - 12.000 euros</option> <Option>12.001 - 14.000 euros</option> <Option>Ms de 14.000 euros</option> </select> <!-- Las reas de texto deben tener una etiqueta de apertura <textarea name='checkbox'> seguida de una etiqueta de cierre </textarea> Dentro de la etiqueta de apertura puede incluirse rows=xx (indicar el nmero de filas) cols=yy (indicar el ancho expresado en nmero de caracteres) y opcionalmente un value='lo que sea...' que puede contener el texto que -por defectopretendemos que aparezca en ese espacio en el momento de cargar rl formulario //--> <br> Escribe aqu cualquier otro comentario:<br> <textarea rows=5 cols=50 name='texto'></textarea><br> <!-- El <input type='hidden'> permite insertar en un formulario una valor oculto que no requiere ser cumplimentado por el usuario y que no aparece visible en el documento requiere un name y un value //--> <input type="hidden" name='oculto value='Esto ira oculto'><br> <!-- El <input type='submit'> es el encargado de ejecutar la action incluida en la etiqueta de apertura del formulario que en este caso sera la llamada a la pgina que se indica en la action U.T.8UTILIZANDOFORMULARIOS Pgina:5

El texto que incluyamos en value='enviar...' ser el que se visualice en el propio botn de envio <input type="submit" value="enviar"> <!-- El <input type='reset'> permite borrar todos los contenidos del formulario y reestablecer los valores por defecto de cada campo //--> <input type="reset" value="borrar"> <!-- La etiqueta </form> es la etiqueta de cierre del formulario </FORM> </BODY> </HTML>

//-->

//-->

Interpretacindelosdatosrecibidosatravsdeformularios Igualqueocurraenelcasoanterior,losdatosenviadosatravsdeunformulariosonrecogidosen diferentestiposdevariablespredefinidas,peroahoraseaadeunanuevaparticularidad. Existe la posibilidad de dos mtodos (method) de envo: 'GET' y 'POST'. En el caso anterior decamosqueseutilizabaelmtodoGET,peroenelcasodelosformulariossonposiblesambos mtodos.Convienetenerloencuenta. MtodoGET No se diferencia en nada del descrito para el supuesto anterior. Utiliza las mismas variables predefinidas, las utiliza con idntica sintaxis y se comporta de igual forma en lo relativo a las opcionesderegister_globals. Los nombres de las variables son en este caso, los incluidos como name en cada una de las etiquetasdelformulario. Respectoalosvaloresdecadavariable,stosseranlosrecogidosdelformulario.Enloscasosde campostipo:text,passwordytextareaseranlosvaloresintroducidosporelusuarioencadauno deesoscampos. Enelcasodeloscampostiporadioenelquevariasopcionespuedentenerelmismonombre recogeraelvalorindicadoenlacasillamarcada;mientrasquesisetratadecampostipocheckbox setransferirannicamentelasvariablesylosvaloresquecorrespondenalascasillasmarcadas. Si se tratara de un campo tipo hidden se transferira el valor contenido en su etiqueta y, por ltimo, en el caso del select sera transferido como valor de la variable la parte del formulario contenidaentrelasetiquetas<option></option>delaopcinseleccionada. MtodoPOST EnelcasodequeelmtododeenvoseaPOSThayunadiferenciaatenerencuentaencuantoa lasvariablesquerecogenlainformacin.Ahoraser:$HTTP_POST_VARS['n1'] quien haga la funcin atribuida en el mtodo anterior a: $HTTP_GET_VARS['n1'] y ocurrir algo similar con las superglobales, que pasaran a ser del tipo: $_POST['n1'] en sustitucin del $_GET['n1']usadoenelcasodelmtodoGET.Siregister_globalsestenOnelcomportamiento delasvariablesdirectasesidnticoconambosmtodos. Identificacindelmtododeenvo PHPrecogeenunavariableelmtodoutilizadoparaenviarlosdatosdesdeunformulario.Setrata delavariableREQUEST_METHOD.
U.T.8UTILIZANDOFORMULARIOS Pgina:6

Puede ser invocada como una variable directa (en caso de que register globals est en on) o a travsdeunadelasvariablesdeservidor. Enelprimercasolavariablesellamara:$REQUEST_METHOD yenelsegundo:$HTTP_SERVER_VARS[REQUEST_METHOD] Cuando PHP permita el uso de variables superglobales se puede utilizar: $_SERVER[REQUEST_METHOD] Una advertencia importante. Observa que en este caso no se incluyen comillas dentro del corchetecomoocurracontodoslosnombresdevariableanteriores. DiferenciasentelosmtodosGETyPOST Lasdiferenciasentreunoyotromtodosonlassiguientes: MtodoGET Lasparticularidadesdeestemtodosonlassiguientes: Alserenviadoelformulariosecargaenelnavegadorladireccinespecificadacomoaction,sele aadeun?yacontinuacinseincluyenlosdatosdelformulario. Todoslosdatosdelapeticinvanaservisiblesdesdelabarradedireccionesdelnavegador. nicamentesonaceptadosloscaracteresASCII. Tieneunalimitacineneltamaomximodelacadenaquecontienelosdatosatransferir.EnIE esalimitacinesde2.083caracteres. MtodoPOST NotienelaslimitacionesindicadasparaelcasodeGETenlorelativoavisibilidadniencuantoa aceptacindecaracteresnoASCII. Estemtododetransferenciadedatoseselmshabitualcuandoseutilizanformularios. Scriptspararecogerlosdatosdelformularioanterior Insertaremos ahora los diferentes tipos scripts utilizables, especificando las condiciones de utilizacindecadaunodeellos. Loshemosllamadoformu1.php,formu2.php,etctera. formu1.php
<? echo echo echo echo echo echo echo echo echo echo ?> "El method que ha usado fu: ",$REQUEST_METHOD,"<br>"; $nombre,"<br>"; $clave,"<br>"; $color,"<br>"; $acondicionado,"<br>"; $tapiceria,"<br>"; $llantas,"<br>"; $precio,"<br>"; $texto,"<br>"; $oculto,"<br>";

formu2.php
<? echo "El method que ha usado fu: ",$HTTP_SERVER_VARS[REQUEST_METHOD],"<br>"; echo $HTTP_POST_VARS['nombre'],"<br>"; echo $HTTP_POST_VARS['clave'],"<br>"; echo $HTTP_POST_VARS['color'],"<br>"; echo $HTTP_POST_VARS['acondicionado'],"<br>"; echo $HTTP_POST_VARS['tapiceria'],"<br>"; echo $HTTP_POST_VARS['llantas'],"<br>"; U.T.8UTILIZANDOFORMULARIOS Pgina:7

echo echo echo ?>

$HTTP_POST_VARS['precio'],"<br>"; $HTTP_POST_VARS['texto'],"<br>"; $HTTP_POST_VARS['oculto'],"<br>";

PRCTICA6
Realiza el documento formu3.php con usando las variables $HTTP_GET_VARS como mtodo de recogidadeinformacin.

PRCTICA7
Realizaeldocumentoformu4.phpconusandolasvariables$_POSTcomomtododerecogidade informacin.

PRCTICA8
Realizaeldocumentoformu5.phpconusandolasvariables$_GETcomomtododerecogidade informacin. Habra que modificar en el formulario anterior el valor de action para adecuarlo al nombre de cadascript.
<form name='mi_formulario' action='formu2.php' method='post'> <form name='mi_formulario' action='formu3.php' method='post'> ... <form name='mi_formulario' action='formu1.php' method='GET'> <form name='mi_formulario' action='formu2.php' method='GET'> ...

Laseguridadenlosenvosdedatos EltemadelaseguridadesunapreocupacinconstanteentrelosusuariosdeInternet. Cuandoutilizamoslastcnicasquevenimoscomentandoenestapginanosreferimossiempreal caso de servidores remotos corremos dos tipos de riesgo de seguridad que no estara de ms tenerencuenta. El riesgo de que la informacin sea interceptada durante el proceso de transmisin desde el clientehastaelservidorlocompartimoscontodoslosdemsusuariosdelaRed,perohayotroel riesgodedaosenloscontenidosdenuestroespaciodeservidorqueesexclusivamentenuestro. LatransparenciadelmtodoGETestal,queinclusomuestraenelmomentodelenvotodoslos datosenlabarradedireccionesdelnavegador.Esopermitequecualquierusuariopuedaconocer asimplevistalarutacompletahastaelscript,ascomolosnombresyvaloresdelasvariables. Cuando se usa el mtodo POST los formularios son un poco ms discretos, pero igual de transparentes.ElcdigodecualquierformularioestaraccesiblesloconiralaopcinVercdigo fuente y all estarn de nuevo todos los datos: nombre del script, nombres de las variables, etctera,conloque,cualquierusuarioydesdecualquiersitio,puedeaccederaesescript. Noharafaltaniusarnuestroformulario.Bastaraguardarunacopiadelmismoenelordenador del visitante y despus haciendo ligersimos retoques se podra acceder a nuestro script sin necesidaddeutilizarelformularioalojadoennuestroservidor.
U.T.8UTILIZANDOFORMULARIOS Pgina:8

Sipensamosqueunodenuestrosscriptspuedeestardiseadoconelfindemodificaralgunosde los contenidos de nuestro espacio borrar datos, por ejemplo seguramente sera cuestin de empezarapreocuparnos,ymuchomssiennuestroservidortenemosdatosimportantes. Existenformasdeevitar,oalmenosreducir,estetipoderiesgos. Restringirausuariosautorizadoselusodealgunossubdirectoriosesunadeellas,almacenardatos importantes fuera del directorio root del servidor es otra y el uso de algunas de las variables predefinidascomoelementosdeproteccinpuedeserunatercera.

PRCTICA9
Creadosdocumentosllamadosrespectivamenteformulario1.phpyvisor1.php.Enelprimerode ellos incluye un formulario que permita recoger datos personales y acadmicos de alumnos, utilizando todos los tipos de campos de formulario que conozcas. Los datos insertados en ese formulario debern ser visualizados despus de su envo con cualquier configuracin de register_globalsyconcualquierversinPHPatravsdeldocumentovisor1.php.

PRCTICA10
Con criterios similares en cuanto a esttica y funcionalidad a los del ejercicio anterior, crea dos nuevos documentos con nombres formulario2.php y visor2.php. En este caso el formulario deberpoderrecogerelnombreyapellidosdeunalumnohipotticoalquedebemosformularle dospreguntas.Laprimeradeellasconcuatroposiblesrespuestasentrelasquedebaelegircomo vlida una de ellas. La segunda, tambin con cuatro respuestas, deber permitir marcar las respuestascorrectasquepuedenser:todas,ninguna,oalgunasdeellas. Elalumnodeberapoderinsertarsusdatospersonalesenelformularioyelegirlasrespuestasalas preguntas formuladas. Al pulsar en el botn de envo, los datos del alumno y las respuestas elegidasdebenvisualizarseatravsdeldocumento visor2.php.

U.T.8UTILIZANDOFORMULARIOS

Pgina:9

2RMDULO:IMPLANTACINAPLICACIONESWEB

2011/2012

U.T.9ELEMENTOSDELLENGUAJE
1.OPERACIONESARITMTICAS

U.T.9ELEMENTOSDELLENGUAJE Pgina:1

2RMDULO:IMPLANTACINAPLICACIONESWEB

2011/2012

Ordendeoperacin Cuando una misma instruccin contiene una secuencia con varias operaciones el orden de ejecucin de las mismas sigue los mismos criterios que las matemticas. No se realiza una ejecucinsecuencialsinoqueserespetaelordendeprioridadmatemtico.Esdecir,laspotencias yracestienenprioridadfrentealosproductosyloscocientes,yestos,sonprioritariosrespectoa lasumaylasdiferencias. Igualqueenmatemticassepuedenutilizarlosparntesisparamodificarelordendeejecucinde lasoperaciones,eigualqueallPHPtambinpermiteencerrarparntesisdentrodeparntesis. ejemplo13.php
<? # definamos dos variables numricas asignndoles valores $a=23; $b=34; /* hagamos una suma y escribamos directamente los resultados utilizando las instrucciones print y echo con todas sus posibles opciones de sintaxis */ print("La suma de $a + $b es: " . $a . "+" . $b . "=" . ($a+$b)."<br>"); print "La suma de $a + $b es: " . $a . "+" . $b . "=" . ($a+$b) ."<BR>"; print ("La suma de $a + $b es: " . $a . "+" . $b . "=" . ($a+$b) ."<BR>"); echo "La suma de $a + $b es: " . $a . "+" . $b . "=" . ($a+$b) ."<BR>"; echo "La suma de $a + $b es: " , $a , "+" , $b . "=" , ($a+$b) ."<BR>"; echo "La suma de $a + $b es: " , $a , "+" , $b , "=" , $a+$b ,"<BR>"; # guardemos ahora el resultado de esa operacin en una nueva variable $c=$a+$b; /*ahora presentemos el resultado utilizando esa nueva variable adviertiendo el la salida */ print ("Resultados recogidos en una nueva variable<br>"); print "La suma de $a + $b es: " . $a . "+" . $b . "=" . $c ."<BR>"; print ("La suma de $a + $b es: " . $a . "+" . $b . "=" . $c ."<BR>"); echo "La suma de $a + $b es: " . $a . "+" . $b . "=" . $c ."<BR>"; echo "La suma de $a + $b es: " , $a , "+" , $b . "=" , $c ."<BR>"; echo "La suma de $a + $b es: " , $a , "+" , $b , "=" , $c ,"<BR>"; /* modifiquemos ahora los valores de $a y $b comprobando que el cambio no modifica lo contenido en la variable $c */ $a=513; $b=648; print ("<br> C sigue valiendo: " . $c ."<br>"); # experimentemos con los parntesis en un supuesto de operaciones combinada # tratemos de sumar la variable $a con la variable $b # y multiplicar el resultado por $c. # Si escribimos print($a+$b*$c) nos har la multiplicacin antes que la suma print "<br>No he puesto parntesis y el resultado es: ".($a+$b*$c); # Si escribimos print(($a+$b)*$c) nos har la suma y luego multiplicar print "<br>He puesto parntesis y el resultado es: ".(($a+$b)*$c); ?>

PRCTICA11
Creaundocumentoeincluyeenlunformularioquepermitaintroducirvaloresnumricosendos campos de texto. Al enviarlo (puedes usar el mismo documento para el formulario y para la visualizacinderesultados)debernaparecerlosresultadosde:sumar,restar,multiplicarydividir ambos nmeros. Deber aparecer tambin el resultado (redondeado por exceso) de elevar la suma de ambos nmeros a la cuarta potencia y la raz quinta del cubo de la suma de ambos nmeros. 2.LOGARITMOSYTRIGONOMETRA
U.T.9ELEMENTOSDELLENGUAJE Pgina:2

2RMDULO:IMPLANTACINAPLICACIONESWEB

2011/2012

EnelcuadrosiguienteseresumenlasoperacionesaritmticasenPHPysusintaxis

3.CAMBIOSDEBASEYFORMATOS Formasdeasignarvaloresalavariables Cuando se asignan valores numricos a una variable PHP cabe la posibilidad de hacerlo en distintasbases.Estossonalgunosejemplos.
U.T.9ELEMENTOSDELLENGUAJE Pgina:3

2RMDULO:IMPLANTACINAPLICACIONESWEB

2011/2012

Cambiosdebase PHPdisponedefuncionesquepermitenobtenerunacadenadecaracteresconlaexpresin,en unanuevabase,deunnmeroescritoenotrabasecualquiera.

Formatodepresentacindenmeros EnPHPesposibleestablecerelformatodelapresentacindelosvaloresnumricosutilizando algunadeestasfunciones. number_format(nmero) Presentalaparteenteradelnmero(sindecimales)yutilizacomoseparadordemilesunacoma (,). number_format(nmero,nmerodecifrasdecimales) Presenta el nmero de cifras decimales que se indiquen y utiliza como separador decimal un punto(.)yelseparadordemilesesunacoma(,). number_format(nmero,nmdecimales,"sep.decimal","sep.miles") Permiteestablecerelnmerodecifrasdecimalesdelapresentacinascomoelcarcterquese establezcacomoseparadordedecimalesycomoseparadoresdemiles. Cuidado!. No te olvides de escribir los caracteres de separacin entre comillas. Aqu tienes algunosejemplos.

U.T.9ELEMENTOSDELLENGUAJE

Pgina:4

2RMDULO:IMPLANTACINAPLICACIONESWEB

2011/2012

PRCTICA12
Modificaelejerciciodelaprcticaanteriordeformaquelosresultadosobtenidosalrealizarlos clculos aparezcan con un espacio como separador de miles, un punto como separador de decimalesycuatrocifrasdecimales. 4.NMEROSALEATORIOS PHP dispone de dos funciones capaces de generar nmeros aleatorios. Se trata de la funcin rand()ydelafuncinmejoradamt_rand(). Elvalormnimodelintervaloquecontienelosnmerosaleatoriosquepuedensergeneradoses CEROenamboscasosylosvaloresmximosdecadaopcinpuedendeterminarsemediantelas funcionesgetrandmax(),paraelprimergenerador,ymt_getrandmax(),paraelsegundo. Veamosculessonesosvaloresencadaunodeloscasos.

Laformamssimpleymsdesaconsejabledegeneracindeunnmeroaleatorioesesta:

Unasemillaquemejoralaaleatoriedad El valor Unix Epoch El conocido como tiempo UNIX o tambin Unix Epoch es un sistema referenciadetiempocuyaunidadsonlossegundosyquetienesuvalorceroalas0:00:00horas (GMT)deldaunodeenerode1970. Lafunciontime()Lafuncintime()devuelveunacadenaconelnmerodesegundostranscurridos desdeelcomienzodelaUnixEpoch. Qu cuantos son? Pues mira, hasta este mismo instante han transcurrido: 1 243 523 762 segundosdesdeelcomienzodeltiempoUNIX. La funcion microtime(). Usando la funcin microtime() se obtiene unacadena a la que, adems del nmero de segundos transcurridos desde el comienzo de la Unix Epoch, se aade al
U.T.9ELEMENTOSDELLENGUAJE Pgina:5

2RMDULO:IMPLANTACINAPLICACIONESWEB

2011/2012

comienzo de ella y separado por un espacio la parte decimal de ese tiempo expresada en microsegundos. Esteeselvalordelacadenadevueltapormicrotime()enesteinstante:0.390628001243523762 donde,comovers,aparecelafraccindecimaldeltiempoUnixEpochdelantedesuvalorentero. (double)microtime().Dadoqueconmicrotime()obtenemosunacadena,esposibleconvertirlaen nmerodecomaflotanteanteponiendoaesafuncin(double). Unavezcambiadoeltipodevariableelvalordevueltopormicrotimeseconvierteen:0.390663 quecomopuedesobservaresunnmeroconseisdecimales(silasltimascifrassoncerosnose visualizarn). Sisemultiplicaelvaloranteriorpor1.000.000obtenemosunnmerodeseiscifrasyvalorentero quepuedecambiardevalorcadamillonsimadesegundo. Este nmero entero es utilizado por srand y mt_rand como semilla generadora de nmeros aleatorios.

Si antes de escribir la funcin rand() en un caso, o mt_rand() en el otro escribimos: srand((double)microtime()*1000000), en el primer caso y/o t_srand((double)microtime()*1000000), en el segundo estaremos introduciendo una semilla (al margencomentamoslaformaenquesegenera)quemejorasustancialmentelaaleatoriedaddel losnmerosobtenidos.

5.VALORABSOLUTO Lasintaxiseslasiguiente:Abs($a); ejemplo14.php


<? $MiSaldo=" -347.513 "; $MisDeseos=Abs($MiSaldo); $MisDeseos .= " "; echo $MisDeseos; ?> U.T.9ELEMENTOSDELLENGUAJE Pgina:6

2RMDULO:IMPLANTACINAPLICACIONESWEB

2011/2012

resultara: 347.513 6.CONCATENACINDECADENAS Alasvariablestipocadenaselespuedeasignarlosvaloresdedosformas: Escribiendoelcontenidoentrecomillas:$var="Textodelcontenido"; ypormediodelasintaxisdedocumentoincrustadoqueeslasiguiente: $var=<<<EOD ...contenidodelacadena... ...puedeir.... ..envariaslneas... EOD; dondeEODesunapalabracualquieraquedeberepetirseexactamenteigualalfinaldela instruccin. Peculiaridades Elnombredelavariable,elsignoigualquelaprecede,lostressmbolos<yelEODdeben escribirseenlamismalnea,queestaveznoiracabadaenpuntoycoma. Puedeincluirseeltexto(valordelavariable)entantaslneascomosedesee,perohayquetener encuenta,quealahoradevisualizareldocumentonosemantieneesaestructurayaqueHTML sloentiendelaetiqueta<BR>comoindicadordesaltodelnea. El cierre de la instruccin debe hacerse siempre escribiendo el EOD en una nueva lnea independiente que ahora s tiene que llevar el punto y coma que indica a PHP el final de una instruccin. ejemplo15.php
<TITLE>Ejemplo 15 - PHP</TITLE> </HEAD> <BODY> <? $cadena1="Esto es una cadena de texto"; $cadena2= <<<Pepe Esta es otra cadena escrita con la sintaxis de documento incrustado. Se escribe en varias lneas y tiene la sintaxis siguiente. Despus de escribir el nombre de la variable y el signo igual se ponen los tres <<< y un nombre cualquiera. En este caso, Pepe. Luego hay que saltar de lnea y escribir el texto con las lneas que se desee, pero cuidado... a la hora de visualizar la cadena con la instruccin echo todo este texto se ver seguido ya que para que se visualizaran saltos de lnea en una pgina web habra que poner las famosas etiquetas <BR>. Se indica el final de la cadena escribiendo de nuevo el nombre asignado en la primera lnea -Pepe- pero teniendo la precaucin de escribirlo en una lnea nueva al final de todo el texto... As como lo ves en el cdigo fuente. Pepe; $cadena3= <<<Pepa Esta es otra cadena con el nombre Pepa puedo escribir Pepa cuantas veces quiera porque el PHP no interpretar el final de documento incrustado hasta que no la escriba en una sola lnea y seguida del punto y coma U.T.9ELEMENTOSDELLENGUAJE

Pgina:7

2RMDULO:IMPLANTACINAPLICACIONESWEB
Pepa; echo $cadena1,"<BR>"; echo $cadena2,"<BR>"; echo $cadena3,"<BR>"; ?> </BODY> </HTML>

2011/2012

7.OPERACIONESCONCADENAS Laconcatenacindecadenas Paraconcatenar(unir),enunasola,variasporcionesdetextohemosvenidoutilizandoenlas instruccionesprintyechounpunto(.). Eloperador. Este punto es un elemento muy importante que, adems de la forma que hemos visto en las pginasanteriores,tienelossiguientesusos: Unirdoscadenasyrecogerlasenunavariable Conlasintaxis:$a="cad1"."cad2"; omediante$a=$b.$c podemosobtenerunanuevavariableformadaporlaunindostrozos. Aadircontenidosaunavariabletipostring Siutilizamosunasintaxiscomoesta:$a.="cad1" odeesteotrotipo$a.=$b(prestamuchaatencinalpuntoquevadelantedelsignoigual)se aadiraalvaloractualdelavariable$aelcontenidoindicadodespusdelsignoigual. Fjate en la importancia del punto. Si est presente, se aaden nuevos contenidos a la variable; peroenelcasodequenoloestuviera,sesustituiranesoscontenidos,conlo cualseperderalainformacinqueesavariablepudieracontener. ejemplo16.php
<? #definamos y asignemos valores a variables tipo cadena $cadena1="Esto es una cadena de texto"; $cadena2="Esta es una segunda cadena de texto"; #hagamos lo mismo con variables numricas $cadena3=127; $cadena4=257.89; # unmoslas mezclando tipos $union1=$cadena1 . $cadena2; $union2=$cadena1 . $cadena3; $union3=$cadena3 . $cadena4; #veamos que ha ocurrido echo $union1,"<br>"; echo $union2,"<br>"; echo $union3,"<br>"; # modifiquemos ahora una cadena # aadindole contenidos $cadena3 .=" Este es el texto que se aadir a la variable cadena3"; # imprimamos los resultados echo $cadena3,"<br>"; # aadamos ahora un nuevo trozo, esta vez # a partir de una cadena escrita con la U.T.9ELEMENTOSDELLENGUAJE Pgina:8

2RMDULO:IMPLANTACINAPLICACIONESWEB
# sintaxis de documento incrustado $cadena3 .= <<<Pepito Ahora le aado a la cadena este trocillo asignado con el "formato" de documento incrustado Pepito; # visualicemos el resultado echo $cadena3,"<br>"; ?>

2011/2012

8.ARRAYESCALARYASOCIATIVO Un array es sencillamente una tabla de valores. Cada uno de los elementos de esa tabla se identificapormediodeunnombre(comnparatodos)yunndice(quediferenciaraacadauno deellos).Lasintaxisquepermitedefinirelementosenunarrayesesta: $nombre[ndice] $nombre utiliza exactamente la misma sintaxis empleada para definir variables, con la nica particularidaddequeahoradebenaadrseleloscorchetesylosndices. Elndicepuedeserunnmero(habraqueescribirlodentrodelcorchetesincomillas),unacadena (quehabraqueponerenelcorcheteencerradaentrecomillassencillas'),ounavariablePHPen cuyocasotampoconecesitarairentrecomillas. Cuandolosndicesdeunarraysonnmerossedicequeesescalarmientrasquesifuerancadenas selellamaraarrayasociativo. Arraysescalares Los elementos de un array escalar puede escribirse con una de estas sintaxis: $a[]=valor $a[xx]=valor. En el primero de los casos PHP asigna los ndices de forma automtica atribuyendo a cada elemento el valor entero siguiente al ltimo asignado. Si es el primero que se define le pondr ndice0(CERO).Enelsegundodeloscasos,seremosnosotrosquienespongamos(xx)elnmero correspondientealvalordelndice. Siyaexistieraunelementoconesendice,secambiaraelvalordesucontenido,encasocontrario crearunnuevoelementodelarrayyseleasignaracomovalorloespecificadodetrsdelsigno igual,quedelasmismaformaqueocurraconlasvariablesdeberairentrecomillassifuerauna cadenaosinellas,sisetrataradenmeros. Arraysasociativos Los elementos de un array asociativo pueden escribirse usando la siguiente sintaxis: $a['ndice']=valor En este caso estamos obligados a escribir el nombre del ndice que habr de ser una cadena y debeponerseentrecomillas. Tantoenestesupuestocomoenelanterior,esposibleybastantefrecuenteutilizarcomondice elcontenidodeunavariable.Elmododehacerlosera: $a[$ind]=valor Enestecaso,seacualfuereelvalordelavariable$ind,elnombredelavariablenuncasepone entrecomillas. Tablas(arrays)unidimensionales Mediante el uso de arrays podemos utilizar el mismo nombre para varias variables diferencindolasentresmediantendicesdistintos.
U.T.9ELEMENTOSDELLENGUAJE Pgina:9

2RMDULO:IMPLANTACINAPLICACIONESWEB

2011/2012

ejemplo17.php
<? # Crearemos un array escalar (basta con definir un elemento) $a[2]="Este elemento es el segundo del array"; # creemos un nuevo elemento de ese array # esta vez de forma automtica # si pongo corchetes vacios va aadiendo ndices automticamente $a[]="Ser este tercero?"; # comprobemos que le ha puesto ndice 3 echo "El elemento ".$a[3]." tiene ndice 3 (siguiente a 2) <br>"; # ahora insertemos un nuevo elemento con ndice 32 $a[32]="Mi ndice es 32"; # insertemos otro elemento de forma automtica $a[]= "Ir a parar al ndice 33 este elemento?"; # la insercin se har con ndice 33, comprobmoslo print "Vemos que contiene el elemento de ndice 33 ...".$a[33]."<br>"; # qu ocurrir si pido que imprima el elemento 21 que nadie ha definido # seguramente estar vacio, comprobmoslo!! print ("Aqu--> ". $a[21]. "<--- si es que hay algo<br>");

# ahora crearemos un nuevo array llamado $b # insertmosle de forma automtica su PRIMER elemento $b[]="Estoy empezando con el array b y mi ndice ser cero"; # comprobemos que efectivamente ha empezado con ndice CERO print ($b[0]."<br>"); # veamos ahora eso de los arrays asociativos # creemos uno llamado $c con varios elementos $c["objeto"]="coche"; $c["color"]="rojo"; $c["tamao"]="ideal"; $c["marca"]= "Ferrari"; $c["precio"]="prohibitivo para un humilde docente"; U.T.9ELEMENTOSDELLENGUAJE Pgina:10

2RMDULO:IMPLANTACINAPLICACIONESWEB

2011/2012

#encadenemos variables para hacer una salida # pondremos cadenas " " para que no aparezcan los textos # pegados unos a otros.. $salida="<H2> El ". $c["objeto"] ." ".$c["marca"]." ".$c["color"]; $salida .=" tiene el tamao ideal ".$c["tamao"]; $salida .=" y su precio es ".$c["precio"]; $salida .="</H2>"; print $salida; # sigamos experimentando ahora # qu ocurrira si nos olvidamos de poner nombre al ndice # e insertamos un corchete vacio lo creara?que ndice pondra? # probemos .... $c[]="crear un array escalar nuevo y le pondr ndice cero?"; # tratemos ahora de visualizar esa variable # probemos a escribir $c[0] porque PHP # habr entendido que queremos un array escalar # y como no existe ninguno con ese nombre empezar por cero # comprobmoslo echo $c[0]; ?>

PRCTICA13
Creaunformularioenelquesepermitaintroducirunnmerocualquieraenunacajadetexto.Al enviar el formulario deber aparecer un mensaje en letra indicando el resto de dividir entre doceelvalortransferido. Elprocedimientopodraserelsiguiente: Crearunarrayconteniendolosnombresdetodoslosrestosposibles(divisinexacta,uno,dos, tres...hastaonce). Asignarcomondiceslosvaloresnumricoscorrespondientesalosliteralesquecontienecada elemento. 9.ARRAYSBIDIMENSIONALES Los arrays bidimensionales pueden entenderse como algo muy similar a una tabla de doble entrada. Cadaunodeloselementosseidentificasiguesiendovlidoelnombrenicoqueseusabaenlos unidimensionales por un nombre ($nombre) seguido de dos ([]) que contienen los ndices (en estecasosondosndices)delarray. Losndicespuedenserdetipoescalarequivalenalnmerodefilaycolumnaquelaceldaocupa enlatablaopuedeserasociativosloqueequivaldraenalgunamedidaausarcomondiceslos nombresdelafilaydelacolumna. Enestesupuesto,tambin,seempiezananumerarlosarraysescalaresapartirdeCERO. Arraysescalares Loselementosdeunarraybidimensionalescalarpuedenescribirseusandounadeestassintaxis: $a[][]=valoro$a[xx][]=valoro$a[][xx]=valorotambin$a[xx][yy]=valor EnelprimerodeloscasosPHPasignaautomticamentecomoprimerndiceelvalorquesigueal ltimoasignadoy,sieselprimeroquesedefine,lepondrcomondice0(CERO).
U.T.9ELEMENTOSDELLENGUAJE Pgina:11

2RMDULO:IMPLANTACINAPLICACIONESWEB

2011/2012

Seacualfuereelvalordeprimerndicealsegundoseleasignarceroyaqueesenestemismo momentocuandosehabrcreadoelprimeroy,portanto,ancarecerdeelementos. Enelsegundodeloscasos,asignamosunvaloralprimerndice(xx)yserelsegundoquien se incremente en una unidad respecto al de valor ms alto de todos aquellos cuyo primer ndice coincideconelespecificado. La tercera opcin es bastante similar a la anterior. Ahora se modificara automticamente el primerndiceyseescribiraelcontenido(xx)comovalordelsegundo. Enlacuartadelasopcionesseasignanlibrementecadaunodelosndices(xxeyy)ponindoles valoresnumricos. Arraysasociativos Los elementos de un array asociativo bidimiensional se pueden escribir usando la siguiente sintaxis:$a["ndice1"]["ndice2"]=valor Enestecaso,losndicesserncadenasyseescribirnentrecomillas. Arraysmixtos PHPpermiteutilizartambinarraysmixtos.Seraesteelcasodequeunodeellosfueraescalaryel otroasociativo. Igual que ocurra con los unidimensionales, tambin aqu podemos utilizar valores de variables comondices. ejemplo18.php
<? # rellenamos el array desde [0][0] hasta [0][4] # la insercin automtica hara que este primero fuera [0][0] $a[][]=" "; # ahora pondremos cero como ndice del primer array y dejemos que PHP # nos vaya insertando automticamente el segundo $a[0][]="3-2";$a[0][]="5-3";$a[0][]="7-1";$a[0][]="0-2"; #ahora desde [1][0] hasta [1][4] #este primero lo dejamos como automtico en ambos ndices # de esta forma el primero tomar valor uno (siguiente al anterior) # de forma automtica $a[][]="0-11"; # repetimos el proceso anterior $a[1][]=" ";$a[1][]="2-1";$a[1][]="1-0";$a[1][]="1-2"; # y repetimos de nuevo, ahora creara 2 como primer ndice $a[][]="0-0"; #insertaramos los restantes valores de ndice 2 $a[2][]="1-3";$a[2][]=" ";$a[2][]="1-4";$a[2][]="2-0"; # nuevo incremento del primer ndice $a[][]="1-0"; # rellenamos $a[3][]="6-3";$a[3][]="14-3 ";$a[3][]=" ";$a[3][]="1-0"; # nuevo y ltimo incremento de primer ndice $a[][]="1-1"; # rellenamos de nuevo $a[4][]="2-3";$a[4][]="0-1 ";$a[4][]="1-1";$a[3][]=""; # como vers el proceso no tiene complicaciones, pero ... pesadillo si es # verdad que si tuviramos una base de datos sera ms fcil? # estamos en ello, todo se andar... U.T.9ELEMENTOSDELLENGUAJE Pgina:12

2RMDULO:IMPLANTACINAPLICACIONESWEB
# # # # # tendramos que ver esos valores pero.. escribir "a mano" una tabla puede ser una tortura, as que mejor introducimos una bucle, otro recurso que estudiaremos pronto para esa labor repetitiva de mostrar en una tabla todos los datos del array

2011/2012

# Sera algo como esto # creamos la etiqueta de apertura de una tabla print ("<TABLE BORDER=2>"); # ahora dos bucles anidados (rojo uno, magenta el otro) # para rellenar las celdas de cada fila (el magenta) # y para insertar las etiquetas <TR> utilizaremos el rojo for ($i=0;$i<5;$i++){ print("<tr>"); for($j=0;$j<5;$j++) { print("<td>".$a[$i][$j]."</td>"); } } #ponemos la etiqueta de cierre de la tabla print("</table>"); ?>

10.ARRAYSMULTIDIMENSIONALES PHPpermiteelusodearrayscondimensinsuperiorados.Paramodificarladimensindelarray bastaconiraadiendonuevosndices. $a[x][y][z]=valor; asignaraunvaloralelementodendicesx,yyzdeunarraytridimensionaly$a[x][y][z][w]=valor; haralomismo,ahoraconunarraydedimensincuatro. Puedentenercualquiertipodendices:escalares,asociativosy,tambin,mixtos. Lafuncinarray(); Paraasignarvaloresaunamatrizpuedeusarselafuncinarray(),quetienelasiguientesintaxis: $a=array( ndice0=>valor, ....., ndicen=>valor, ); ejemplo:
$z=array ( 0 => 2, 1 => "Pepe", 2 => 34.7, 3 => "34Ambrosio", );

producirigualresultadoque: $z[0]=2; $z[1]="Pepe"; $z[2]=34.7; $z[3]="34Ambrosio";


U.T.9ELEMENTOSDELLENGUAJE Pgina:13

2RMDULO:IMPLANTACINAPLICACIONESWEB

2011/2012

Anidandoenarray(); Lafuncinarray()permiteescribirarraysdecualquierdimensinutilizandolatcnicadeanidado. Sipretendemosescribirloselementosdeestearray: $z[0][0]=34; $z[0][1]=35; $z[0][2]=36; $z[1][0]=134; $z[1][1]=135; $z[1][2]=136; podramoshacerloas:
$z=array( 0 => array ( 0 => 34, 1 => 35, 2 => 36, ), 1 => array ( 0 => 134, 1 => 135, 2 => 136, ) );

Comopuedesobservar,setratadesustituirlosvaloresasignadosaloselementosdeunaprimera funcin array() por otra nueva funcin array que contiene los segundos ndices as como los valoresasignadosalosmismos. Elanidadosucesivopermitiragenerararraysdecualquierdimensin. Aunque en el ejemplo anterior nos hemos referido a un array escalar, idntico procedimiento sera vlido para arrays asociativos con slo cambiar los nmeros por cadenas escritas entre comillas. Estepodraserunejemplodearrayasociativo:
$z["a"]["A"]=34; $z["a"]["B"]=35; $z["a"]["C"]=36; $z["b"]["A"]=134; $z["b"]["B"]=135; $z["b"]["C"]=136;

quepodradefinirsetambindeestaforma:
$z=array( "a" => array ( "A" => 34, "B" => 35, "C" => 36, ), "b" => array ( "A" => 134, "B" => 135, "C" => 136, ) );

A medida que la dimensin se hace mayor la sintaxis requiere muchsima ms atencin y los erroressonpocomenosqueinevitables.
U.T.9ELEMENTOSDELLENGUAJE Pgina:14

2RMDULO:IMPLANTACINAPLICACIONESWEB

2011/2012

11.PRESENTACINDENMEROS Salidasconformato Ni la funcin echo, ni tampoco print permiten establecer una presentacin (formato) en sus salidas, excepto que alguna de las variables que se use contenga el resultado de una funcin number_format. Lafuncinprintf()ofreceungrannmerodeposibilidadesenestesentido.Tantolasintaxiscomo los valores de los diferentes parmetros cuando se trate de presentar nmeros las tienes resumidasaqu.

U.T.9ELEMENTOSDELLENGUAJE

Pgina:15

2RMDULO:IMPLANTACINAPLICACIONESWEB

2011/2012

12.CADENASALFANUMRICAS Formatosencadenas

U.T.9ELEMENTOSDELLENGUAJE

Pgina:16

2RMDULO:IMPLANTACINAPLICACIONESWEB

2011/2012

Existe otra funcin PHP con caractersticas muy similares a la anterior. Se trata de sprintf(). La sintaxisesidnticasprintf (cadenadeformato,variable1,variable2,...)ysunica diferenciacon printfesque,mientrasqueprintf()imprimelasvariablesutilizandoelformatoindicado,sprintf() puedeguardarenunanuevavariablelacadenaresultantedelaaplicacindelformato. Funcionesdecadenas Algunasdelasfuncionesquepermitenmanejarlosformatosdelascadenasdecaracteresson: chr(n) DevuelveelcarctercuyocdigoASCIIesn. ord(cadena) DevuelveelcdigoASCIIdelprimerodeloscaracteresdelacadena. strlen(cadena) Devuelvelalongitud(nmerodecaracteres)delacadena.Losespaciossonconsideradoscomoun carcterms. strtolower(cadena) Cambiatodosloscaracteresdelacadenaaminsculas. strtoupper(cadena) Convierteenmaysculastodosloscaracteresdelacadena. ucwords(cadena) Convierteamaysculaslaprimeraletradecadapalabra. ucfirst(cadena) Convierteamaysculaslaprimeraletradelacadenayponeenminsculastodaslasdems.
U.T.9ELEMENTOSDELLENGUAJE Pgina:17

2RMDULO:IMPLANTACINAPLICACIONESWEB

2011/2012

ltrim(cadena) Eliminatodoslosespaciosquepudierahaberalprincipiodelacadena. rtrim(cadena) Eliminatodoslosespaciosqueexistieranalfinaldelacadena. trim(cadena) Eliminalosespaciostantoalprincipiocomoalfinaldelacadena chop(cadena) Eliminalosespaciosalfinaldelacadena.Esidnticaartrim. Tantotrim,comoltrimyrtrimeliminan,ademsdelosespacios,lassecuencias:\n,\r,\t,\vy\0; llamadastambincaracteresprotegidos. substr(cadena,n) Si el valor de n es positivo extrae todos los caracteres de la cadena a partir del que ocupa la posicin ensima a contar desde la izquierda. Si el valor de n es negativo sern extrados los n ltimoscaracterescontenidosenlacadena. substr(cadena,n,m) Sinymsonpositivosextraemcaracteresapartirdelqueocupalaposicinensima,deizquierda aderecha.Sinesnegativoymespositivoextraem(contadosdeizquierdaaderecha)apartirdel queocupalaposicinensimacontadadederechaaizquierda.Sinespositivoymesnegativo extraelacadenacomprendidaentreelensimocarcter(contadosdeizquierdaaderecha)hasta el emsimo, contando en este caso de derecha a izquierda. Si n es negativo y m tambin es negativo extrae la porcin de cadena comprendida entre el emsimo y el ensimo caracteres contando,enamboscasos,dederechaaizquierda.Sielvalorabsolutodenesmenorqueeldem devuelveunacadenavaca. strrev(cadena) Devuelvelacadenainvertida. str_repeat(cadena,n) Devuelvelacadenarepetidatantasvecescomoindican. str_pad(cad,n,rell,tipo) Aadealacadenacadloscaracteresespecificadosenrell(unoovarios,escritosentrecomillas) hasta que alcance la longitud que indica n (unnmero). El parmetrotipo puedetomar uno de estos tres valores (sin comillas): STR_PAD_BOTH (rellena por ambos lados) STR_PAD_RIGHT (rellenaporladerecha)STR_PAD_LEFT(rellenaporlaizquierda).SiseomitelacadenadeRelleno utilizarespaciosysiseomiteeltiporellenarporladerecha. Estossonalgunosejemplosdeaplicacindelasfuncionesdemanejodecadenas:

U.T.9ELEMENTOSDELLENGUAJE

Pgina:18

2RMDULO:IMPLANTACINAPLICACIONESWEB

2011/2012

U.T.9ELEMENTOSDELLENGUAJE Pgina:19

2RMDULO:IMPLANTACINAPLICACIONESWEB

2011/2012

PRCTICA14
Creaunformulariomedianteelquepuedastransferirunvalornumricoyuntexto(uninputtipo textyotrotextarea). Tratadequeelscriptquelosreciba,permitavisualizarsusvaloresdeformaqueelvalornumrico tenga 2 decimales y acabe con la palabra euros, y que la parte entera se complete (por la izquierda)conasteriscoshastatenerunalongitudde12caracteres. El contenido del textarea debera visualizarse ntegramente en minsculas, excepto los diez primeroscaracteresquedeberanverseenmaysculas. 13.OPERADORESDECOMPARACIN $A==$B Eloperador==comparalosvaloresdedosvariablesydevuelve1(CIERTO)enelcasodequesean igualesyelvalorNULLcarcterASCII0(FALSO)cuandosondistintas.Medianteesteoperador se pueden comparar variables de distinto tipo. Para comparar una cadena con un nmero se extraeelvalorenterodelacadena(sillevadgitosalcomienzolosextraeyencasocontrariole asignaelvalorcero)yutilizaesevalorparahacerlacomparacin.Cuandosecomparancadenas discrimina entre maysculas y minsculas ya que utiliza los cdigos ASCII de cada uno de los caracteresparahacerlacomparacin.Lacomparacinsehacedeizquierdaaderechaydevuelve1 (CIERTO)sloenelcasoquecoincidanexactamenteloscontenidosdeambascadenas. $A===$B El operador ===es similar al anterior, pero realiza la comparacin en sentido estricto. Para que devuelva1esnecesarioqueseanigualeslosvaloresdelasvariablesytambinsutipo. $A!=$B El operador != devuelve 1 cuando los valores de las variables son distintos (en general ! indica negacin,enestecasopodramosleernoigual)ydevuelveNULLcuandosoniguales. Esteoperadornocomparaensentidoestricto,porloquepuedeconsiderarigualeslosvaloresde dosvariablesdedistintotipo. $A<$B Eloperador<devuelve1cuandolosvaloresde$Asonmenoresquelosde$B.Loscriteriosde comparacinsonlossiguientes: Losvaloresnumricossiguenelcriteriomatemtico. Cuandosetratadeunnmeroyunacadenaextraeelvalornumricodesta(escerosinohay ningndgitoalprincipiodelamisma)yhaceunacomparacinmatemtica. Enelsupuestodedoscadenas,comparaunoaunodeizquierdaaderechaloscdigosASCII decadaunodeloscaracteres(primeroconprimero,segundoconsegundo,etctera). SialhacerestacomprobacinencuentraenlaprimeracadenauncarctercuyocdigoASCIIes mayorqueelcorrespondientedelasegundacadena,oencuentraquetodossonigualesenambas cadenas devuelve NULL. Solo en el caso de no existir ninguno mayor y s haber al menos uno menordevolverUNO.Cuandolascadenastengandistintalongitud,considerar(aefectosdela comparacin)queloscaracteresquefaltanenlacadenamscortasonNULL(ASCII0). $A<=$B Secomportadeformaidnticaalanterior.Lanicadiferenciaesqueahoraaceptarcomociertos loscasosdeigualdadtantoenelcasodenmeroscomoeneldecdigosASCII. $A>$B Es idntico en el modo de funcionamiento a $A < $B. Solo difiere de ste en el criterio de comparacinqueahorarequerirquelosvaloresde$Aseanmayoresquelosdelavariable$B.
U.T.9ELEMENTOSDELLENGUAJE Pgina:20

2RMDULO:IMPLANTACINAPLICACIONESWEB

2011/2012

$A>=$B Aadealanteriorlaposibilidaddecertezaencasodeigualdad. 14.OPERADORESLGICOS Medianteoperadoreslgicosesposibleevaluarunconjuntodevariableslgicas,esdecir,aquellas cuyosvaloresseannicamente:VERDADEROoFALSO(1NUL). Elresultadodeesaevaluacinsersiempre1NULL. $AAND$B El operador AND devuelve VERDADERO (1) en el caso de que todas las variables lgicas comparadasseanverdaderas,yFALSO(NUL)cuandoalgunadeellasseafalsa. $A&&$B Eloperador&&secomportadeformaidnticaaloperadorAND.Lanicadiferenciaentreambos esqueoperancondistintaprecedencia. $AOR$B Para que el operador OR devuelva VERDADERO (1) es suficiente que una sola de las variables lgicascomparadasseaverdadera.nicamentedevolverFALSO(NULL)cuandotodasellassean FALSAS. $A||$B Eloperador||secomportadeformaidnticaaloperadorOR.Sunicadiferenciaeselordende precedenciaconelqueopera. $AXOR$B El operador XOR devuelve VERDADERO (1) slo en el caso de que sea cierta una sola de las variables,yFALSO(NUL)cuandoambasseanciertasoambasseanfalsas. !$A Este operador NOT (negacin) devuelve VERDADERO (1) si la variable lgica $A es FALSA y devuelveFALSO(NUL)sielvalordeesavariable$AesVERDADERO. Sintaxisalternativa Al utilizar operadores lgicos se pueden sustituir las variables lgicas por expresiones que den comoresultadoesetipodevalores. Ordendeprecedencia Igualqueenlasmatemticas,tambinaqu,hayunordendeprioridadqueeselsiguiente: NOT,&&,||,AND,XORy,porltimo,OR. 15.OPERADORESDEINCREMENTO Los caracteres ++ y escritos al lado del nombre de una variable producen incrementos o decrementosdeunaunidadenelvalordelamisma. De igual forma, los operadores +=n y =n escritos a la derecha del nombre de una variable producenincrementosodecrementosdenunidadesenelvalordelavariable. Comoveremosacontinuacin,losoperadores++ysecomportandedistintaformasegnestn situadosalaizquierdaoaladerechadelavariable. Operadoresdepreincremento++$Ay$A Este operador incrementa el valor de la variable en una unidad (+1 o 1) antes de ejecutar el contenidodelainstruccin. $A+=ny$A=n
U.T.9ELEMENTOSDELLENGUAJE Pgina:21

2RMDULO:IMPLANTACINAPLICACIONESWEB

2011/2012

Este operador incrementa el valor de la variable en n unidades (+n o n) y luego ejecuta el contenidodelainstruccin. Operadoresdepostincremento$A++y$A Cuando los operadores ++ o estn situados a la derecha de la variable los incrementos no se producenhastaqueseejecutelainstruccinsiguiente. 16.OPERADORESCONDICIONALES Losoperadorescondicionalessonlaherramientaquepermitetomardecisionestalescomo:hacer onohacer,ytambin:haceralgobajodeterminadascondicionesyotracosadistintaencasode quenosecumplan. Alternativasdesintaxis Este operador permite diferentes formas de sintaxis que podemos utilizar segn nuestra conveniencia.
if(condicin) ..instruccin... ;

if(condicin){ ..instruccin 1... ; ..instruccin 2... ; .... ; }

if(condicin) : ..instruccin 1... ; ..instruccin 2... ; .... ; endif;

if(condicion){ ?> ..Etiquetas HTML... ; ..HTML... ; .... ; <? } ?>

if(condicion) : ?> ..Etiquetas HTML... ; ..HTML... ; .... ; <? endif; ?>

if(condicion){ ... instrucciones... ... a ejecutar cuando se cumple la condicin } else { ... instrucciones... ... a ejecutar cuando NO se cumple la condicin }

permitiendo tambin la sintaxis alternativa :, endif, aunque en este caso hay que hacer una precisin,lallavedecierrequeibadelantedeelseseeliminaynoessustituidaporningncarcter nismboloespecial.
U.T.9ELEMENTOSDELLENGUAJE Pgina:22

2RMDULO:IMPLANTACINAPLICACIONESWEB
<?if(condicion): ?> ... cdigo HTML ... a ejecutar cuando se cumple la condicin <? else: ?> ... codigo HTML... ... a ejecutar cuando NO se cumple la condicin <? endif; ?>

2011/2012

(condicin) ? (opc1) : (opc2)

if(condicion1){ ... instrucciones... ... a ejecutar cuando se cumple la condicin1 }elseif(condicion2){ ... instrucciones... ... a ejecutar cuando se cumple la condicin2 sin cumplirse condicin1 } else { ... instrucciones... ... a ejecutar cuando NO se cumple ni la condicin1 ni la condicion2

if(condicin1){ ... instrucciones... if(condicin2){ ... instrucciones... } else { ...instrucciones } }else{ ... instrucciones... ...instrucciones... }

Lafuncinexit() Cuandoseejecutaexit()seinterrumpelaejecucindelscriptconloquelarespuestadelservidor alapeticindelclienteincluirnicamenteloscontenidosgeneradosantesdesuejecucin. ejemplo19.php


<? # definimos dos variables y les asignamos un valor # podran haberse obtenido por cualquier otro procedimiento # un array, a travs de un formulario cuya accin ejecute este script $A=3; $B="3"; if ($A==$B) print ("A es igual B"); # # # # # cualquier otra instruccin que incluyramos de aqu en adelante se ejecutara independientemente de que la condicin se cumpla o no ya que esta forma de if (sin llaves) nicamente considera la primera instruccin comprobmoslo en este otro supuesto Pgina:23

U.T.9ELEMENTOSDELLENGUAJE

2RMDULO:IMPLANTACINAPLICACIONESWEB

2011/2012

if ($A<$B) print ("A es menor que B"); print("<br>A no es menor que b, pero esto saldr<br>"); print("Esta es la segunda instruccin. No la condicionar el if"); ?>

ejemplo20.php
<? $A=3; $B="3"; # en este caso cerraremos entre llaves las lneas # que deben ejecutarse si se cumple la condicin if ($A==$B){ print ("A es igual B"); echo "<br>"; echo "Este if tiene varias instrucciones contenidas entre llaves<br>"; } # una sintaxis alternativa a las llaves # sustituyamos la { por : y la } por endif if ($A==$B): print ("A es igual B"); echo "<br>"; echo "Hemos cambiado {} por : endif"; endif; ?>

ejemplo21.php
<? $a=5; # observa que ponemos la etiqueta de fin de script # despus de la llave de apertura if ($a==5){ ?> <!-- Aqu estamos poniendo HTML puro no estamos dentro del script PHP //--> <H1>Esto no ha sido interpretado por PHP</H1> <!-- en la lnea siguiente a este comentario volveremos a PHP para insertar la llave que indica el fin del if //--> <? } ?> <? # hagamos lo mismo cambiando {} por : endif if ($a==5): ?> <!-- Aqu estamos poniendo HTML puro no estamos dentro del script PHP //--> <H2>Esto tampoco ha sido interpretado por PHP</H2> <!-- en la lnea siguiente a este comentario volveremos a PHP para insertar la llave que indica el fin del if //--> <? endif; ?>

ejemplo22.php
<? $A=3; $B="4"; if ($A==$B){ #estas instrucciones se ejecutaran si se cumple la condicin print ("A es igual B"); echo "<br>"; echo "Este if tiene varias instrucciones"; }else{ # estas se ejecutaran en el caso de no cumplirse U.T.9ELEMENTOSDELLENGUAJE

Pgina:24

2RMDULO:IMPLANTACINAPLICACIONESWEB

2011/2012

# las condiciones especificadas en el fi print("A no es igual que B"); echo "<br>"; echo ("La estructura de control se ha desviado al else"); } ?>

ejemplo23.php
<? $a=3; # observa que ponemos la etiqueta de fin de script # despus de los dos puntos if ($a==5): ?> <!-- Aqu estamos poniendo HTML puro no estamos dentro del script PHP //--> <H1>Esto no es PHP. A es igual 5</H1> <!-- en la linea siguiente a este comentario volveremos a PHP para insertar el else seguido de dos puntos y cerramos de nuevo el script con ?>//--> <? else: ?> <!-- Aqu ms HTML para el (else) caso de que no se cumpla la condicin //--> <H2>Esto no es PHP. Es el resultado del ELSE</H2> <!-volveremos a PHP para insertar en endif que indica el fin del if //--> <? endif; ?>

ejemplo24.php
<? $a=8; ($a==8) ? ($B="El valor de a es 8"): ($B="El valor de a no es 8"); echo $B; ?>

ejemplo25.php
<? $a=5; ($a==8) ? ($B="El valor de a es 8"): ($B="El valor de a no es 8"); echo $B; ?>

ejemplo26.php
<? $a=3; if ($a==1){ echo "El valor de la variable A es 1"; }elseif ($a==2){ echo "El valor de la variable A es 2"; }elseif ($a==3){ echo "El valor de la variable A es 3"; }else{ echo "La variable A no es 1, ni 2, ni 3"; } ?>

ejemplo27.php
<? $a=-7; if ($a==1){ echo "El valor de la variable A es 1"; }elseif ($a==2){ U.T.9ELEMENTOSDELLENGUAJE

Pgina:25

2RMDULO:IMPLANTACINAPLICACIONESWEB
echo "El valor de la variable A es 2"; }elseif ($a==3){ echo "El valor de la variable A es 3"; }else{ echo "La variable A no es 1, ni 2, ni 3"; } ?>

2011/2012

ejemplo28.php
<? $a=2; if ($a==1): ?> <H1>A es igual a 1</H1> <? elseif($a==2): ?> <H1>A es igual a 2</H1> <? elseif($a==3): ?> <H1>A es igual a 3</H1> <? else: ?> <H1>A no es igual ni a 1, ni a 2, ni a 3</H1> <? endif; ?>

ejemplo29.php
<? $a=8; if ($a==1): ?> <H1>A es igual a 1</H1> <? elseif($a==2): ?> <H1>A es igual a 2</H1> <? elseif($a==3): ?> <H1>A es igual a 3</H1> <? else: ?> <H1>A no es igual ni a 1, ni a 2, ni a 3</H1> <? endif; ?>

PRCTICA15
Diseaunformularioconuninputtipotextoenelquepuedasescribirnmeros.Alpulsarelbotn deenviardebellamaraunscriptquedebedecirnossielnmeroenviadofue:positivo,ceroo negativo. 17.LAFUNCINSWITCH Unaalternativaalusodecondicionalesdeltipoifeslafuncinswitch.Setratadeuncondicional queevalaunavariabley,segnsuvalor,ejecutaunasinstruccionesuotras. Susintaxiseslasiguiente:
switch ( variable ) { case n1: instrucciones caso n1... ..................... case n2: instrucciones caso n2... ..................... }

switch ( variable ) { case n1: instrucciones caso n1... U.T.9ELEMENTOSDELLENGUAJE Pgina:26

2RMDULO:IMPLANTACINAPLICACIONESWEB
..................... break; case n2: instrucciones caso n2... ..................... break; }

2011/2012

Cuando PHP encuentra el break interrumpe la ejecucin y no la reanuda hasta la instruccin siguienteala}quecierralafuncinswitch. Insertando break en cada una de las opciones case, slo se ejecutaran las instrucciones contenidasentrecasenumyesebreak. default: Bajo este nombre (default:) se pueden incluir dentro de la funcin switch un conjunto de instrucciones que solo sern ejecutadas en el caso que el valor de la variable no coincida con ningunodeloscase.Sucomportamientoesequivalenteaelseenelcondicionalif. ejemplo30.php
<? # esta es la variable que controlar la funcin switch $i=1; switch ($i) { #insertamos la etiqueta case 0 y a continuacin # las instrucciones correspondientes case 0: print "i es igual a 0 - No he puesto el break<br>"; # # # # # insertamos la etiqueta case 1 y a continuacin las instrucciones correspondientes como no hemos puesto break y en este ejemplo $i=1 se ejecutarn todas las instrucciones escritas de aqu en adelante case 1: print "i es igual a 1 - No he puesto el break<br>"; case 2: print "i es igual a 2 - No he puesto el break<br>"; }; # ahora incluiremos break al final de las instrucciones de cada case # con ello lograremos que solo se ejecuten las instrucciones correspondientes # a cada uno de ellos switch ($i) { case 0: print "i es igual a 0 - Ahora lleva break<br>"; break; case 1: print "i es igual a 1 - Ahora lleva break<br>"; break; case 2: print "i es igual a 2 - Ahora lleva break<br>"; break; } ?>

U.T.9ELEMENTOSDELLENGUAJE

Pgina:27

2RMDULO:IMPLANTACINAPLICACIONESWEB

2011/2012

ejemplo31.php
<? $i=3; switch ($i) { case 0: print "La variable i es 0<br>"; break; case 1: print "La variable i es 1<br>"; break; case 2: print "La variable i es 2<br>"; break; # al introducir default y dado que $i=3 se ejecutarn # las instrucciones contenidas aqu ya que la variable # no coincide con ninguno de los case establecidos default: print "La variable i es mayor que dos o menor que cero"; break; } ?>

18.BUCLESWHILE La necesidad de repetir la ejecucin de instrucciones es algo habitual en el mundo de la programacin.


while(condicin) ...instruccin

Con esta sintaxis estaremos indicando que la instruccin siguiente (slo una instruccin) ha de ejecutarsecontinuayrepetidamentehastaquedejedecumplirselacondicinestablecida.
while(condicin){ ...instruccin ..... }

while(condicin): ...instruccin ..... endwhile; while(condicin) : ?> ...etiquetas HTML ..... <? endwhile; ?> while(condicin1): ...instruccin while(condicin2) { ...instruccin ..... } ..... endwhile;

ejemplo32.php
<? # asignemos un valor a la variable $A U.T.9ELEMENTOSDELLENGUAJE Pgina:28

2RMDULO:IMPLANTACINAPLICACIONESWEB
$A=0; /* establezcamos la condicin menor que cinco e insertemos dentro de la instruccin algo que modifique el valor de esa variable de modo que en algn momento deje de cumplirse la condicin; de no ocurrir esto, el bucle se repetira indefinidamente en este ejemplo ser el autoincremento ++ de la variable el que har que vaya modificndose su valor*/

2011/2012

while ($A<5) echo "El valor de A es: ",$A++,"<br>"; # comprobemos que este while solo ejecuta una instruccin # la delimitada por el punto y coma anterior print("Esto solo aparecer una vez. While no lo incluye en su bucle"); ?>

ejemplo33.php
<? $A=0; /* utilicemos ahora el bucle para crear un tabla HTML empecemos escribiendo la etiqueta de apertura de esa tabla fuera del bucle (ya que esa se repite una sola vez) y utilicemos el bucle para escribir las celdas y sus contenidos */ print ("<table width=300 border=2>"); while ($A<=5){ echo "<tr><td align=center>"; print $A; # esta instruccin es importantsima # si no modificamos el valor de $A el bucle sera infinito $A++; print("</td></tr>"); } # cerremos la etiqueta table print "</table>"; ?>

ejemplo34.php
<? # utilicemos whiles anidados para construir una tabla de $filas=5; $columnas=3; # insertemos la etiqueta de apertura de la tabla print ("<table border=2 width=400 align=center>"); # un primer while utiliza como condicin que filas sea mayor que cero # en este caso, la variable tendr que disminuyendo su valor con $filas-# para escribir las etiquetas y # y el modificador de la variable filas # y un segundo while es para insertar las etiquetas correspondientes # a las celdas de cada fila while ($filas>0): echo "<tr>"; $filas--; while ($columnas>0): echo "<td>"; print "fila: ".$filas." columna: ".$columnas; print ("</td>"); $columnas--; endwhile; /* muy importante tendremos que reasignar a la variable columnas su valor inicial para que pueda ser utilizado en la prxima fila U.T.9ELEMENTOSDELLENGUAJE Pgina:29

2RMDULO:IMPLANTACINAPLICACIONESWEB

2011/2012

ya que el bucle va reduciendo ese valor a cero y en caso de no restaurar el viejo valor no volvera a ejecutarse ya que no cumple la condicin de ser mayor que cero */ $columnas=3; echo "</TR>"; endwhile; # por ultimo la etiqueta de cierre de la tabla print "</table>"; ?>

PRCTICA16
Modificaelejemploanteriorparaquelatablaquesevisualicetengaelsiguienteaspecto:

Vercdigofuente PHP dispone de la funcin show_source('pag'); que permite visualizar el cdigo fuente del documentoqueseindicaenelparmetropag. 19.BUCLESDO...WHILE Lasintaxiseslasiguiente:
do { ...intruccin 1... .... instruccion2... } while(condicin) ;

Sediferenciadewhileenqueenestecasosecompruebalacondicindespusdehaberejecutado lasinstruccionescontenidasenelbucle,conlocual,enelcasodequedesdeelcomienzonose cumplieran las condiciones establecidas en while, las instrucciones del bucle se ejecutaran una vez. Lafuncinbreakdeformasimilaraloqueocurraenswitchpermiteinterrumpirlaejecucinde bucle. ejemplo35.php
<? $A=0; do { ++$A; echo "Valores de A usando el do: ",$A,"<br>"; } while($A<5); $B=7; do { echo "Pese a que B es mayor que 5 se ejecuta una vez. B= ",$B,"<br>"; } while($B<5); ?> U.T.9ELEMENTOSDELLENGUAJE Pgina:30

2RMDULO:IMPLANTACINAPLICACIONESWEB

2011/2012

ejemplo36.php
<? $A=500; do { if ($A>=500) { echo "No puede ejecutarse el bucle, porque no se cumple la condicin"; break; } ++$A; echo "Valores de A usando el do: ",$A,"<br>"; } while($A<500); echo "<BR>He salido del bucle porque A es: ",$A; ?>

20.BUCLESFOR Lasintaxiseslasiguiente:
for ( desde ; hasta ; incre ){ ......... ...instrucciones.... ......... }

Elparmetrodesdepermiteasignarunvalorinicialaunavariable($var=num)queharfunciones de controladora de iteraciones. El parmetro hasta establece la condicin que limita el valor mximoquepuedealcanzarlavariabledecontrol. El parmetro incre (con una sintaxis del tipo $variable++; $variable; ++$variable $variable; $variable+=no$variable=nestablecelosincrementosodecrementosdelavariablecontroladora encadaiteracindelbucle. Variantesdelbuclefor
for ( desde ; ; incre ){ ......... ...instrucciones.... ......... }

En este caso se omite el valor del parmetro hasta (observa que no se omite el separador de parmetros(;)conloqueenrealidadseestasignandoahastaelvalorNULL.Cuandoseutiliza estasintaxis,elbucleserepetiradeformaindefinida(lavariablepodratomarcerocomovalor, pero, cero es distinto de NULL) salvo que tal como puedes ver en el ejemplo se escriba en las instruccionesunoperadorcondicionalconunaopcinderupturadelbucleelfamosobreakque yahemosvistoalestudiarlainstruccinwhileyotrasanteriores.
for ( ; ; ){ ......... ...instrucciones.... ......... }

Enestecasonoseinsertaningnparmetroperosiseescribenlos;delimitadoresdelosmismos.
for( desd ; hast ; inst, incr )

U.T.9ELEMENTOSDELLENGUAJE Pgina:31

2RMDULO:IMPLANTACINAPLICACIONESWEB

2011/2012

Esta nueva variante de for permite insertar instrucciones a travs del tercer parmetro de la funcin. Si insertamos como tercer parmetro una conjunto de instrucciones, separadas por comas, se ejecutarn de igual forma que si estuvieran contenidas entre { y } En este caso, el modificador de la variable de control (incr) se incluye como una instruccin ms separada por unacomadelascontenidasenesetercerparmetrodelafuncin.
for ( desde ; hasta ; incre ): ......... ...instrucciones.... ......... endfor;

Estasintaxisesalternativaalaprimeradelasdescritas.Sustituyela{pordospuntos(:)yla}por endfor. ejemplo37.php


<? for ($i = 1; $i <= 10; $i++) { print $i."<br>"; } ?>

ejemplo38.php
<? for ($i = 1;;$i++) { if ($i > 10) { break; } print $i."<br>"; } ?>

ejemplo39.php
<? $i = 1; for (;;) { if ($i > 10) { break; } print $i."<br>"; $i++; } ?>

ejemplo40.php
<? for ($i = 1; $i <= 10; print $i."<br>", $i++) ; ?>

ejemplo41.php
<? for($i = 1; $i <=10;$i++): echo $i,"<br>"; endfor; ?>

U.T.9ELEMENTOSDELLENGUAJE Pgina:32

2RMDULO:IMPLANTACINAPLICACIONESWEB

2011/2012

ejemplo42.php
<? for ($i = 1; $i <= 10;$i++):?> <H1>Esto se repetir 10 veces</H1> <? endfor; ?>

PRCTICA17
Elabora un script que permita construir una tabla de 5 filas y 7 columnas que contengan los sucesivosnmerosnaturalesdesde1hasta35.Utilizabuclesdeltipofor,queigualquewhileydo whilepermitenseranidados.

PRCTICA18
Crearunatablacomolaanterior,estavezdeunasolafilayseiscolumnas,conteniendocadacelda unnmeroaleatoriocomprendidoentre1y49enlaquehabremosdeevitarlaposibilidaddeque unnmeroserepitadosveces.Paraellotesugerimosqueguardesenunarraylosvaloresdelos nmerosaleatoriosquesevangenerandoyque,antesdeguardarcadaunodeellos,seejecuteun buclequecompruebesientrelosregistradosyaexisteunvalorigualalobtenido.Sinoexistiera esevalorseguardaraeldato,encasocontrarioserepetiralaextraccin. 21.BUCLESFOREACH Elbucleforeachesespecficodelosarrayyaplicableaellostantosisonescalarescomosisonde tipoasociativo. Tiene dos posibles opciones. En una de ellas lee nicamente los valores contenidos en cada elementodelarray.Enelotrocasoleeademslosndicesdelarray. Lecturadevalores
foreach( array as var ){ ...instrucciones... }

dondearrayeselnombredelarray(sinincluirndicesnicorchetes),asesunapalabraobligatoria y var el nombre de una variable (puede ser creada al escribir la instruccin ya que no requiere estarpreviamentedefinida). Las instrucciones escritas entre las { } permiten el tratamiento o visualizacin de los valores obtenidos. Lavariablevarnopodrserutilizadaparaguardarvalores.Hemosdetenerencuentaquesuvalor serescribeencadaiteracindelbucleyquealacabaresteslocontendrelltimodelosvalores ledos. Lecturadendicesyvalores
foreach( array as v1 => v2 ) { ...instrucciones... }

donde array es el nombre de la matriz, as es una palabra obligatoria, v1 es el nombre de la variable que recogern los ndices, los caracteres => (son obligatorios) son el separador entre ambasvariablesy,porltimo,v2eselnombredelavariablequerecogeelvalordecadaunode loselementosdelarray.
U.T.9ELEMENTOSDELLENGUAJE Pgina:33

2RMDULO:IMPLANTACINAPLICACIONESWEB

2011/2012

Tanto esta funcin como la anterior realizan una lectura secuencial que comienza en el primer valordelarray. Arraysbidimensionales Cuandosetratadearraysbidimensionaleslalecturadelosvaloresquecontienensuselementos requiereelusodedosbuclesanidados. Cuando un array de este tipo es sometido al bucle foreach se extrae como ndice el primero de ellosycomovalorunarrayunidimensionalquetienecomondiceelsegundodelarrayoriginaly comovaloreldeaqul. La lectura de los valores de cada elemento requiere utilizar un segundo bucle que los vaya extrayendoapartirdelarrayunidimensionalobtenidopormediodelbucleprevio.
foreach($a as $i1=>$na){ foreach($na as $i2=>$val){ ..$i1 es el primer ndice... ..$i2 es el segundo ndice... ..$na nuevo array ..$valor es el valor .... } }

En el caso de arrays con dimensiones superiores sera necesario proceder del mismo modo, y habraqueutilizartantosbuclesforeachcomondicescontuvieraelarray. ejemplo43.php
<? # definimos un array escalar utilizando la sintaxis # nombre del array=array (valores de los elemento separados por comas) # si los valores fueran nmeros no sera necesario encerrarlos entre comillas $a=array("a","b","c","d","e"); /* defino ahora un nuevo array, esta vez asociativo utilizando la sintaxis clave => valor tal como puedes ver */ $b=array( "uno" =>"Primer valor", "dos" =>"Segundo valor", "tres" =>"Tecer valor", ); # establecemos el bucle que leer el array $a # recogiendo en la variable $pepe los valores extrados # y escribimos lo valores foreach($a as $pepe) { echo $pepe,"<br>"; }; # repetimos el mismo proceso, ahora con $b que es un array asociativo foreach($b as $pepe) { echo $pepe,"<br>"; }; ?> U.T.9ELEMENTOSDELLENGUAJE Pgina:34

2RMDULO:IMPLANTACINAPLICACIONESWEB

2011/2012

ejemplo44.php
<? $a=array("a","b","c","d","e"); $b=array( "uno" =>"Primer valor", "dos" =>"Segundo valor", "tres" =>"Tercer valor", ); # en este caso extraeremos ndices y valores de ambos arrays # usaremos $pepe para recoger los ndices y $pepe para recoger los valore # y separaremos ambas variables por => que es el separador obligatorio # para estos casos foreach($a as $pepe=>$pepa) { echo "Indice: ",$pepe," Valor: ",$pepa,"<br>"; }; foreach($b as $pepe=>$pepa) { echo "Indice: ",$pepe," Valor: ",$pepa,"<br>"; }; ?>

ejemplo45.php
<? # definamos un array bidimensional $z=array( 0 => array ( 0 => 34, 1 => 35, 2 => 36, ), 1 => array ( 0 => 134, 1 => 135, 2 => 136, ) ); # intentemos leer ndices y valores mediante un bucle foreach # y veamos como los valores que extraemos son Arrays # consecuencia del carcter bidimensional del array foreach($z as $pepe=>$pepa) { echo "ndice: ",$pepe," Valor: ",$pepa,"<br>"; }; /* anidemos dos bucles foreach de la siguiente forma en el primero extraemos un array que es tratado por el segundo foreach para extraer el segundo ndice y el valor realmente contenido en ese elemento bidimensional */ foreach($z as $ind1=>$valor1) { foreach($valor1 as $ind2=>$valorReal) { echo "Ind. 1: ",$ind1,"Ind. 2: ",$ind2," Valor: ",$valorReal,"<br>"; }; }; ?>

PRCTICA19
Crea un array bidimensional que contenga los nombres de cinco alumnos y las calificaciones de tres materias. El primer ndice puede ser el nmero de lista y los segundos pueden ser de tipo asociativo('nombre','biologa','fsica','latn',porejemplo).Asgnalesvaloresaloselementosdel
U.T.9ELEMENTOSDELLENGUAJE Pgina:35

2RMDULO:IMPLANTACINAPLICACIONESWEB

2011/2012

arrayycompletaelscriptdeformaquesevisualiceunlistadoconlosnombresdelosalumnosy lascalificacionesdecadaunadelasmaterias. 22.LAINSTRUCCINCONTINUE Silainstruccinbreakpermiteinterrumpireldesarrollodeunbucle,mediantecontinuesepuede impedirque,bajounascondicionesdeterminadas,seejecutenalgunasotodaslasinstruccionesde unbuclesinqueporelloseinterrumpalaejecucindelasiteracionessiguientes. Estainstruccinesaplicabletantoabuclesforcomoalosdetipowhileodowhile. ejemplo46.php


<? for ($i=0;$i<=10;$i++){ #condicin de mltiplo de 2 if ($i % 2 ==0 ) { continue ; } echo "La variable I vale ",$i,"<br>"; } ?>

ejemplo47.php
<? $i = 0; while ($i++ < 14) { #condicin de no mltiplo de 3 usando para distinto la sintaxis != if ($i % 3 !=0){ continue ; } echo "El valor de i es: ",$i,"<br>"; } ?>

ejemplo48.php
<? $i = 0; do { # condicin de no mltiplo de 11. Fjate en la sintaxis alternativa # observa que aqu distinto lo hemos escrito <> if ($i % 11 <>0 ){ continue ; } echo "El valo de i es: ",$i,"<br>"; }while ($i++ < 100) ?>

Lainstruccincontinuen Lainstruccincontinuepuedeutilizarunparmetronconvalorenteropositivoquecuandonose
U.T.9ELEMENTOSDELLENGUAJE Pgina:36

2RMDULO:IMPLANTACINAPLICACIONESWEB

2011/2012

indica toma por defecto el valor 1. La idea es la siguiente. Cuando tenemos bucles anidados el intrpretedePHPlosconsideranumeradoscorrelativamentededentrohaciafueraapartirde UNO. Cuandoesejecutadacontinuenseredireccionalaiteracinalbucle,cuyonmerocoincideconel valorden. Obviamente, el valor de n no puede ser nunca mayor que el nmero de bucles anidados en el script. ejemplo49.php
<? $j=0; while (++$j <5) { for($i=1;$i<5;$i++){ if ($i==3){ continue 1; } echo "El valor de j es: ",$j, " y el de i es: ",$i,"<br>"; } } ?>

ejemplo50.php
<? $j=0; while (++$j <5) { for($i=1;$i<5;$i++){ if ($i==3){ continue 2; } echo "El valor de j es: ",$j, " y el de i es: ",$i,"<br>"; } } ?>

ejemplo51.php
<? $j=0;$k=0; do { while (++$j <=5) { for($i=1;$i<=5;$i++){ if ($i==2){ continue 1; } echo "El valor de k es: ",$k, " y el valor de j es: ",$j, " y el de i es: ",$i,"<br>"; } } }while ($k++ <=5); ?>

ejemplo52.php
<? $j=0;$k=0; do { while (++$j <=5) { U.T.9ELEMENTOSDELLENGUAJE

Pgina:37

2RMDULO:IMPLANTACINAPLICACIONESWEB
for($i=1;$i<=5;$i++){

2011/2012

if ($i==2){ continue 2; } echo "El valor de k es: ",$k, " y el valor de j es: ",$j, " y el de i es: ",$i,"<br>"; } } }while ($k++ <=5); ?>

ejemplo53.php
<? $j=0;$k=0; do { while (++$j <=5) { for($i=1;$i<=5;$i++){ if ($i==2){ continue 3; } echo "El valor de k es: ",$k, " y el valor de j es: ",$j, " y el de i es: ",$i,"<br>"; } } }while ($k++ <=5); ?>

23.INFORMACINSOBREVARIABLES Veremos aqu algunas de las mltiples funciones que nos permiten obtener informacin sobre arraysyvariables. sizeof(variable) Lafuncinsizeofdevuelveelnmerodeelementosdeunarray.Siseaplicasobreunavariable(no array)devolverunoytantosiseaplicasobreunarrayvaco,unavariableconvalornuloosobre unavariablenodefinida,devolvercero. count(variable) Tieneidnticafuncionalidadaladesizeof. isset(variable) Lafuncinissetcompruebasiunavariableestdefinidaonoloest.Siloestinclusoconvalor nulo o como array vaco isset devolver UNO, en caso contrario devolver NULL. Esta funcin puedeseruncomplementodesizeofodecountdadoquepermitiracomprobarsiestndefinidas lasvariablesenlasqueaquellasfuncionesdevuelvendimensincero. is_array(variable) DevuelveUNO(verdadero)enelcasodequelavariableseatipoarrayyNULenelcasocontrario. is_long(variable)is_int(variable)is_integer(variable) EstastresfuncionesquesonidnticasdevuelvenUNOenelcasodequelavariableseadetipo enteroyNULLenelcasocontrario.
U.T.9ELEMENTOSDELLENGUAJE Pgina:38

2RMDULO:IMPLANTACINAPLICACIONESWEB

2011/2012

is_float(variable)is_double(variable) EstasdosfuncionestambinidnticasdevuelvenUNOenelcasodequelavariableseadetipo comaflotanteyNULLenelcasocontrario. is_string(variable) DevuelveUNOenelcasodequela variableseatipostringyNULen casocontrario. unset(variable) Destruyelavariableindicada.Sidespusdeaplicarunsetsobreunavariableaplicamosdenuevo lafuncinisset,nosdevolverNULLindicandoqueyanoestdefinida.Lafuncinunsetsepuede aplicartantosobrevariablescomosobreunarrayytambinsobreunelementodeunarray. ejemplos54.php
<? $a=array("Lunes","Martes","Miercoloes","Jueves", "Viernes","Sbado","Domingo"); $b=array( "Precio" => "17340 euros", "Color" => "Rojo", "Llantas" => "Aluminio"); $c=47; $d=""; $e=array(); echo "<h3>Valores usando sizeof()</h3>"; echo echo echo echo echo echo echo echo echo echo echo echo echo ?> " " " " " " a b c d e f tiene: tiene: tiene: tiene: tiene: tiene: ",sizeof($a)," ",sizeof($b)," ",sizeof($c)," ",sizeof($d)," ",sizeof($e)," ",sizeof($f)," elementos<br>"; elementos<br>"; elementos<br>"; elementos<br>"; elementos<br>"; elementos<br>";

"<h3>Valores usando count()</h3>"; " a tiene: ",count($a)," elementos<br>"; " b tiene: ",count($b)," elementos<br>"; " c tiene: ",count($c)," elementos<br>"; " d tiene: ",count($d)," elementos<br>"; " e tiene: ",count($e)," elementos<br>"; " f tiene: ",count($f)," elementos<br>";

ejemplos55.php
<? $a=array("Lunes","Martes","Miercoloes","Jueves", "Viernes","Sbado","Domingo"); $b=array( "Precio"=>"17340 euros", "Color" =>"Rojo", "Llantas" =>"Aluminio"); $c=47; $d=""; $e=array(); echo "<h3>Variables definidas</h3>"; U.T.9ELEMENTOSDELLENGUAJE Pgina:39

2RMDULO:IMPLANTACINAPLICACIONESWEB
echo echo echo echo echo echo " " " " " " Esta Esta Esta Esta Esta Esta definida definida definida definida definida definida la la la la la la variable variable variable variable variable variable a b c d e f ? ? ? ? ? ? ",isset($a),"<br>"; ",isset($b),"<br>"; ",isset($c),"<br>"; ",isset($d),"<br>"; ",isset($e),"<br>"; ",isset($f),"<br>";

2011/2012

echo "<h3>Identificacin de tipos de variables</h3>"; echo echo echo echo " " " " La La La La variable variable variable variable a a a a es es es es un array ? ",is_array($a),"<br>"; tipo double ? ",is_double($a),"<br>"; un entero ? ",is_int($a),"<br>"; un entero ? ",is_long($a),"<br>";

echo "<h3>Eliminando variables</h3>"; echo "La dimensin de a es: ",count($a),"<br>"; unset($a[0]); echo "Nueva dimensin de a: ",count($a),"<br>"; echo "La dimensin de b es: ",count($b),"<br>"; unset($b); echo "Nueva dimensin de b: ",count($b),"<br>"; echo " Sigue definida la variable b ? ",isset($b),"<br>"; ?>

24.RECUENTOSENARRAYS Algunas de las posibilidades de obtener informacin sobre los contenidos de un array son las siguientes: $n=array_count_values(ar) Con array_count_values la variable $n ser un array que tendr como ndices cada uno de los valores distintos que contenga el array ar, y como valores el resultado de contar el nmero de vecesqueserepitecadaunodelosvalorescontenidosenelarrayinicial. Distingue entre maysculas y minsculas. Cuando el array inicial (ar) contiene nmeros enteros (seaarescalaroasociativo)$nserunarrayescalar.Encasocontrario,serasociativo. clav=array_keys(arr) Devuelveunarrayescalar(clav)quecontienecomovaloreslosndicesdelarrayinicial(arr). clav=array_keys(arr,valor) Devuelveunarrayescalar(clav)quecontienecomovaloreslosndicesdeloselementosdelarray inicialcuyovalorcoincideconelindicadomedianteelparmetrovalor. valores=array_values(arr) Estafuncinrecogeenunanuevamatriz(valores)todoslosvalorescontenidosenotroarray.Es unaformadeconversindeunarrayasociativoenotroescalar. ejemplo56.php
<? $a=array(1,2,3,1,1,2,3,3,4,4,4,0,1); $b=array("blanco","azul","blanco","blanco","azul","Blanco","Azul"); $c=array( "a"=>"rojo", "b" =>"verde", U.T.9ELEMENTOSDELLENGUAJE Pgina:40

2RMDULO:IMPLANTACINAPLICACIONESWEB

2011/2012

"c" =>"rojo", "d" =>"rojo", "e" =>"verde", "f" =>"Rojo", "g" =>"Verde"); echo "<h3>Cuenta valores del array()</h3>"; $contador=array_count_values($a); foreach($contador as $valor=>$veces){ echo "El valor ",$valor," se repite ", $veces," en la matriz a<br>"; } echo $contador[0],"<br>"; echo $contador[1],"<br>"; echo $contador[2],"<br>"; echo $contador[3],"<br>"; echo $contador[4],"<br>"; $contador1=array_count_values($b); foreach($contador1 as $valor=>$veces){ echo "El valor ",$valor," se repite ", $veces," en la matriz a<br>"; } echo $contador1["blanco"],"<br>"; echo $contador1["azul"],"<br>"; echo $contador1["Azul"],"<br>"; echo $contador1["Blanco"],"<br>"; $contador2=array_count_values($c); foreach($contador2 as $valor=>$veces){ echo "El valor ",$valor," se repite ",$veces," en la matriz a<br>"; } echo $contador2["rojo"],"<br>"; echo $contador2["Verde"],"<br>"; echo $contador2["verde"],"<br>"; echo $contador2["Rojo"],"<br>"; echo "<h3>Devuelve las claves de un array</h3>"; $claves=array_keys($a); foreach($claves as $v){ echo "El valor ",$v," es una de las claves<br>"; } $claves1=array_keys($a,1); foreach($claves1 as $v){ echo "El valor ",$v," es una de las claves de elementos de la matriz cuyo valor es <b>1</b><br>"; } echo "<h3>Devuelve los valores de un array</h3>"; $valores=array_values($c); foreach($valores as $v){ echo $v," Este es un de los valores de de la matriz c<br>"; } ?>

25.ORDENACINDEARRAYS Localizacindevaloresenunamatriz in_array(valor,array) La funcin in_array busca en la matriz (array) el valor (numrico o cadena) contenido en el parmetrovalor.Siloencuentradevuelve1,y,sinoexistieradevolveraNULL. Posicionamientosenunamatriz
U.T.9ELEMENTOSDELLENGUAJE Pgina:41

2RMDULO:IMPLANTACINAPLICACIONESWEB

2011/2012

Mediante estas funciones se puede modificar la posicin del puntero interno de una matriz y determinarlosndicesdeloselementosalosqueapuntaencadamomento. key(array) Devuelveelndicedelelementodelamatrizalqueapuntaenesemomentoelpunterointernode lamatriz. reset(array) Desplazaelpunterointernoalaposicindelprimerndicedelarray. end(array) Desplazaelpunterointernoalaposicindelltimondicedelarray. pos(array) Mantieneelpunterointernoenlaposicindelactual. next(array) Avanzaelpunterointernoenunaposicinrespectoalaactual. prev(array) Retrocedeelpunterointernoenunaposicinrespectoalaactual. ejemplo57.php
<? $a=array(1,2,3,1,1,2,3,3,4,4,4,0,1); $b=array("blanco","azul","blanco","blanco","azul","Blanco","Azul"); $c=array( "a"=>"rojo", "b" =>"verde", "c" =>"rojo", "d" =>"rojo", "e" =>"verde", "f" =>"Rojo", "g" =>"Verde"); echo "<h3>Busca un valor en una matriz</h3>"; echo " Busca el valor en la "#</b> Si no ha puesto echo " Busca el valor en la "#</b> Si no ha puesto echo " Busca el valor en la "#</b> Si no ha puesto echo " Busca el valor en la "#</b> Si no ha puesto matriz: nada no matriz: nada no matriz: nada no matriz: nada no <b>#",in_array(3,$a), estaba, si 1 lo encontr <BR>"; <b>#",in_array(7,$a), estaba, si 1 lo encontr <BR>"; <b>#",in_array("gris",$b), estaba, si 1 lo encontr <BR>"; <b>#",in_array("blanco",$b), estaba, si 1 lo encontr <BR><br>";

echo "<h3>Posicionandose y determinando indices actuales</h3>"; echo echo echo echo echo echo echo "Este el valor asoaciado al indice 3 de la matriz a: ",$a[3],"<br>"; "El puntero interno apunta a la clave: ",key($a),"<br>"; "Este es el valor siguiente al anterior: ",next($a),"<br>"; "El puntero interno apunta a la clave: ",key($a),"<br>"; "Este es el primer valor de la matriz a: ",reset($a),"<br>"; "El puntero interno apunta a la clave: ",key($a),"<br>"; "Este es el ultimo valor de la matriz a: ",end($a),"<br>"; Pgina:42

U.T.9ELEMENTOSDELLENGUAJE

2RMDULO:IMPLANTACINAPLICACIONESWEB
echo echo echo echo echo echo echo echo echo echo echo echo echo echo echo echo echo "El puntero "Este es el "El puntero "Este es el "El puntero

2011/2012

interno apunta a la clave: ",key($a),"<br>"; penltimo valor de la matriz a: ",prev($a),"<br>"; interno apunta a la clave: ",key($a),"<br>"; mismo valor anterior: ",pos($a),"<br>"; interno apunta a la clave: ",key($a),"<br>";

"Este el valor asoaciado al indice 4 de la matriz b: ",$b[4],"<br>"; "El puntero interno apunta a la clave: ",key($b),"<br>"; "Este es el valor siguiente al anterior: ",next($b),"<br>"; "El puntero interno apunta a la clave: ",key($b),"<br>"; "Este es el primer valor de la matriz a: ",reset($b),"<br>"; "El puntero interno apunta a la clave: ",key($b),"<br>"; "Este es el ultimo valor de la matriz a: ",end($b),"<br>"; "El puntero interno apunta a la clave: ",key($b),"<br>"; "Este es el penltimo valor de la matriz a: ",prev($b),"<br>"; "El puntero interno apunta a la clave: ",key($b),"<br>"; "Este es el mismo valor anterior: ",pos($b),"<br>"; "El puntero interno apunta a la clave: ",key($b),"<br>";

?>

Ordenacionesdearrays Loselementosdeunarraysevanordenandosegnsevandefiniendo.Portanto,suordennoesel mismoqueeldelosvaloresdesusndices. Las funciones PHP que ordenan los elementos de un array permiten dos opciones. Con una de ellasesposiblelaordenacindeloselementossinmodificarlosvaloresdelosndices,mientras que la otra s modifica los ndices. En el segundo de los casos la modificacin puede afectar inclusoaltipodendicesdadoquelosresultadosdelasordenacionestantosihemospartidode unarrayescalarcomosilohemoshechodesdeunoasociativoessiempreunarrayescalar. Ordenacinporvaloressinmantenerndices sort(array) OrdenalosvaloresdelarrayensentidocrecienteyloreindexaasignandondiceCEROalmenorde losvalores. rsort(array) Ordena la matriz en sentido decreciente de sus valores y la reindexa asignando ndice CERO al mayordeestos. Ordenacinporndices ksort(array) Ordenalamatrizsegnsusndicesyensentidocrecientedeestos. krsort(array) Ordenalamatrizporndicesensentidodecrecientedelosmismos. Ordenacinporvaloresmanteniendondices asort(array) Ordenalamatrizsegnsusvaloresensentidocrecienteymantienelosndicesdelarrayoriginal. arsort(array) Ordenalamatrizporvaloresensentidodecrecienteysiguemanteniendolosndicesoriginales.
U.T.9ELEMENTOSDELLENGUAJE Pgina:43

2RMDULO:IMPLANTACINAPLICACIONESWEB

2011/2012

Ordenacinmediantefuncindefinidaporusuario PHPpermitequeelusuariopuedadefinafuncionesenlasqueestablezcasuscriteriosparticulares deordenacin.LasfuncionesPHPquepermitenusarestacaractersticasonlassiguientes: uasort(array,funcion)Ordenalamatrizutilizandoloscriteriosestablecidosporlafuncindefinida porelusuarioymantienelosndicesdelarray. usort(array,funcion) Ordenalamatrizporvaloresutilizandoloscriteriosdefinidosenlafuncindeusuarioymodifica losndices. uksort(array,funcion) Ordenalamatrizporclavesutilizandoloscriteriosdefinidosenlafuncin. 26.MODIFICACINDEARRAYS var=range(inf,sup) Crea una nueva matriz (var) escalar en la que los valores de los elementos sern los nmeros enteros(ordenados)pertenecientesalintervalocomprendidoentrelosvaloresinfysup,incluidos estos.Losvaloresinfysupdebensernmerosenteros. shuffle(array) Intercambiademodoaleatoriolosvaloresdeunarrayylosreindexa.Igualqueocurraencasode losnmerosaleatorios,lafuncinshuffledeberirprecedidadeunasemilladeltiposrand. var=array_flip(array) Devuelveunarray(var)quecontienecomovaloreslosndicesdelamatrizarrayycomondices losvaloresdeaquella.Comoquieraquelosvalorespuedenestarrepetidosynoesposiblequelo estnlosndices,estafuncin,encasodevaloresrepetidos,tomacadaunodeesosvaloresuna solavez,loutilizacomondicedelnuevoarrayyasignacomovalordelnuevoelementoelmayor delosndicesdelarrayoriginaldeloselementosquecontuvieranesevalor. Insertandoelementosenunarrays array_unshift(arr,v1,v2,..) Inserta al principio de la matriz arr los valores v1, v2, etctera que pueden ser tantos como se deseenydebenestarseparadosporcomas. array_push(array,v1,v2,..) Insertaalfinaldelamatrizarraylosvaloresv1,v2,etctera,queigualqueenelcasoanterior, puedensertantoscomosedeseenydebenestarseparadosporcomas. Tantoarray_unshiftcomoarray_pushasignanalosnuevoselementosndicesnumricos. array_pad(array,n,var) Insertanuevoselementosenarrayylesasignaelvalorcontenidoenvar.Insertartantosnuevos elementoscomoseanecesarioparaqueelarrayalcanceunalongituddenelementos.Sielvalor de n es positivo inserta los elementos al final del array, si fuera negativo los insertara al comienzodelmismo.Alosnuevoselementosdelarrayselesasignanndicesnumricos.
U.T.9ELEMENTOSDELLENGUAJE Pgina:44

2RMDULO:IMPLANTACINAPLICACIONESWEB

2011/2012

array_merge($a,$b) Creaunnuevoarrayescalarenelqueseincluyentodosloselementoscontenidosenlosarrays$a y$b. Quitarelementosdeunarray array_shift($a) Lafuncinarray_shiftextraeelprimerelementodelarray$a. array_pop($a) Lafuncinarray_popextraeelltimoelementodelarray$a. array_slice($a,n) Lafuncinarray_sliceextraenelementosdelarray$a.Sielvalordenespositivoextraertodos loselementosapartirdelqueocupalaposicinncontandodesdeprimerohastaelltimosegn elordendecreacindeloselementos.Sielvalordenesnegativoextraertodosloselementosa partirdelensimo,estavez,contandodesdeelltimohastaelprimero. array_slice($a,n,m) Lafuncinarray_slicecondosparmetrospermiteextraerunapartedelosvaloresdeunamatriz siguiendoestoscriterios:Sinymsonpositivos,extraermelementosapartirdelqueocupala posicin ensima de primero a ltimo. Cuando n es negativo y m es positivo se extraern m elementoscontadosapartirdelensimo,estavezrecorriendoelarraydeltimoaprimero.Enel casoenquentengavalorpositivoymseanegativoextraerloscomprendidosentreelensimo contado de primero a ltimo y el emsi mo contado desde el ltimo hasta el primero. Si n es negativoymestambinnegativoextraerloscaracterescomprendidosentreelensimocontado deltimoaprimeroyelemsimocontadoenelmismosentido.Enestecasoserequierequeel valorabsolutodenseamayorqueeldem.Encasodenocumplirseestacondicindevolverun arrayvaco. Invertirelordendeunarray array_reverse(array) Devuelve un nuevo array cuyos elementos estn en orden inverso al del array original. De esta formaelelementoqueocupabalaltimaposicinpasaaocuparlaprimerayassucesivamente. ejemplo58.php
<? $a=array(1,2,3,1,1,2,3,3,4,4,4,0,1); $b=array("blanco","azul","blanco","blanco","azul","Blanco","Azul"); $c=array( "b" =>"verde", "c" =>"rojo", "e" =>"verde", "f" =>"Rojo", "g" =>"Verde", "a"=>"rojo", "d" =>"rojo"); $C=array( "b" =>"verde", "c" =>"rojo", "e" =>"verde", U.T.9ELEMENTOSDELLENGUAJE Pgina:45

2RMDULO:IMPLANTACINAPLICACIONESWEB
"f" =>"Rojo", "g" =>"Verde", "a"=>"rojo", "d" =>"rojo"); echo "<h3>Crea una matriz de nmeros enteros</h3>"; $r=range(7,11); foreach($r as $clave=>$valor){ echo "Clave: ",$clave," Valor: ",$valor,"<br>"; }

2011/2012

echo "<h3>Intercambia aleatoriamente elementos en una matriz</h3>"; srand (time()); shuffle ($r);

foreach($r as $clave=>$valor){ echo "Clave: ",$clave," Valor: ",$valor,"<br>"; } echo "<h3>Intercambia valores e indices</h3>"; $p=array_flip($a); foreach($p as $clave=>$valor){ echo "Clave: ",$clave," Valor: ",$valor,"<br>"; } echo "<br>"; $q=array_flip($c); foreach($q as $clave=>$valor){ echo "Clave: ",$clave," Valor: ",$valor,"<br>"; } echo "<h3>Inserta elementos al principio de una matriz</h3>" array_unshift($a,97,"Pepe",128); foreach($a as $clave=>$valor){ echo "Clave: ",$clave," Valor: ",$valor,"<br>"; } echo "<br>"; array_unshift($c,97,"Pepe",128); foreach($c as $clave=>$valor){ echo "Clave: ",$clave," Valor: ",$valor,"<br>"; } echo "<h3>Inserta elementos al final de una matriz</h3>"; array_push($a,3.4,"Luis",69); foreach($a as $clave=>$valor){ echo "Clave: ",$clave," Valor: ",$valor,"<br>"; } echo "<br>"; U.T.9ELEMENTOSDELLENGUAJE Pgina:46 ;

2RMDULO:IMPLANTACINAPLICACIONESWEB
array_push($c,3.4,"Luis",69); foreach($c as $clave=>$valor){ echo "Clave: ",$clave," Valor: ",$valor,"<br>"; } echo "<h3>Inserta elementos iguales al principio o al final de una matriz</h3>"; $wz1=array_pad($a,25,"relleno"); foreach($wz1 as $clave=>$valor){ echo "Clave: ",$clave," Valor: ",$valor,"<br>"; } echo "<br>"; $wz2=array_pad($c,-17,"relleno"); foreach($wz2 as $clave=>$valor){ echo "Clave: ",$clave," Valor: ",$valor,"<br>"; } echo "<h3>Fusiona dos matrices</h3>"; $wz3=array_merge($a,$b); foreach($wz3 as $clave=>$valor){ echo "Clave: ",$clave," Valor: ",$valor,"<br>"; }

2011/2012

echo "<h3>Extrae el primer elemento de una matriz</h3>"; array_shift ($a); foreach($a as $clave=>$valor){ echo "Clave: ",$clave," Valor: ",$valor,"<br>"; } echo "<br>"; array_shift ($c); foreach($c as $clave=>$valor){ echo "Clave: ",$clave," Valor: ",$valor,"<br>"; } echo "<h3>Extrae el ultimo elemento de una matriz</h3>"; array_pop($a); foreach($a as $clave=>$valor){ echo "Clave: ",$clave," Valor: ",$valor,"<br>"; } echo "<br>"; array_pop ($c); foreach($c as $clave=>$valor){ echo "Clave: ",$clave," Valor: ",$valor,"<br>"; } U.T.9ELEMENTOSDELLENGUAJE Pgina:47

2RMDULO:IMPLANTACINAPLICACIONESWEB
echo "<h3>Extrae elementos de una matriz</h3>"; $zz1=array_slice($a,3); foreach($zz1 as $clave=>$valor){ echo "Clave: ",$clave," Valor: ",$valor,"<br>"; } echo "<br>"; $zz2=array_slice($a,-3); foreach($zz2 as $clave=>$valor){ echo "Clave: ",$clave," Valor: ",$valor,"<br>"; }

2011/2012

echo "<br>"; $zz3=array_slice($b,3,4); foreach($zz3 as $clave=>$valor){ echo "Clave: ",$clave," Valor: ",$valor,"<br>"; } echo "<br>"; $zz4=array_slice($b,3,-2); foreach($zz4 as $clave=>$valor){ echo "Clave: ",$clave," Valor: ",$valor,"<br>"; } echo "<br>"; $zz5=array_slice($b,-5,-2); foreach($zz5 as $clave=>$valor){ echo "Clave: ",$clave," Valor: ",$valor,"<br>"; }

echo "<h3>Invierte los elementos de la matriz</h3>"; $inv=array_reverse($C); foreach($inv as $clave=>$valor){ echo "Clave: ",$clave," Valor: ",$valor,"<br>"; } ?>

U.T.9ELEMENTOSDELLENGUAJE

Pgina:48

2RMDULO:IMPLANTACINAPLICACIONESWEB

2011/2012

U.T.10FUNCIONESDEUSUARIO
1.Qusonlasfuncionesdeusuario? De igual forma que ocurre con el navegador en el caso del HTML, PHP lee e interpreta las instrucciones contenidas en los scripts de forma secuencial. Es decir, las instrucciones se van ejecutandoenelmismoordenenelqueapareceneneldocumentooriginal,conlaexcepcinde lasfunciones.Enestecaso,losbloquesdeinstruccionessonpuestosadisposicindePHP,perono seejecutarnhastaelmomentoenqueseanrequeridasdeformaexpresa. Dndedebeninsertarse? AunqueenversionesantiguasdePHPeranecesariodefinirlafuncinantesdeinvocarla,apartir delaversin4noesnecesariaesaorganizacinsecuencial.Lafuncinpuedenestarescritadentro decualquierscriptyencualquierpartedeldocumento,sinquetengaimportanciaalgunaellugar enelqueseincluyalallamadaalamisma. Tambin es posible y bastante habitual incluir funciones de uso frecuente en documentos externosdemodoquepuedensercompartidas.Enestecaso,ademsdeinvocarlaesnecesario indicaraPHPellugardondedebebuscarla.Hablaremosdeellocuandoestudiemoslorelativoa include. 2.DEFINICINDELAFUNCIN Lasfuncionesdeusuariorequierenlasiguientesintaxis: functionnombre(){ ..... ...instrucciones... ..... } Es imprescindible respetar estrictamente la sintaxis que requiere de forma obligatoria los siguienteselementos: Lapalabrafunctiondebeestarescritaenminsculas. Elnombredelafuncin,quedebeseguircriteriossimilaresalosdelosnombresdevariables, aunqueenestecasonoseanteponeelsmbolo$niningnotro. Losparntesis(),inclusocuandonocontengannada. Las llaves de apertura ({) y cierre (}) dentro de las cuales se escribirn las instrucciones correspondientesaella. 3.EJECUCINDELAFUNCIN LasfuncionesPHPnoseejecutanentantonoseaninvocadas.Parainvocarunafuncinlasintaxis eslasiguiente:nombre().Alserllamadaconestasintaxisdesdecualquierscriptseejecutarn lasinstruccionescontenidasenella. mbitodelasvariables Resumamosloyacomentadocuandotratamoseltemadelasvariables.Lasfuncionesnoleen valoresdevariablesdefinidasfueradesumbitosalvoquedentrodelapropiafuncinsedefinan deformaexpresacomoglobales.
U.T.10FUNCIONESDEUSUARIO Pgina:1

2RMDULO:IMPLANTACINAPLICACIONESWEB

2011/2012

Si una funcin modifica el valor de una variable global, el nuevo valor persiste despus de abandonarlafuncin. Sidentrodeunafuncinseutilizaunnombredevariableidnticoaldeotraexternaaella(sin definirlaglobal)lanuevavariableseiniciaconvalornuloyloseventualesvaloresquepudierair conteniendosepierdenenelmomentoenqueseacabasuejecucin. Asignacindevaloresavariables Alasvariablesnoglobalesselespuedenasignarsusvaloresinicialesdedosformas: Incluyndolasenunalneadeinstruccionescontenidaenlapropiafuncin. Insertando los nombres de variable y sus valores dentro del parntesis que de forma obligatoriadebeseguiralnombredelafuncin.Enestecasolasintaxissera: functionnom($a=v1,$b=v2) donde$ay$bsonnombresdevariablesautilizarenelmbitodelafuncinyv1yv2losvalores asignados a cada una de ellas. En este parntesis pueden incluirse separndolas con comas cuantasparejasvar=valseannecesarias. Unaformaalternativaalaanteriorseralasiguiente:functionnom($a,$b) dondehabraqueasignarlosvaloresdecadaunadelavariablesdesdelallamadaalafuncin,que ahoratendraestasintaxis:nombre(valor1,valor2,...);enlaqueseescribenlosvaloresseparados porcomas,yencerradosentrecomillascuandosetratadevariablesalfanumricas. Si el nmero de valores contenidos en la llamada fuera mayor que el nmero de variables definidasenlafuncin,losexcedentesseranignoradosy,sifuerainferior,seasignaravalornulo alasvariablesalasquenosetransfirieraningnvalor. Tambinesposibleincluirenlallamadaalafuncinlosnombresdealgunasvariablesdefinidas enelmbitoexternoalafuncin.Seharadelasiguienteforma:nombre($var1,var2,...); Pasarporreferencia Tal como hemos visto, las funciones PHP pueden recibir valores de variables externas y utilizar esos valores sin que el valor original de las mismas salvo que se les asigne la condicin de globales dentro de la funcin sufra modificacin. Una manera de lograr que los valores una variableexternapuedansermodificadosporunafuncin,esloquesellamaenargotinformtico pasarvariablesporreferencia.Laformadehacerloesesta: Hay que anteponer al nombre de la variable el smbolo & y PHP interpretar que la estamos pasandoporreferencia.El&puedeanteponersetantoenladefinicindelafuncincomoenla llamadaalafuncin. Lasegundadelasopcionesnosconcedemayorlibertaddadoquepermiteusarunasolafunciny decidirencadallamadalaformadepasarlosparmetros. Cuidado! Sitratasdeejecutarunafuncinenlaquecolocasel&enlallamadaalafuncinyteapareceun mensajecomoeste:
Warning: Call-time pass-byreference has been deprecated -argument passed by value; If you would like to pass it by reference, modify the declaration of function(). If you would like to enable call-time pass-by-reference, you can set allow_call_time_pass_reference to true in your INI file.

lo que estar ocurriendo es que el php.ini del servidor tiene configurada en Off la directiva: allow_call_time_pass_reference y eso suele ocurrir con algunos hostings y tambin con la configuracinpordefectodealgunasversionesdePHPanterioresalaqueestamosutilizando. Ejemplosdefuncionesdeusuario
U.T.10FUNCIONESDEUSUARIO Pgina:2

2RMDULO:IMPLANTACINAPLICACIONESWEB
<? a1(); ?> <!-- Hemos escrito un script con una llamada a la funcin a1 que an no est definida. Tendremos que hacerlo, pero no importa la parte del documento en la que lo hagamos La pondremos en este nuevo script PHP //--> <? function a1(){ for($i=1;$i<=10;$i++){ echo $i,"<br>"; } } ?>

2011/2012

<? # definamos dos variables y asignmosles un valor $a=5; $b=47; # escribamos una funcin a1 y pidmosle que imprima sus valores function a1(){ echo "Este es el valor de &#36;a en la funcin a1: ",$a,"<br>"; echo "Este es el valor de &#36;b en la funcin a1: ",$b,"<br>"; } # hagamos una llamada a la funcin anterior # no nos escribir ningn valor porque esas variables no pertenecen # al mbito de la funcin y sern consideradas como vacas # en el mbito de la funcin a1(); # escribamos una nueva funcin, definamos como global $a # y comprobemos que ahora si la hemos incluido en el mbito # de la funcin function a2(){ global $a; echo "Este es el valor de &#36;a en la funcin a2: ",$a,"<br>"; echo "Este es el valor de &#36;b en la funcin a2: ",$b,"<br>"; } # invoquemos esta nueva funcin y veamos que ahora # si se visualiza el valor de $a pero no el de $b a2(); # creemos una nueva funcin y ahora modifiquemos dentro de ella # ambas variables function a3(){ global $a; $a +=45; $b -=348; echo "Este es nuevo valor de &#36;a en la funcin a3: ",$a,"<br>"; echo "Este es el valor de &#36;b en la funcin a3: ",$b,"<br>"; } # invoquemos la funcin a3 a3(); # comprobemos -desde fuera del mbito de la funcin # que ocurri con los valores de las variables echo "El valor de de &#36;a HA CAMBIADO despus de ejecutar a3 es: ",$a,"<br>"; echo "El valor de de &#36;b NO HA CAMBIADO despus de ejecutar a3 es: ",$b,"<br>"; # probemos que ocurre con una variable superglobal # veremos que sin ser definida expresamente en a4 # si pertenece a su mbito y por lo tanto visualizamos su contenido U.T.10FUNCIONESDEUSUARIO Pgina:3

2RMDULO:IMPLANTACINAPLICACIONESWEB

2011/2012

function a4(){ print "La superglobales si estn: ".$_SERVER['SERVER_NAME']."<br>"; } # invoquemos esta nueva funcin a4(); ?>

<? $a=-13; $b=7482; $c="Ambrosio"; # esta es una forma alternativa de asignar valores a una variable # del mbito de la funcin function a1($a=56, $b=25){ echo "El valor de $$a en la funcin a1: ", $a,"<br>"; echo "El valor de $$b en la funcin a1: ", $b,"<br>"; } a1(); echo "El valor de $a despus de ejecutar la funcin es: ",$a,"<br><br>"; # Pasando valores desde la llamada a la funcin # /* Definamos una funcin fun1 e incluyamos dentro de su parntesis nombres de variables, separados por comas pero ahora sin asignarles ningn valor */ function fun1($x,$y,$z){ print "Valor de la variable x: ".$x."<br>"; print "Valor de la variable y: ".$y."<br>"; print "Valor de la variable z: ".$z."<br>"; } # debemos hacer la llamada a la funcin pero ahora # lo haremos de forma distinta. # Vamos a incluir en la llamada # los valores que queremos asignar a las variables de la funcin # Escribiremos dentro del parntesis de la llamada # los valores de cada una de las tres variables # separados por comas # (si se trata de una cadena, pongmosla entre comillas) # y veremos con la funcin recoge esos valores asignados #en la llamada fun1(14,"Robustiano",23.4); /* si esta llamada contuviera ms de tres valores los ltimos serian ignorados */ fun1(49.3,"Eustaquio",78,"Lupicio",456); # si contuviera menos de tres valores # PHP nos dara un mensaje de error # advirtiendo que falta un valor # pero nos devolvera los valores fun1("Desiderio","Bailador"); # esos mensajes de error podramos evitarlos # poniendo una arroba delante de la llamada a la funcin @fun1("Nuevo Desiderio","Nuevo Bailador"); # tambin podra utilizarse una sintaxis como esta # en la que dejamos en blanco (entre comillas) # el espacio correspondiente al segundo valor # aunque si incluimos las comas. # La variable que ocupa esa posicin # sera considerada como nula fun1("La luna",'',"verde"); U.T.10FUNCIONESDEUSUARIO Pgina:4

2RMDULO:IMPLANTACINAPLICACIONESWEB
# tambin podramos incluir en la llamada nombres de variables # definidas en el mbito general del sript # un este caso la funcin usara esos valores fun1($a,$b,$c); ?>

2011/2012

<? $a=3; $b=2; function a1(&$a,$b){ $a=pow($a,2); $b=pow($b,3); echo "El cuadrado de a dentro de la funcin es: ",$a, "<br>"; echo "El cubo de b dentro de la funcin es: ",$b, "<br><br>"; } a1($a,$b); echo "Al salir de la funcin a conserva la modificacin: ",$a, "<br>"; echo "Por el contrario, b no la conserva: ",$b, "<br><br>"; $c=8; $d=12; function b1($a,$b){ $a=pow($a,2); $b=pow($b,3); echo "El cuadrado de a dentro de la funcin es: ",$a, "<br>"; echo "El cubo de b dentro de la funcin es: ",$b, "<br><br>"; } b1(&$c,$d); echo "Al salir de la funcin c conserva la modificacin: ",$c, "<br>"; echo "Por el contrario, d no la conserva: ",$d, "<br><br>"; ?>

4.OTRAFORMADEDEFINIRFUNCIONESDEUSUARIO Existeotraopcindedefinicindefuncionesdeusuarioquepuederesultardemuchointers.En estecasolafuncinsedefineentresbloques: Definicindelafuncin,llavedeaperturaycierredelscriptPHP. Contenido de la funcin formado exclusivamente por cdigo HTML, que se escribira cuando fuerainvocadalafuncinquelocontiene. Cierredelafuncin(llavedecierre)contenidoenunscriptPHP,esdecir,entrelasetiquetasde apertura<?ycierre?>dePHP. Cuandoesinvocadaunafuncindefinidadeestaforma,PHPselimitaaescribireneldocumento finallostextoscontenidosentrelaetiquetadeaperturaycierredelafuncin.Lasfuncionesde esta forma son particularmente tiles para la construccin de espacios web que contienen una seriedepginasenlasqueserepitenlasmismasestructuras.
<? function Encabezado() { ?> <!-- Hemos abierto la funcin y cerrado la etiqueta PHP todo esto es cdigo HTML //--> <HTML> <HEAD> <TITLE>Titulo de mi pgina</TITLE> <BODY BGCOLOR="#FF0000"> <!-- Esta nueva llamada a PHP U.T.10FUNCIONESDEUSUARIO

Pgina:5

2RMDULO:IMPLANTACINAPLICACIONESWEB
insertando la llave de cierre de la funcin indicar a PHP que debe escribir todo lo contenido entre la { y esta } //--> <? } ?>

2011/2012

<? function Pie() { ?> <HR> </BODY> </HTML> <? } ?> <!-- Utilizaremos esas dos funciones para crear una pgina web. Llamamos a la funcin Encabezado luego escribimos un texto y por ultimo insertamos el Pie de pgina con la funcin Pie //--> <? Encabezado(); ?> Este es texto que aparecer en el cuerpo de la pgina. Est fuera de los scripts de php y ser considerado como un texto HTML. Debajo aparecer la lnea horizontal que insertaremos mediante una nueva llamada a la funcin Pie <? Pie(); ?>

PRCTICA20
En este ejercicio utilizaremos una funcin para construir tablas similares a las que hemos construido en la prctica 17. Pero incorporaremos una innovacin respecto a aquel. Ahora la funcin debe permitir construir tablas de cualquier dimensin n de filas y/o columnas y el nmerodestashabremosdeincluirloenlallamadaaesafuncin. 5.RETORNODESDEUNAFUNCIN En muchas ocasiones las necesidades operativas de nuestros scripts requieren que una funcin devuelva un valor. Esto se consigue mediante la instruccin return seguida de la variable que contienedichovalor.
<? function cuadrado($numero) { $numero*=numero; return $numero; } $numero=3; $cuadrado=cuadrado($numero); echo ("El cuadrado del nmero $numero es $cuadrado.); ?>

PRCTICA21
RealizaelejercicioparacalcularlaletradelDNIconunafuncin.

PRCTICA22
Realizaelejercicioparacalculareldgitodecontroldeunacuentabancariaconunafuncin.
U.T.10FUNCIONESDEUSUARIO Pgina:6

2RMDULO:IMPLANTACINAPLICACIONESWEB

2011/2012

Tambinesposiblequelafuncingenereunarrayyqueesteseadevueltoaunavariablequese convertiraaesetipodeformaautomtica. Otra opcin de recoger los valores devueltos por return es invocar la funcin mediante una llamada del tipo: list(v1, v2,..)=llamada. Las variables v1, v2, etc. recogern los valores de los elementosdelarraydevueltoporlafuncin.
<? # asignamos valores a dos variables $a=3; $b=5; # escribimos una funcin que eleva la variable a # a la potencia indicada en b # insertando return delante de la operacin function a1($a,$b){ return pow($a,$b); } #incluimos en la instruccin echo una llamada # a la funcin y en ella pasamos los valores # recogidos en las variables a y b # return conseguir que se ejecute esa funcin # y que echo recoja e imprima el resultado echo "El valor de a elevado a b es: ",a1($a,$b),"<br>"; # esta otra funcin generar y <B>devolver un array</B> # con los resultados de la ejecucin del bucle for function a2($a,$b){ for ($i=0;$i<=$b;$i++){ $z[]=pow($a,$i); } return $z; } # hacemos una llamada a la funcin $p=a2($a,$b); # leemos el array devuelto desde fuera de la funcin foreach($p as $clave=>$valor){ echo "El valor de a (3) elevado a: ",$clave," es: ",$valor,"<br>"; } echo "<br>"; # otra forma de leer el array con los resultados de la funcin list($r,$s,$t)=a2($a,$b); echo "Este es el valor recogido en la variable r :",$r,"<br>"; echo "Este es el valor recogido en la variable s :",$s,"<br>"; echo "Este es el valor recogido en la variable t :",$t,"<br>"; ?>

U.T.10FUNCIONESDEUSUARIO

Pgina:7

2RMDULO:IMPLANTACINAPLICACIONESWEB

2011/2012

U.T.11FUNCIONESINTEGRADASAVANZADAS
1.FUNCIONESAVANZADASDECADENAS. Como complemento a las descritas en el tema anterior, aadimos aqu algunas otras Funciones PHPquetambinpermitenmanejarcadenasdecaracteres. chunk_split(cad,n,sep) Devuelvelacadena(cad)despusdehaberleinsertado,cadancaracteres,lacadenaindicadaenel parmetro sep. Si no se indica sep PHP pondr un espacio. Si no se establece el parmetro n insertarelseparadorcada76caracteres(retornodecarroynuevalnea"\r\n"). Estafuncincolocasiempreunseparadoralfinaldelacadena. explode(sep,cad,n) Devuelve un array cuyos elementos contienen cada una de las porciones de la cadena (cad) comprendidas entre dos de los caracteres sealados como (sep) hasta el mximo de porciones sealadas(n).Loscaracteresseparadoresnosonincluidosenlascadenasresultantes. Sinoseindicalacantidaddeporciones,serfraccionadatodalacadena.Siseindicanmero,el ltimotrozocontendrtodalacadenarestante. implode(sep,array) Devuelve una cadena formada por todos los elementos del array separados mediante los caracteresindicadosensep.

PRCTICA23
Realiza una funcin que tenga de parmetro de entrada una cadena (EJ: "0123456789abcdefghijklmnopqrstuvxyzABCDEFGHIJKLMNOPQRSTUVXYZ") y devuelva un array enelquecadaelementoestformadopor5caracteresdelacadenaanterior. Encriptacindecadenas PHP dispone de funciones que permiten codificar o encriptar cadenas de caracteres. A continuacinsemuestranalgunasdeellas. bin2hex(cadena) Devuelve una cadena ASCII que contiene la representacin hexadecimal de la cadena. La conversinserealizabyteabyte,conlos4bitssuperioresprimero. crypt(cadena) Devuelvelacadenaencriptadautilizandounasemillaaleatoriadedoscaracteres.Porsucarcter aleatorio,siseejecutadosvecesseguidas,dardosresultadosdiferentes. crypt(cadena,"xx") Devuelvelacadenaencriptadautilizandocomosemillalosdoscaracteres(entrecomillas)quese escribencomosegundoparmetrodelafuncin.Tantoenestesupuestocomoenelanterior,los dosprimeroscaracteresdelacadenaencriptadacoincidenconlosquehansidoutilizadoscomo semilla.
U.T.10FUNCIONESINTEGRADASAVANZADAS Pgina:1

2RMDULO:IMPLANTACINAPLICACIONESWEB

2011/2012

md5(cadena,"xx") Aplica el algoritmo md5 (este algoritmo presenta como peculiaridades que tenga la dimensin quetengalacadenaalaqueseapliquegenerasiempreunahuelladigitalquenoesotracosaque unacadenaformadapor32caracteresyquenodisponedeningnmecanismoinversoydevuelve lahuelladigitalgeneradaporl). base64_encode(cadena) Recibecomoargumentounacadenayladevuelveencriptada. base64_decode(cadena) Recibecomoargumentolacadenaencriptadaydevuelvelacadenaoriginal. 2.FUNCIONESDEFECHA PHPdispone,entreotras,conlassiguientesfunciones: date(cadenadeformato) Devuelve valores de fecha y hora actuales utilizando los parmetros que se sealan en la tabla queseencuentraacontinuacinparaestablecerelformatodesalidadelosdatos.Dentrodela mismacadenadeformatopuedecontenertantosparmetroscomosedeseen. NoolvidesquePHPseejecutaenelservidorquesueleestarenunordenadorremoto.Porlotanto, fecha y hora locales se refieren al lugar donde est instalado el servidor y que en nuestro caso servidor y cliente coinciden en un mismo equipo y coincidirn la hora del sistema con la del servidor.Perosialojarasestapginaenunhostingaustraliano,PHPnosdevolveralosvalorescon horayfechadelasantpodas. date(formato,nmero) Esta funcin nos devuelve la fecha y hora del tiempo Unix indicado en el parmetro nmero. Recuerdatambinqueesenmeroindicasegundoscontadosapartirdela0:00:00(GMT)delda 1deEnerode1970.

U.T.10FUNCIONESINTEGRADASAVANZADAS

Pgina:2

2RMDULO:IMPLANTACINAPLICACIONESWEB

2011/2012

gmdate(cadenaformato) Se comporta de formaidntica a date() con la nica diferencia de que devuelve la hora y fecha GMT. gmdate(formato,nmero) Losmismoscomentariosqueconelcasoanterior.LanicadiferenciaesquedevuelvehoraGMT. Ejemplo:
<? echo "Son las ", date("h : i : s")," y hoy es ", date("j-n-Y"),"<br>"; echo "Fu a las ", date("h:i:s",456573426)," del ", date("j-n-Y",456573426), "<br>"; echo "Son las ", gmdate("h : i : s")," y hoy es ", gmdate("j-n-Y"),"<br>"; U.T.10FUNCIONESINTEGRADASAVANZADAS Pgina:3

2RMDULO:IMPLANTACINAPLICACIONESWEB

2011/2012

echo "Fu a las ", gmdate("h:i:s",456573426)," del ", gmdate("j-n-Y",456573426) ,"<br>"; ?>

PRCTICA24
Realizaunafuncinquetengadeparmetrosdeentradaunda,unmesyunaoyretornelaedad deesapersona. Hacerotrafuncinqueretornelaedadperoenestecasolaentradaesunacadenaenelformato: "YYYYmmdd". checkdate(mes,da,ao) Compruebasilosvaloresdelosparmetrosmesestndentrodelrangopermitido(de1a12),siel parmetro da es un valor vlido para ese mes (considera aos bisiestos) y si el valor del ao pertenece al rango 0 a 32767. Devuelve VERDADERO si los valores corresponden a una fecha correctayFALSOenelcasodequenoocurraas.

PRCTICA25
Realizaunafuncinquetengadeparmetrodeentradaunaoyretornetrueofalsesegnseao nobisiesto(utilizalafuncincheckdate). gettimeofday() Estafuncindevuelveunarrayasociativoconlossiguientesndices: sec > El valor asociado a este ndice del array recoge la hora actual (Unix Each) expresada en segundos. usec>Elvalorasociadoausecrecogelafraccinenmicrosegundosdehoraactual(UnixEach). minuteswest>DevuelvelosminutosalOestedeGreenwich. dsttime() Devuelveeltipodecorreccinhorariasegnhorariosdeverano/invierno.ElvalorUNO correspondeahorariodeverano,elvalorCEROaldeinviernoyMENOSUNOenelcasoenquesea desconocido.

U.T.10FUNCIONESINTEGRADASAVANZADAS

Pgina:4

2RMDULO:IMPLANTACINAPLICACIONESWEB

2011/2012

getdate() Devuelve un array asociativo con parmetros de la fecha actual. Los ndices de este array y sus valoressonlosquepuedesverenelejemplo. getdate(nmero) InterpretaelnmerocomounafechaUnixEach(segundostranscurridosdesdeelda1deEnero de1970)ydevuelveunarrayasociativoconlosvaloresrelativosaesafecha.Losndicesdeeste arrayysusvaloressonidnticosalosdegetdate()ypuedesverlosenelejemplo.

U.T.10FUNCIONESINTEGRADASAVANZADAS Pgina:5

2RMDULO:IMPLANTACINAPLICACIONESWEB

2011/2012

microtime() EstafuncindevuelvelafraccindemicrosegundosdelahoraactualexpresadaentiempoUnix. time() EstafuncindevuelvelahoraactualensegundosexpresadaentiempoUnix. mktime(hora,min,seg,mes,da,ao,horario) Devuelve el tiempo Unix de la fecha pasada como parmetro a la funcin. Es fundamental mantener la secuencia de los datos. Si se omiten argumentos (slo pueden omitirse por la derecha)tomarlosdelafechaactual. El parmetro horario es opcional y admite los valores 0 (horario de invierno), 1 (horario de verano).Cuandoelparmetrodaescerodevuelveelltimodadelmesanterior,perosipasamos cerocomoparmetrodemesnosdarunerror.

Enlosejemplospuedeversecomoparavaloresfueraderango(mesmayorde12,minutosmayor de60,etctera)lafuncinrealizalacorreccincorrespondiente.

PRCTICA26
Realizaunafuncinquetengadeparmetrosdeentradadosfechasyretorneelnmerodedas transcurridosentreellas.

PRCTICA27
Realiza una funcin que tenga de parmetro de entrada una fecha de nacimiento y retorne el nmerodeaos,mesesydasquetieneesapersona.

U.T.10FUNCIONESINTEGRADASAVANZADAS

Pgina:6

2RMDULO:IMPLANTACINAPLICACIONESWEB

2011/2012

U.T.12UTILIZACINDEFICHEROSDESCRIPTSEXTERNOS
PHPdisponedefuncionesquepermiteninsertarenundocumentounaparteolatotalidaddelos contenidosdeotro.Estaopcinresultamuyinteresante,tantodesdeelpuntodevistaoperativo comoenlorelativoalaseguridad. Estassonalgunosdelosrecursosquepermitenesetipodeinclusiones: include("nom.delficheroscript") Elparmetronom.delficheroesunacadenaquecontieneelpathyelnombredelficheroscript cuyoscontenidospretendemosincluir.Puedenincluirseficherosconcualquierextensinaunque esmuyhabitualutilizararchivosconextensin.inc.php. Laprimeraparte(inc)nospermitiridentificarestetipodeficherosmientrasquelaextensinphp obligara a que (si un usuario malicioso pretende visualizar el contenido del fichero) fuera interpretado por PHP y, como consecuencia de ello, solo devolvera el resultado sin permitir la visualizacindeinformacionesprivadas(contraseasporejemplo)quepudieracontener. Estetipodeficherospuedencontener:texto,etiquetasHTMLyfunciones. Sinocontienefuncionessepodrinsertartantasvecescomoseinvoqueyseinsertar,adems, todosucontenido.Sielficherocontienefuncionessolopodrserinvocadounavezyaquesise hiciera una segunda llamada se producira un error por duplicidad en los nombres de las funciones.Esposibleincluircualquiertipodefunciones.Tantolasdelaforma: <?functionnombre{?> ..... ...cdigoHTML... ...... <?}?> conlasquesepuedenincluirporcionesdecdigoHTMLencualquierscript,comolasdeltipo: functionnombre{ ..... ...instruccionesPHP... ...... } que permiten invocar funciones repetitivas a partir de cualquier documento PHP. Definidas las funciones en el fichero a incluir y colocado al comienzo de la pgina un script que contenga el include y la ruta de ese fichero, bastar con invocar cualquiera de las funciones, en cualquier puntodeldocumento,paraqueesallamadaseasustituidaporelresultadodelaejecucindela funcin. Como es lgico, solo sern visualizados en el navegador del cliente los resultados de la ejecucindelasfuncionesquehayansidoinvocadas. Losficherosaincluir Este primer ejemplo de fichero a incluir contiene nicamente texto y etiquetas HTML pero no contieneningunallamadaaningunafuncinPHP,nitampoconingnscriptdeestelenguaje.Lo guardaremoscondosextensiones:ejemplo1.inc.phpyejemplo1.inc.
<h3><font color="#ff0000">Este sera un texto que se incluira dentro de la pgina mediante la funciones include o require</font></h3><br>

El siguiente ejemplo que tambin grabaremos con dos extensiones (ejemplo2.inc y ejemplo2.inc.php), contiene funciones PHP que pueden ser invocadas desde cualquier otro
U.T.12UTILIZACINDEFICHEROSDESCRIPTSEXTERNOS Pgina:1

2RMDULO:IMPLANTACINAPLICACIONESWEB

2011/2012

documento PHP. Dado que las funciones contienen etiquetas HTML al abrir mediante el navegador el documento con extensin .inc sern interpretadas y se visualizarn parte de los contenidos.Cuandollevaextensin.phpsevisualizarunapginaenblancoyaqueesasetiquetas estncontenidasenfuncionesquenosoninvocadasdesdeelpropioscript.
<? function Encabezado() { ?> <HTML> <head> <title> Pruebas con la funcin include </title> </head> <BODY> <center> <font size=6 face="Times" color="#0000ff">Pruebas PHP</font><br> <hr width=75%> <? } ?> <? function Pie() { ?> <center><hr width=50%> <font size=2 face="Arial" color="#ff0000">Trabajando con PHP</font> <hr width=50%></center> </body> </html> <? } ?> <? function Calcula($a,$b) { return $a*$b; } ?>

Incluyendo ficheros de scripts


<!-- empezaramos incluyendo el fichero que contiene las funciones. No escribira nada hasta que las funciones que contiene no fueran invocadas //--> <? include("ejemplo2.inc.php") ?> <!-- Insertaremos un script PHP que invoque la funcin encabezado. Debe llevar las etiquetas de apertura y cierre <? y ?> de PHP //--> <? Encabezado() ?> <!-- Insertaremos cdigo HTML segn nuestra conveniencia //--> Aqu ira el contenido de la pgina<br> .... esto es texto HTML................<br> ...........................<br><br><br> <!-- Incluimos el fichero ejemplo1.inc y dado que no contiene ninguna funcin, insertar aqu todo su contenidos //--> <? include("ejemplo1.inc.php") ?> <!-- Insertaremos ms cdigo HTML --> ....................<br> ...........................<br><br><br> <!-- Incluimos nuevamente el fichero ejemplo1.inc Puede repetirme la inclusin porque no contiene funciones si las contuviera habra un conflicto de duplicidad porque una funcin no puede estar definida dos veces con el mismo nombre. La instruccin include como en todos los casos deber ir dentro de un script PHP y por tanto entre <? y ?> //--> <? include("ejemplo1.inc.php") ?> <!-- Ahora ejecutaremos la funcin PHP Calcula() pasando como parmetros 7 y 9. El return de la funcin nos devolver U.T.12UTILIZACINDEFICHEROSDESCRIPTSEXTERNOS Pgina:2

2RMDULO:IMPLANTACINAPLICACIONESWEB
el resultado que imprimiremos aqu //-->

2011/2012

<? print "Aqu va el resultado de la multiplicacin: ".Calcula(7,9); ?> <!-- Por ltimo invocaremos la funcin Pie() --> <? Pie() ?>

Lafuncinrequire() Tienelamismasintaxisqueincludeyunafuncionalidadsimilar,aunqueconalgunasdiferencias. Igualqueocurraconaqul,cuandounficheroesinvocadoporrequireesallamadaloquehacees sustituirseasmismaporelcontenidodelficheroespecificado. A diferencia de include, la etiqueta require lee y escribe en el documento a partir del que es invocadaelarchivoreferenciadocompletoynoaceptacondicionalesquessonaceptadospor include. Evitarerroresporduplicidaddellamadas Tantoenelcasodeusarlainstruccinincludecomoconrequire,siseintentaincluirdosoms veces un fichero que contenga funciones, se producir un error (PHP no permite que dos funcionestenganelmismonombre)yseinterrumpirlaejecucindelscript.Loserroresdeese tipopuedeevitarseusandolasfunciones: include_once("fichero")yrequire_once("fichero") Adiferenciadeincludeyrequierevanaimpedirqueunmismoficheropuedaincluirsedosveces.
<!-- Repetimos la inclusin de ambos ficheros pero veremos que no aparece mensaje de error por duplicidad de funciones y adems pese a hacer una doble insercin de ejemplo1 solo se visualiza una vez por efecto del filtro establecido por include_onde //--> <? include_once("ejemplo2.inc.php") ?> <? Encabezado() ?> Aqu ira el contenido de la pgina<br> ....................<br> ...........................<br><br><br> <? include_once("ejemplo1.inc.php") ?> ....................<br> no aparecer nada aqu debajo<br><br><br> <? include_once("ejemplo1.inc.php") ?> <? include_once("ejemplo2.inc.php") ?>

Comprobandolosficherosdescriptsincluidos PHP dispone de dos funciones que permiten recogeren un array lalista de ficheros que sehan insertado en el documento por medio de las instrucciones require, require_once y con include_onceeinclude.Talesfuncionessonestas: $v=get_included_files() Recogeenunarrayescalar(contenidoenlavariable$v)losnombresdelosficherosincluidosenel archivoenusoporinclude_once.
<? include_once("ejemplo2.inc.php") ?> <? Encabezado() ?> <? include_once("ejemplo1.inc.php") ?> <? Pie() ?> Lista de fichero utilizados por include <? $z= get_included_files(); foreach($z as $clave=>$valor) { U.T.12UTILIZACINDEFICHEROSDESCRIPTSEXTERNOS Pgina:3

2RMDULO:IMPLANTACINAPLICACIONESWEB
echo "Clave: ",$clave," Valor: ",$valor,"<br>"; }; ?>

2011/2012

$v=get_required_files() Igualquelafuncinanteriorrecogeenunarrayescalar(contenidoenlavariable$v)losnombres delosficherosincluidosenelarchivoenusomedianterequire_once. Mejorandolaseguridad Lafuncinshow_source,permitevisualizarelcdigofuentedelosscriptsnosololocalessinode cualquierURLsiestafuncinnoestdesactivadaenelphp.ini. Esaposibilidaddevernoslopermiteverlatcnicadeconstruccindelosscripts,etctera,sino que permite ver tambin las claves y contraseas de acceso a las bases de datos que pudieran contenerlosscripts. Aparte de simplificar el trabajo la opcin de incluir ficheros externos permite guardar la informacin confidencial fuera del root del servidor y usarla mediante estas llamadas. De ese modoshow_sourcepermitiravisualizarelnombredeeseficheroexternoperonosucontenido. Si creramos un directorio por ejemplo como subdirectorio de c:\Apache (fuera del root del servidor) y le ponemos como nombre sg, podramos guardar all los ficheros ejemplo2 y ejemplo1, con lo cual sus contenidos no seran visibles con show_source. En este caso la instruccinincludehadecontenerelpathyseralasiguiente:include("C:\Apache\sg\fichero").

U.T.12UTILIZACINDEFICHEROSDESCRIPTSEXTERNOS

Pgina:4

2RMDULO:IMPLANTACINAPLICACIONESWEB

2011/2012

U.T.13MANEJODEFICHEROSEXTERNOS
Utilizacindeficherosexternos PHPdisponedefuncionesmediantelascualessepuedencrear,modificar,borraryleerficheros decualquiertipoascomoextraerinformacinsobreellosysuscontenidos. Abrirocrearficheros Paracrearomodificarficherosseutilizalainstruccin:$f1=fopen(fichero,modo)dnde$f1esuna variablequerecogeelidentificadordelrecurso,unvalorimportante(serutilizadoparareferirnos a este fichero en instrucciones posteriores), fichero es el nombre (con extensin) del fichero a abrirocrearydeberescribirseentrecomillas,ymodo,queesunacadenaquedebemosponer entrecomillas,elindicadordelmododeaperturaelegido. Enlatablasiguienteenumerolasopcionesdeeseparmetro:

Si el fichero que pretendemos abrir est en un directorio distinto al del script, debe incluirse el pathcompletodelantedelnombredelficheroylacadenaresultantedebeirentrecomillas. Cerrarficheros Unavezfinalizadoelusodeunficheroesnecesariocerrarlo.ParaelloPHPdisponedelasiguiente instruccin:fclose($f1) Estafuncinquedevuelveunvalorbooleanopermitecerrarelficheroespecificadoen$f1que, como recordars, es el valor del identificador de recurso que le fue asignado automticamente porPHPenelmomentodelaapertura. Punterosinternos PHPdisponedefuncionesparasituarsuspunterosinternosytambinparadeterminarlaposicin alaqueapuntanenunmomentodeterminado.Setratadelassiguientes: feof($f1). Es un operador booleano que devuelve CIERTO (1) si el puntero seala el final del ficheroyFALSOsinolohace. rewind($f1) Colocaelpunterointernoalcomienzodelficheroindicadoporelidentificadordelrecurso$f1. fseek($f1,posicin) Sita el apuntador del fichero sealado por el identificador del recurso $f1 en la posicin (expresadaenbytes)sealadaporposicin. ftell($f1)
U.T.12MANEJODEFICHEROSEXTERNOS Pgina:1

2RMDULO:IMPLANTACINAPLICACIONESWEB

2011/2012

Devuelve(expresadaenbytes)laposicinactualdelpunterointernodelfichero.Antesdeutilizar funcionesesnecesarioqueelficheroquesealaelidentificadorderecursoshayasidoabierto. Lecturadeficheros Lalecturadeloscontenidosdeunficheropuedehacersededosmaneras:sinaperturapreviao conaperturapreviadelmismo. Lecturadeficherossinaperturaprevia Las funciones que permiten la lectura de ficheros sin haber sido abiertos previamente son las siguientes: readfile(fichero) Escribe directamente en el punto de insercin del script el contenido completo del fichero. La funcinreadfileescribeelcontenidodelficherosinnecesidaddeirprecedidoporechoniprint.Si seponeechooserecogeenunavariable,ademsdesucontenidoaadirunnmeroqueindica eltamaodelficheroexpresadoenbytes. $var=file(fichero) Crea$varunarrayescalarcuyoselementostienencomovaloresloscontenidosdecadaunade laslneasdelfichero.Unalneaterminaalldondesehayainsertadounsaltodelneaenelfichero original. Lecturadeficherosconaperturaprevia Paralautilizacindeestasfuncioneslosficheroshandeserabiertosenunmodoquepermitala lectura.Lafuncinquepermitelalecturacompletadelficheroes: fpassthru($f1) Estafuncinpresentaalgunaspeculiaridadesimportantes: Cierra el fichero de forma automtica despus de la lectura. Por esa razn, si se escribe la funcinfcloseacontinuacindefpassthru,seproduceunerror. Si el resultado se recoge en una variable, o si va precedido de echo, adems de escribir el contenidodelmismo,aadirelnmerodebytesqueindicansutamao. fgets($f1,long) Extrae del fichero sealado por el $f1 una cadena que comienza en la posicin actual del punteroycuyalongitudestlimitadaporelmenordeestostresvalores: Elvalor(enbytes)indicadoenlong. Ladistancia(tambinenbytes)desdelaposicinactualdelpunterohastaelfinaldelfichero. Ladistanciaquehayentrelaposicinactualdelpunteroyelprimersaltodelnea. fgetc($f1) Extraeelcarctersiguientealsealadoporlaposicinactualdelpuntero. Escribirenunfichero Una vez abierto un fichero en modo que permita escritura la funcin PHP que nos permite escribireneleslasiguiente: fwrite($f1,"texto",long)

U.T.12MANEJODEFICHEROSEXTERNOS

Pgina:2

2RMDULO:IMPLANTACINAPLICACIONESWEB

2011/2012

donde: $f1 sigue siendo el identificador de recurso, texto la cadena de texto a insertar en el ficheroylongelnmeromximodecaracteresquehandeinsertarse.Silacadenadetextotiene menoroiguallongitudqueelparmetrolonglaescribirensutotalidad,encasocontrarioslo escribirelnmerodecaracteresindicados. Tambinesposibleutilizar: fputs($f1,"texto",long) queenrealidadesunaliasdelafuncinanterior. Estasfuncionesrealizanlainsercindelacadenaapartirdelaposicinalaqueapunteelpuntero enelmomentodeserinvocadas.Sielficheroyaexistieraycontuvieradatoslosnuevosdatosse sobrescribiransobreelcontenidoanterior. Para poder aadir contenidos a un fichero el puntero deber apuntar el final del fichero preexistenteyestarabiertoenunmodoquepermitaaadircontenidos. Borradodeficheros Paraborrarficherosseutilizalasiguienteinstruccin: unlink(fichero) fichero ha de ser una cadena que contenga el nombre y la extensin del fichero y, en su caso, tambinelpath. Duplicadodeficheros Lafuncin:copy(fich1,fich2) Copia el fichero fich1 (debe indicarse nombre y extensin) en otro fichero cuyo nombre y extensinseestablecenenlacadenafich2.Estafuncindevuelveunvalorbooleanoindicandosi la copia se ha realizado con xito TRUE (1) o FALSE (null) si por alguna razn no ha podido realizarse. Renombrarficheros Lafuncin:rename(fich1,fich2) cambia el nombre del fichero fich1 (hay que poner nombre y extensin) por el indicado en la cadena fich2. Tambin devuelve TRUE o FALSE. Si tratamos de cambiar el nombre a un fichero inexistentenosdarerror. Funcionesinformativas PHP dispone de funciones que nos facilitan informacin sobre ficheros. Algunas de ellas son las siguientes: file_exists(fichero) EstafuncindevuelveTRUEsielficheroexiste,encasocontrariodevuelveFALSE. filesize(fichero) Devuelveeltamaodelficheroexpresndoloenbytes.Encasodequeelficheronoexistieranos darunerror. filetype(fichero)

U.T.12MANEJODEFICHEROSEXTERNOS

Pgina:3

2RMDULO:IMPLANTACINAPLICACIONESWEB

2011/2012

Devuelveunacadenaenlaqueseindicaeltipodelfichero.Encasodequeelficheronoexistiera nosdarunerror. filemtime(fichero) DevuelveentiempoUnixlafechadelaltimamodificacindelfichero. stat(fichero) Devuelveunarrayquecontieneinformacinsobreelfichero.Enlatablasiguientepuedesverlos contenidosasociadosacadaunodesusndices.

Ejemplos: Unejemplodealgunasfuncionessobreficheros
<? # abrimos con w+ con lo cual borramos el contenido # y creamos el fichero en el caso de que no existiera $f1=fopen("sabado.txt","w+"); # escribimos en el fichero vaco

fwrite($f1,"Esta es la primera lnea que escribimos en el fichero<br>"); #cerramos el fichero fclose($f1); echo "<H2>Este es el resultado despus del primer fwrite</H2><br>"; include("sabado.txt"); # abrimos con r+ con lo cual sobreescribiremos # en el fichero preexistente $f1=fopen("sabado.txt","r+"); # escribimos en al principio del fichero preexistente U.T.12MANEJODEFICHEROSEXTERNOS Pgina:4

2RMDULO:IMPLANTACINAPLICACIONESWEB
# ya que al abrir un fichero en este modo el puntero # se sita al comienzo del fichero fputs($f1,"Esto se sobreescribe"); #cerramos el fichero fclose($f1);

2011/2012

echo "<H2>Este es el resultado despus del segundo fwrite</H2><br>"; include("sabado.txt"); # abrimos con a+ con lo cual AADIREMOS # al fichero preexistente ya que el modo de apertura # sita el puntero al final del fichero $f1=fopen("sabado.txt","a+"); # escribimos al final del fichero preexistente

fputs($f1," Esto se aadir al final<br>"); #cerramos el fichero fclose($f1); echo "<H2>Este es el resultado despus del tercer fwrite</H2><br>"; include("sabado.txt"); echo "<h2>Leyendo con fgetc</h2><br>"; # abrimos con r+ con lo cual podemos LEER y AADIR # al fichero preexistente $f1=fopen("sabado.txt","r+"); # leemos el primer carcter del fichero # ya que el apuntador esta el principio $z=fgetc($f1); # imprimimos el primer carcter echo "He ledo el primer carcter: ",$z,"<br>"; /* leemos el segundo carcter del fichero ya que el apuntador se ha movido a esa posicin al leer anteriormente el primer carcter. OBSERVA que NO HEMOS CERRADO AUN EL FICHERO */ $z=fgetc($f1); # este es el nuevo valor de la variable $z echo "He ledo el segundo carcter: ",$z,"<br>"; /* leemos el siguiente carcter del fichero ya que el apuntador se ha movido a una nueva posicin Recuerda que NO HEMOS CERRADO AUN EL FICHERO */ $z=fgetc($f1); U.T.12MANEJODEFICHEROSEXTERNOS Pgina:5

2RMDULO:IMPLANTACINAPLICACIONESWEB
# este es ahora el valor de la variable $z echo "He ledo el tercer carcter: ",$z,"<br>"; echo "<h2>Ahora el puntero est en el tercer carcter<br>"; echo "fgets empezar a leer a partir de l</H2>"; $z=fgets($f1,200); echo "Con fgets he ledo esto: ",$z,""; #Ahora cerramos el fichero fclose($f1); echo "<br><H2>Al abrir el fichero de nuevo fgets comienza desde el principio</h2><br>"; #Abrimos de nuevo el fichero $f1=fopen("sabado.txt","r"); #Leemos su contenido $za=fgets($f1,5000); #Presentamos el contenido echo $za; #Ahora cerramos el fichero fclose($f1); #Borramos el fichero antes de salir unlink("sabado.txt"); ?>

2011/2012

Cuando se lee un fichero, ste no tiene que tener necesariamente, la extensin .txt. Se puede programa un script para que lea, por ejemplo, el listado de una pgina con extensin .htm,...En estecaso,secargarlapginaledaenelnavegadorcomosilahubisemosllamadodirectamente. Ejemplo: Elfichero"ficheroHTML.htm"tieneelcontenido:
<html> <head> <title>P&aacute;gina HTML simple</title> </head> </html>

Serealizaelejemplosiguienteparaleerelficheroanterior:
<h2>Aqu veremos el contenido de una pagina web</H2> <? # Escribimos la direccin completa de la pgina que puede ser # el resultado de unir el valor de la variable $_SERVER['DOCUMENT_ROOT'] # (ruta completa del directorio raiz de servidor) # con el nombre del directorio que la contiene y nombre del fichero # la abrimos en modo solo lectura $f1=fopen($_SERVER['DOCUMENT_ROOT']."/practicas/ficheroHTML.htm","r"); # Escribimos un bucle para que vaya leyendo U.T.12MANEJODEFICHEROSEXTERNOS Pgina:6

2RMDULO:IMPLANTACINAPLICACIONESWEB
# cada una de las lneas hasta llegar al final del fichero while (!feof($f1)) { $z = fgetss($f1, 1024); echo $z,"<br>"; } #Cerramos el fichero fclose($f1); ?>

2011/2012

Lasalidaser:

YsiejecutamoslaopcinVerCdigoFuente,tendremos:

Otroejemplocompletandoelanterior. Hemoscreadounficherollamadodomingo.txtparapoderutilizarloenlosejemplos.Sucontenido esexactamenteelsiguiente(incluidoslossaltosdelnea):


Esto es un ejemplo para comprobar si funcionan o no los saltos de lnea en un documento de texto que ser ledo desde php

<? # Abrimos el fichero en modo lectura $f1=fopen("domingo.txt","r"); # Al anteponer echo a fpassthru # NOS APARECERA AL FINAL EL TAMAO DEL FICHERO echo fpassthru($f1),"<br>"; /* Abrimos de nuevo el fichero RECUERDA QUE FPASSHRU LO CIERRA AUTOMATICAMENTE DESPUES DE EJECUTAR LA INSTRUCCIN */ $f1=fopen("domingo.txt","r"); # Este bucle nos escribir cada una de las U.T.12MANEJODEFICHEROSEXTERNOS Pgina:7

2RMDULO:IMPLANTACINAPLICACIONESWEB
#lneas del fichero while(!feof($f1)){ $z=fgets($f1,4000); echo $z,"<br>"; } # Situamos el puntero al comienzo del fichero rewind($f1); # Reescribimos el fichero while(!feof($f1)){ $z=fgets($f1,4000); echo $z,"<br>"; } # Situamos de nuevo el puntero al comienzo del fichero rewind($f1); # Situamos el puntero sealando el byte nmero 15 del fichero

2011/2012

fseek($f1,15); # Releemos el fichero #ahora la primera lnea estar incompleta #LE FALTARAN LOS 15 PRIMEROS CARACTERES while(!feof($f1)){ $z=fgets($f1,4000); echo $z,"<br>"; } # volvemos el puntero al comienzo del fichero rewind($f1); #leemos la primera lnea $z=fgets($f1,4000); echo $z,"<br>"; # Determinamos LA POSICION ACTUAL DEL PUNTERO echo ftell($f1),"<br>"; # Cerramos el fichero fclose($f1); echo "_________________________________________<br>"; # leemos el fichero y lo presentamos en diferentes modalidades $pepe=readfile("domingo.txt"); readfile("domingo.txt"); echo $pepe, "<br>"; #leemos el fichero y lo recogemos #en un array $z=file("domingo.txt"); U.T.12MANEJODEFICHEROSEXTERNOS Pgina:8

2RMDULO:IMPLANTACINAPLICACIONESWEB
#Al presentar la variable solo #nos aparecer la palabra array echo $z,"<br>"; # presentamos el contenido del array

2011/2012

foreach($z as $linea=>$texto) { echo "Lnea: ",$linea," Texto: ",$texto,"<br>"; }; # copiamos el fichero con mensaje de resultado if (!copy("domingo.txt", "otrodomingo.txt")) { print("Error en el proceso de copia<br>\n"); }else{ print "<br>Fichero copiado con xito"; } # renombramos un fichero con mensaje de resultado if (!rename("otrodomingo.txt", "otrolunes.txt")) { print("Error en el proceso de renombrado<br>"); }else{ print "<br>Fichero renombrado con xito"; } unlink("otrolunes.txt"); echo "Ultima modificacin a las: ",date("h:i:s A", filemtime ("domingo.txt"))," del da ", date("j-n-Y", filemtime ("domingo.txt")); echo "<br>El tamao del fichero es: ", filesize("domingo.txt")," bytes<br>"; echo "<br>El fichero es tipo: ", filetype("domingo.txt")," <br>";

echo "<br>Saldr un 1 si el fichero existe: ",file_exists("domingo.txt"); ?>

PRCTICA28
Escribeunscriptquecreeygestioneunficheroquesirvadecontadordelnmerodevisitasquese hacenaesapginaweb.Enelscriptsetienenquemostrarelnmerodevecesquesehavisitado.

Guardaryleerdatostransferidosmedianteunformulario Aunqueelmodohabitualdeguardarinformacinsueleserlosservidoresdebases de datos (MySQL, por ejemplo) la utilizacin de ficheros ofrece posibilidades de
almacenamientodeinformacin. Esteesunejemplomuysencillo,enelquemedianteunformulariotalcomoelqueapareceenel recuadropuedetransferirseyalmacenarselainformacinenunfichero.
<HTML> <HEAD> </HEAD> <BODY> <form name="fichero" method="post" action="escribe.php"> U.T.12MANEJODEFICHEROSEXTERNOS Pgina:9

2RMDULO:IMPLANTACINAPLICACIONESWEB
<!-- Pueden incluirse textos dentro del formulario --> Escribe nombre: <input type="text" name="nombre"> Escribe apellido: <input type="text" name="apellido"> Escribe edad: <input type="edad" name="edad"> <input type="submit" value="enviar"> <input type="reset" value="borrar"> </FORM> </BODY> </HTML>

2011/2012

<? /*abrimos el fichero en modo a+ para permitir que se cree en caso de no existir, que permita los modos lectura y escritura y que escriba al final del fichero */ $f1=fopen("escribiente.txt","a+"); # hacemos un bucle para leer los valores transferidos # desde el formulario y recogidos en el array $_POST foreach($_POST as $v){ /* aadimos "\r\n" a cada valor para que se inserte un salto de lnea y que cada valor sea recogido en una lnea distinta en el fichero Limitamos las entradas a 150 caracteres*/ fwrite($f1,$v."\r\n",150); } /* para comprobar que los nuevos datos han sido agregados y visualizar el contenido integro del fichero situamos el puntero interno al comienzo del mismo */ rewind($f1); /* creamos un bucle que vaya leyendo todas las lneas hasta encontrar el final del fichero */ while (!feof($f1)) { /* vamos leyendo el contenido de cada lnea del fichero y aunque establecemos en 250 el nmero de caracteres dado que los saltos del lnea aparecern antes sern ellos los puntos de interrupcin de cada lectura*/ $z = fgets($f1,250); #presentamos el resultado de las lecturas echo $z,"<br>"; } # cerramos el fichero fclose($f1); ?>

PRCTICA29
Creaunscriptquecuandoloejecutemosgrabeenunficherolafechayhoraenlaqueseaccedi aesapgina.Tambindeberpresentarlafechayhoradelavisitaanterioraellaysieslaprimera vezqueseaccededeberaparecerunmensajediciendo:"Estaeslaprimeravezquehasaccedido aestapgina".

U.T.12MANEJODEFICHEROSEXTERNOS

Pgina:10

You might also like