You are on page 1of 42

6/11/2015

Tutorial PHP

Tutorial de PHP
Versin: 1.2, Marzo, 2003
Autor: F. Javier Garca Castellano
Web: http://decsai.ugr.es/~fjgc, Mail: fjgc@decsai.ugr.es

(C) GeNeura Team


Web: http://geneura.ugr.es, Mail: tutti at geneura.ugr.es

Introduccin
Qu es y qu herramientas vamos a usar
En este tutorial veremos los elementos necesarios para escribir y
procesar documentos PHP.
El PHP (Profesional Home Pages Pginas Personales Profesionales)
es un un lenguaje para la creacin de pginas web. Es una solucin para la
construccin de Webs con independencia de la Base de Datos (aunque
normalmente se usar MySQL) del servidor Web (aunque normalmente se
usar Apache), vlida para cualquier plataforma (Unix, Windows, Mac). El
objetivo final es conseguir la integracin de las pginas HTML con
aplicaciones que corran en el servidor como procesos integrados en el
mismo, y no como un proceso separado, como ocurre con los CGIs
(aunque PHP tambin puede funcionar como un CGI) . Igualmente interesa
que dichas aplicaciones sean totalmente independientes del navegador (lo
que no ocurre con otros lenguajes basados en scripts como JavaScript o
VisualBasic Script).
Para trabajar con PHP nos va a hacer falta:
Un editor para poder escribir los programas PHP, por ejemplo,
FrontPage (o notepad) en windows y xemacs (o kwrite) en Linux
Un servidor de pginas web , que ejecute y muestre los programas
realizados con PHP, nosotros usaremos Apache.
Una Base de Datos, donde podamos guardar y recuperar
informacin. Esta parte es optativa, aunque en un proyecto real suele
ser necesaria. Nosotros utilizaremos MySQL.
Un navegador, para ver las pginas generadas con PHP, por
ejemplo, el Internet Explorer o el Netscape
Y, por supuesto, el PHP.

ndice
http://flanagan.ugr.es/php/index2.htm

1/2

6/11/2015

TutorialPHP

1. IntroduccinaPHP
1. Introduccin
2. InstalacindePHPenWindows
3. InstalacindePHPenLinux
4. Ejercicios
2. ConceptosbsicosdellenguajePHP
1. InsercindePHPenHTML
2. Separacindeinstrucciones
3. Comentarios
4. Tiposdedatos
5. Variables
6. Constantes
7. Expresionesyoperadores
8. Estructurasdecontrol
9. Funciones
10. Ejercicios
3. ConceptosAvanzadosdellenguajePHP
1. Clasesyobjetos
2. Manejodeerrores
3. Creaciondeimgenes
4. AutentificacindeunusuarioconPHP
5. Cookies(Galletitas)
6. Utilizacindeficherosremotos
7. SubidadeficherosusandoHTTP
8. ManejodeConexiones
9. FuncionesdePHPparaMySQL
10. ReferenciadefuncionesdePHP
11. Ejercicios
4. Enlacesysitiosdereferencia.

Licencia
TutorialdePHPporFranciscoJavierGarcaCastellanoseencuentrabajounaLicenciaCreative
CommonsAtribucinNoComercialCompartirIgual3.0Unported.
Permisosquevayanmsalldelocubiertoporestalicenciapuedenencontrarseen
mailto:fjgc@decsai.ugr.es.

http://flanagan.ugr.es/php/index2.htm

2/2

6/11/2015

IntroduccinaPHP

IntroduccinaPHP
Autor:F.JavierGarcaCastellano

(C)GeNeuraTeam

Web: http://decsai.ugr.es/~fjgc,Mail:fjgc@decsai.ugr.es

Web: http://geneura.ugr.es,Mail:todos@geneura.ugr.es

1.Introduccin
PHPesunlenguaje rpidopeseaserinterpretado,multiplataformaydisponedeunagrancantidaddebibliotecas
paraeldesarrollodeaplicacionesWeb.
Estbasadoenherramientasde softwarelibre(Apache,MySQL,etc.),esdecir,nohayquepagarlasadems
proporcionalosmecanismosparapodertrabajarconcasicualquierbasededatos(seasoftwarelibreono)yservidor
web.
CuandopedimosanuestroservidorwebunapginaPHP,quenoessinounprogramaPHPquegeneraunapgina
HTML,elservidorlepasalapginaalinterpretePHPyeselresultadoloqueseleenvaalcliente.
ElinterpretedePHPpermitesercompiladoyutilizadocomounCGI.Deestaformacualquierservidorwebque
soporteCGIpodraejecutarpginasPHP.NosotrosenestetutoriallovamosausarcomounmdulodeApache,la
ventajaesqueobtenemosunavelocidaddeejecucinbastantesuperior,asicomounconsumomenorderecursos.Enel
casodetenerPHPinstaladocomounmdulodelservidorApache,esteheredatodaslascaractersticasdelservidor.
PHPsecontruyparaserutilizadoconjuntamenteconlabasededatosMySQL,peroactualmentesoportala
mayoradebasesdedatos(Oracle,Informix,ODBC,SQlServer,etc.).NosotrosutilizaremosMySQL,porquela
interaccinentrePHPyMySQLfuncionaalaperfeccinyademsessoftwarelibre.
DebidoaquePHPhassidodiseadodeformamodularysencilla,haymultituddebibliotecasentreellas
destacamoselsoportepara:
AccesodeservidoresIMAPyPOP3
EnvodecorreoconSMTP
AccesodeservidoresFTP
AccesoaSNMPparagestinderedesyequipos
HTTPaniveldesocket
GeneracindinmicadedocumentosPDF
AnlisisyprocesamientodedocumentosXMLyXSLT
Correctordeortografa
ExpresionesregularesdePerl
UtilizacindeclasesJavaomdulos.NET
CreacindeanimacionesFlashusandoPHP

2.InstalacindePHPenWindows
2.1.InstalarApache1.3.x
SiloqueremosinstalarenWindows95,deberemosinstalarprimerolaactualizacindeWindowsSocket2,quelo
tenemosdisponibleenhttp://www.microsoft.com/windows/downloads/bin/W95ws2setup.exe
Ejecutarel".exe"deApacheparawindows
Seguirlasinstrucciones
Probarquefuncionaconunnavegador(porejemplo,IE)escribiendoladireccinlocalhost.
ParavercomoseutilizanlasopcionesdeApacheenelficherodeconfiguracinhttpd.conf(queestarnormalmente
enC:\Archivosdeprograma\ApacheGroup\Apache\conf\httpf.conf),sepuedeecharunvistazoa
http://flanagan.ugr.es/wap/curso/apache.htm(aunqueestetutorialestpensadoparaejecutarpginaspara
mvilesWAP.
2.2.InstalarMysql
Ejecutarelfichero"setup.exe"deMySQLparawindows,instalarelMySQLen,porejemplo,c:\MYSQL
EnwindowsNT/2000/XPSisequiereinstalarMySQLcomounservicio,sedebecrearunficherollamadoC:\MY.CNF
conlasiguienteinformacin:
[mysqld]
basedir=C:/installationpath/
Enc:\MYSQL\hayunficherollamado'myexample.cnf'.quesepuedeusarparacrearelfichero
C:\my.cnf
ParacomenzarautilizaMySQL,hayqueejecutarc:\MYSQL\bin\winmysqladmin.exe
Paracrearbasesdedatossepuedeusarlaherramientawinmysqladmin
ParatrabajarconlasbasesdedatosenMySQLseejecutac:\MYSQL\bin\mysql.exequeesuninterpretede
comandosqueaceptasenteciasSQL.ParaCambiardebasededatosseusa"usenombre_BD".Paraverlastablas
"showtables"yparaverelformatodeunatablaenparticular,seusar"descnombre_tabla".
http://flanagan.ugr.es/php/intro.htm

1/5

6/11/2015

IntroduccinaPHP

2.3.InstalarPHPparawindows
Extraerladistribucinenundirectorio,porejemplo,c:\php
Copiarelficherophp.inidistaldirectoriodewindows,normalmenteserc:\windowsoc:\winntyrenombrardicho
ficheroaphp.ini
Editarelficherophp.ini
Cambiar'extension_dir'paraqueapunteenuestrodirectoriodondetenemoselphp,ennuestro
ejemploenc:\php
Poner'doc_root'paraqueapuntealdirectoriodelaspginasdenuestroservidor(apache).Por
defectoserC:\Archivosdeprograma\ApacheGroup\Apache\htdocs\
2.4.ConfigurarApacheparaquefuncioneconPHP
EnmodoCGI(menosrpido,estable):
Sitenemoselphpenc:\php,modificarelficherodeconfiguracindelApache(httpd.conf)
aadundolelassiguienteslneas:
ScriptAlias/php/"c:/php/"
AddTypeapplication/xhttpdphp.php
Actionapplication/xhttpdphp"/php/php.exe"
Estaslneasdebenaadirseensusapartadoscorrespondientes,esdecir,dondeveamosAddType
....leaadimos"AddTypeapplication....".Yasconlasotrastreslneas.
ReiniciarelservidorApache,porejemplo,
NETSTOPAPACHE
NETSTARTAPACHE
EnmodoMdulo(msrapido,menosestableenwindows):
Moverelficherophp4ts.dllaldirectoriowindows/system(ParaWindows9x/Me)oaldirectorio
windows/system32owinnt/system32(enwindowsNT/2000/XP)
Sitenemoselphpenc:\php,modificarelficherodeconfiguracindelApache(httpd.conf)
aadindolelassiguienteslneas:
LoadModulephp4_modulec:/php/sapi/php4apache.dll
AddTypeapplication/xhttpdphp.php
AddModulemod_php4.c

Estaslneasdebenaadirseensusapartadoscorrespondientes,esdecir,dondeveamos
LoadModule....leaadimos"LoadModulephp4_module....".Yasconlastreslneas.
ReiniciarApache,porejemplo,
NETSTOPAPACHE
NETSTARTAPACHE
ProbarelPHPcreandounficherollamdoinfo.phpconelsiguientecontenido:
Info.php:
<?phpPHPinfo()?>
dichoficheroseguardareneldirectoriohtdocsdelApche(normalmenteenC:\Archivosdeprograma\Apache
Group\Apache\htdocs\)
2.5.InstalarextensionesdewindowsparaPHP
DespusdeinstalarPHPyservidorwebenwindows,puedequesequierainstalaralgunasextensionesparaadir
funcionalidadesalPHP.LasextensionesquesequieranutilizarcuandoPPHarranqueseactivarndescomentandolas
lnesdeltipo'extension=php_*.dll'enelficherophp.ini.
ParaestoserequierenalgunasDLLsadicionales.HayquecopiarelconjuntodeDllsquehayeneldirectorio
php/dllsenwindows/system(Win9.x/Me),winnt/system32owindows/system32(estosdosltimosenWin
NT/2000/XP).Siyaexistendichosficheros,sedebensobreescribir,aunqueesaconsejablehacerunacopiadeseguridad
porsilascosasnofuncionacomodebieran.
AlgunasDLLsnecesitanextensionesdeotros,porejemplo,php_oci8.dllnecesitalaslibrerasdelclientedeOracle
8parapoderinstalarse,lascualesnovienenconladistribucindePHP.
LasDLLsparalasextensionesdePHPllevanelprefijo'php_'.Asiseprevienelaconfusinentreextensionesde
PHPylibrerasparaPHP.
http://flanagan.ugr.es/php/intro.htm

2/5

6/11/2015

IntroduccinaPHP

Nota:ApartirdePHP4.0.5elsoporteparaMySQL,ODBC,FTP,Calendar,BCMath,COM,PCRE,Session,WDDXy
XMLestdentrodePHP.Nosenecesitaaadirningunafuncionalidadextraparausarestasfunciones
EjemplosdeextensionesdePHP
php_dbase.dlldBasefunctions
php_filepro.dllReadonlyaccesstoFileprodatabases
php_gd.dllGDlibraryfunctionsforGIFmanipulation
php_hyperwave.dllHyperWavefunctions
php_imap.dllIMAPfunctions
php_ldap.dllLDAPfunctions
php_mssql.dllMSSQLclient(requiresMSSQLDBLibraries)
php_snmp.dllSNMPgetandwalkfunctions(NTonly!)
php_zlib.dllZLibcompressionfunctions

Paramsdocumentacinbuscarlaseccindeextensionesdewindows(Windowsextensions)en
http://www.php.net/manual/en/install.windows.php#install.windows.extensions

3.InstalacindePHPenLinux
3.1.InstalarApache1.3.x
UnaveztengamoselcdigofuentedelaltimaversindelApachede http://www.apache.org.Lodescomprimimos,
porejemploen/tmp.Siesun.tgz(tar.gz)sedescomprimecon:
tarxvfzapache_1.3.XX.tar.gz
Nosmetemoseneldirectorioquesehacreado
cdapache_1.3.XX
ConfiguramoslacompilacindelapacheparaqueseintaleeneldirectorioPREFIX(PREFIXesundirectorioynola
cadenaPREFIX),porejemplo,/usr/local/apacheo$HOME/apache.Ycon enableshared=maxpermitimosquese
puedanaadirmduloscomoelPHP.
./configureprefix=PREFIXenableshared=max
CompilamoselcdigofuentedelApache
make
InstalamoselApachecompiladoeneldirectorioquelehemosindicadoalconfigurarlacompilacin
makeinstall
Paraarrancar/pararelapache:
PREFIX/bin/apachectlstart
PREFIX/bin/apachectlstop
DondePREFIXeseldirectoriodondehemosinstaladoelApache
3.2.InstalarMySQL
LomsrpidoesbajarseunaversincompiladadeMySQLde http://www.mysql.com.Porejemplo,nosbajamos
unficherobinariodelestilomysqlXXX.tar.gzLodescomprimimoscon:
tarxvfzmysqlXXX.tar.gz
Renombramoseldirectorioynosmetemosendichodirectorio
mvmysqlXXXmysql
cdmysql
Ejecutamoselficherodeconfiguracin
./configure
ParacambiarelpassworddeadministradordeMySQLsehacecon
./bin/mysqladminurootppassword'newpassword'
(Laprimeravez,cuandopreguntaporelpasswordanterior,sedebepulsarreturn)
ParaarrancarelMySQL:
./bin/safe_mysqld&
http://flanagan.ugr.es/php/intro.htm

3/5

6/11/2015

IntroduccinaPHP

ParaprobarsielMySQLestfuncionandosehacecon:
./bin/mysqladminversion
Paracrearunabasededatosseejecuta./bin/mysqladminuusuariopcreatenombre_BDdonde usuario
eselusuariodelabasededatos(normalmenteroot).Paraeliminarlaseejecuta ./bin/mysqladminuusuariop
dropnombre_BD.
ParapararMySQL:./bin/mysqladminuusuariopshutdown.
ParatrabajarconlasbasesdedatosenMySQLseejecuta ./bin/mysql.exeuusuariopqueesuninterprete
decomandosqueaceptasenteciasSQL.ParaCambiardebasededatosseusa usenombre_BD.Paraverlastablas
showtablesyparaverelformatodeunatablaenparticular,seusardescnombre_tabla.
3.3.InstalarPHPparaLinux
NosbajamoselcdigofuentedelaltimaversindelPHPde http://www.php.net.Lodescomprimimos,porejemplo
en/tmp.Siesun.tgz(tar.gz)sedescomprimecon:
tarxvfzphp4.X.X.tar.gz
Nosmetemoseneldirectorioquesehacreado
cdphp4.X.X
ConfiguramoslacompilacindelPHPparaqueseintaleeneldirectorioPREFIX,porejemplo,/usr/local/phpo
$HOME/php.AdemsleindicamosconDIR_APACHE,dondeestinstaladoelApache,paraquecompileelsoporte
paraApache.

./configurewithapxs=DIR_APACHE/bin/apxswithconfigfilepath=DIR_APACHEprefix=PREFIXexecp
SiqueremossaberlasopcionesdecompilacindelPHP,bastaejecutar./configurehelp
CompilamoselcdigofuentedelPHP
make
InstalamoselPHPcompiladoeneldirectorioquelehemosindicadoalconfigurarlacompilacin
makeinstall
3.4.ConfigurarApacheparaquefuncioneconPHP
Aligualqueenwindows,podemosconfigurarelPHPparaqueseejecutecomounmdulodeApacheopodemos
instalarlocomounCGI.AquisloconsideraremoslaopcindequeseaunmdulodeApache.YaquecomoCGIesms
lento.
TenemosquemodificarelficherodeconfiguracindelApache(PREFIX_APACHE/conf/httpd.conf)aadindolela
siguientelnea:
AddTypeapplication/xhttpdphp.php
Estalneadebeaadirseensuapartadocorrespondiente,esdecir,dondeveamosAddType....leaadimos"
AddTypeapplication/xhttpdphp.php".
ReiniciarelApache:
apachectlstart
apachectlstop
ProbarelPHPcreandounficherollamdoinfo.phpconelsiguientecontenido:
Info.php:
<?phpPHPinfo()?>
dichoficheroseguardareneldirectoriohtdocsdelApache(normalmenteenPREFIX_APACHE/htdocs)

4.Ejercicios
Ejercicio:AprendeainstalarPHP+Apache+MySQLentusistemaoperativofavorito(windowsoLinux,losientosi
eresdelosMac).Vaasernecesarioparaelrestodelosapartadosdeltutorial.YparaprogramarconPHPencasa.
http://flanagan.ugr.es/php/intro.htm

4/5

6/11/2015

IntroduccinaPHP

Ejercicio:SinohasconseguidoinstalarelPHP+Apache+MySQLentusistemaopeerativofavorito.Puedesprobar
ainstalarloenLinux,paraelloejecuta:
BAJARelficherohttp://flanagan.ugr.es/php/util/instalaPHP2.tgzen/tmp
cd/tmp
tarxvfzinstalaPHP.tgz
rm/tmp/instalaPHP.tgz
/tmp/instala.pl

Ejecutaelnetscapeconladireccinhttp://localhost:8080/info.php

http://flanagan.ugr.es/php/intro.htm

5/5

6/11/2015

ConceptosBsicosdePHP

ConceptosBsicosdePHP
Autor:F.JavierGarcaCastellano
Web: http://decsai.ugr.es/~fjgc,Mail:fjgc@decsai.ugr.es

(C)GeNeuraTeam
Web: http://geneura.ugr.es,Mail:todos@geneura.ugr.es

1.InsercindePHPenHTML
ELPHPvadentrodentrodelapginaHTML(opginaPHP,segnsevea)ypara
insertarlodentrodeutilizan,entreotrascosas,lasinstruccionesdeprocesado(<?...?>).
<?....?>Slosiseactivalafuncinshort_tags()olabanderade
configuracinshort_open_tag.
<?php....?>
<scriptlanguaje="php">....</script>
<%....%>Slosiseactivanlostagsparaficheros 'asp'conlabanderade
configuracinasp_tags.
EjemplosdePHPenHTML:
<html>
<head><title>Ejemplo1</title></head>
<body>
<h1>EjemplodePHP</h1>
<?echo("estaeslamssimple,unainstruccindeprocesadoSGML\n")?>
<br>

<?phpprint"siquiereservirdocumentosXML,sepuedehaceresto\n"?>
<br>
<scriptlanguage="php">
printf("aalgunoseditorescomoFrontPagenoles
gustanlasintruccionesdeprocesado")
</script>
<br>
<%echo("PuedestambinusaretiquetastipoASP")%>
<br>
<br>
</body>
</html>
Enelejemploanteriorsepuedeobservarque echo,printfy printsirvenparalo
mismoparaescribirenlapginaHTMLquegeneraPHPcomoresultado.

2.Separacindeinstrucciones
Lasinstruccionesseseparancon '',enelcasodeserlaltimainstruccinnoes
necesarioelpuntoycoma.

3.Comentarios
LoscomentariosenPHPpuedenser:
http://flanagan.ugr.es/php/basico.htm

1/18

6/11/2015

ConceptosBsicosdePHP

ComoenCoC++,/*...*///
Otrotipodecomentariodeunalneaes#,quecomentarlalneaenlaqueaparezca
peroslohastaeltag ?>quecierraelcdigophp.

4.TiposdeDatos
LostiposdecadavariableenPHPnoestntanclaroscomoenC.Elintrpreteasigna
eltipodeunavariablesegnelusoqueseesthaciendodeella.Paraasignaruntipofijoa
unavariableseutilizalafuncin settype().Lostiposson:
Enteros
Flotantes
String
Arrays
Objetos
Variablesvariables
Respectoaltipoenteroyflotante,nohaymuchoquedecir,asquedetallaremosslo
lostiposString,ArraysyObjetos.
EjemplosdeTiposdedatossimplesdePHP:
<html>
<head><title>Ejemplo2</title></head>
<body>
<h1>EjemplodePHP</h1>
<?php
#Enteros
$a=1234#nmerodecimal
$a=123#unnmeronegativo
$a=0123#nmerooctal(equivalenteal83decimal)
$a=0x12/*nmerohexadecimal(equivalenteal18decimal)*/
//Flotantesoreales
$b=1.234$b=1.2e3
//Escribimosalgo
print"\nLaa=$aylab=$b<br>\n"
?>
</body>
</html>
Enelejemploanteriorpuedeversequesehanusadodistintostiposdecomentarios
4.1.String
Lascadenaspuedenestardelimitadaspor "o'.Silacadenaestdelimitadapor
comillasdobles,cualquiervariableincluidadentrodeellasersustituidaporsuvalor(very
ejecutarelejemploanterior).Paraespecificarelcarcter"seescaparconelcarcter
backslash(\)Otraformadedelimitarunacadenaesutilizandolasintaxisdedocumentos
incrustado"<<<"Ejemplo:
$variable=<<<EOD
Ejemplodecadena
queocupa
variaslneas
EOD
http://flanagan.ugr.es/php/basico.htm

2/18

6/11/2015

ConceptosBsicosdePHP

Lamarcadefinaldeundocuementoincrustado(enestecasoEOD)debeestarenla
primeracolumandeldocumento.
LasoperacionesconcadenassonexactamenteigualqueenPERL.Porejemplo,con
strlenseveeltamaodeunacadenayconelpunto(. )seconcatenancadenas.
Operacionesconcadenas
<html>
<head><title>Ejemplo3</title></head>
<body>
<h1>EjemplodePHP</h1>
<?php
/*Asignandounacadena.*/
$str="Estoesunacadena"
/*Aadiendoalacadena.*/
$str=$str."conalgomsdetexto"
/*Otraformadeaadir,incluyeuncarcterdenuevalnea*/
$str.="Yuncarcterdenuevalneaalfinal.\n"
print"$str<br>\n"
/*Estacadenaterminarsiendo'<p>Nmero:9</p>'*/
$num=9
$str="<p>Nmero:$num</p>"
print"$str<br>\n"
/*Estaser'<p>Nmero:$num</p>'*/
$num=9
$str='<p>Nmero:$num</p>'
print"$str<br>\n"
/*Obtenerelprimercarcterdeunacadenacomounavector*/
$str='Estoesunaprueba.'
$first=$str[0]
print"$str0>$first<br>\n"
/*Obtenerelltimocarcterdeunacadena.*/
$str='Estoesanunaprueba.'
$last=$str[strlen($str)1]
print"$strlast>$last<br>\n"
?>
</body>
</html>
Parahacerconversindecadenasaotrostiposdedatoshayquetenerencuentauna
cadenaseevalacomounvalornumrico,elvalorresultanteyeltiposedeterminancomo
sigue.Lacadenaseevaluarcomoundoblesicontienecualquieradeloscaracteres'.','e',
o'E'.Encasocontrario,seevaluarcomounentero.Elvalorvienedadoporlaporcin
inicialdelacadena.Silacadenacomienzacondatosdevalornumrico,esteserelvalor
usado.Encasocontrario,elvalorser0(cero).Cuandolaprimeraexpresinesuna
cadena,eltipodelavariabledependerdelasegundaexpresin.
Ejemplosdetiposdedatos
<html>
<head><title>Ejemplo4</title></head>
http://flanagan.ugr.es/php/basico.htm

3/18

6/11/2015

ConceptosBsicosdePHP

<body>
<h1>EjemplodePHP</h1>
<?php
$foo=1+"10.5"//$fooesdoble(11.5)
print"$foo<br>\n"
$foo=1+"1.3e3"//$fooesdoble(1299)
print"$foo<br>\n"
$foo=1+"bob1.3e3"//$fooesentero(1)
print"$foo<br>\n"
$foo=1+"bob3"//$fooesentero(1)
print"$foo<br>\n"
$foo=1+"10Cerditos"//$fooesentero(11)
print"$foo<br>\n"
$foo=1+"10Cerditos"//$fooesentero(11)
print"$foo<br>\n"
$foo="10.0cerdos"+1//$fooesentero(11)
print"$foo<br>\n"
$foo="10.0cerdos"+1.0//$fooesdoble(11)
print"$foo<br>\n"
?>
</body>
</html>
4.2.Arrays
LosArraysenPHPsepuedenutlizartantocomoArraysindexados(vectores)ocomo
Arraysasociativos(tablashash).ParaPHP,noexistenningunadiferenciaarraysindexados
unidimensionalesyarraysasociativos.LasfuncionesqueseutilizanparacrearArraysson
list() oarray() ,osepuedeasignarelvalordecadaelementodelarraydemanera
explcita.Enelcasodequenoseespecifiqueelndiceenunarray,elelementoquese
asignaseaadealfinal.
EjemplosdeArrays
<html>
<head><title>Ejemplo5</title></head>
<body>
<h1>EjemplodePHP</h1>
<?php
#formaexplicita
$a[0]="abc"
$a[1]="def"
$b["foo"]=13
#Aadiendovaloresalarray
$a[]="hola"//$a[2]=="hola"
$a[]="mundo"//$a[3]=="mundo"
#mostramoslosresultados
print"a=$a[0],$a[1],$a[2],$a[3]<br>\n"
print"b[foo]=".$b["foo"]."<br>\n"
?>

http://flanagan.ugr.es/php/basico.htm

4/18

6/11/2015

ConceptosBsicosdePHP

</body>
</html>
Losarrayssepuedenordenarusandolasfuncionesasort(),arsort(),ksort(),rsort(),
sort(),uasort(),usort(),yuksort()dependiendodeltipodeordenacinquesedesee.
Sepuedecontarelnmerodeelementosdeunarrayusandolafuncin count().
Sepuederecorrerunarrayusandolasfuncionesnext()y prev().Otraformahabitual
derecorrerunarrayesusandolafuncineach().
Losarraysmultidimensionalessonbastantesimples,paracadadimensinarray,se
puedeaadirotrovalor[clave]alfinal.Losindicesdeunarraymultidimensionalpueden
sertantonumricoscomoasociativos.
Arraysmultidimensionales
$a[1]=$f#ejemplosdeunasoladimensin
$a["foo"]=$f
$a[1][0]=$f#bidimensional
$a["foo"][2]=$f#(sepuedenmezclarndicesnumricosyasociativos)
$a[3]["bar"]=$f#(sepuedenmezclarndicesnumricosyasociativos)
$a["foo"][4]["bar"][0]=$f#tetradimensional!
Losarrayssepuederellenartambinusando=>
#Ejemplo1:
$a["color"]="rojo"
$a["sabor"]="dulce"
$a["forma"]="redondeada"
$a["nombre"]="manzana"
$a[3]=4
#Ejemplo2:
$a=array(
"color"=>"rojo",
"sabor"=>"dulce",
"forma"=>"redondeada",
"nombre"=>"manzana",
3=>4
)
4.3.Objetos
Parainicializarunobjetoseutilizaelmtodonew,yparaaccederacadaunodesus
mtodosseutilizaeloperador > .
classnada{
functionhaz_nada(){
echo"Noestoyhaciendonada."
}
}
$miclase=newnada
$miclase>haz_nada()
PosteriormenteveremoscomotrabajarconobjetosenPHPconmsprofundidad.
http://flanagan.ugr.es/php/basico.htm

5/18

6/11/2015

ConceptosBsicosdePHP

4.4.ConversindeTiposdedatos
UnavariableenPHP,definesutiposegnelcontenidoyelcontextoenelquese
utilice,esdecir,siseasignaunacadenaaunavariable,eltipodeesavariableserstring .
Siaesamismavariableseelasignaunnmero,eltipocambiara entero .
Paraasegurartedequeunavariableesdeltipoadecuadoseutilizalafuncin
settype() .Paraobtenereltipodeunavariableseutilizalafuncin gettype() .
Tambinesposibleutilizarelmecanismodel castingtalycomoseutilizaenC.
EjemplosdeCastings
<html>
<head><title>Ejemplo6</title></head>
<body>
<h1>EjemplodePHP</h1>
<?php
$foo=10//$fooesunentero
$bar=(double)$foo//$baresundoble
#Mostramosresultados
print"bar=$bar,foo=$foo<br>\n"
?>
</body>
</html>
Lostiposdecastingpermitidosson:
(int),(integer)fuerzaaentero(integer)
(real),(double),(float)fuerzaadoble(double)
(string)fuerzaacadena(string)
(array)fuerzaaarray(array)
(object)fuerzaaobjeto(object)

5.Variables
EnPHPlasvariablesserepresentancomounsignodedlarseguidoporelnombrede
lavariable.Elnombredelavariableessensibleaminsculasymaysculas.Lasvariables
seasignannormalmenteporvalor,perodesdePHP4,tambinseasignanporreferencia
usandoelsmbolo&
Variablesporvaloryreferencia
<html>
<head><title>Ejemplo7</title></head>
<body>
<h1>EjemplodePHP</h1>
<?php
$foo='Bob'//Asignaelvalor'Bob'a$foo
$bar=&$foo//Referencia$foova$bar.
$bar="Minombrees$bar"//Modifica$bar...
echo$foo."<br>\n"//$footambinsemodifica.
echo$bar."<br>\n"
http://flanagan.ugr.es/php/basico.htm

6/18

6/11/2015

ConceptosBsicosdePHP

?>
</body>
</html>
Algoimportanteatenerencuentaesqueslolasvariablesconnombrepuedenser
asignadasporreferencia.
5.2.Variablespredefinidas
EnPHPcadavezqueseejecutaunscript,existenvariablesquesecreanyquenos
puedeninformardelentornoenelqueseestejecutandodichoscript.
Paraobtenerunalistadetodasestasvariablespredefinidassepuedeutilizarla
funcionPHPinfo().
Detodasestasvariables,algunassecreandependiendodelservidorqueseest
utilizandoyotrassonpropiasdePHP.
SisetrataradeunservidorApache,lalistadevariableses:
GATEWAY_INTERFACE:
SERVER_NAME
SERVER_SOFTWARE
SERVER_PROTOCOL
REQUEST_METHOD
QUERY_STRING
DOCUMENT_ROOT
HTTP_ACCEPT
HTTP_ACCEPT_CHARSET
HTTP_ENCODING
HTTP_ACCEPT_LANGUAJE
HTTP_CONNECTION
HTTP_HOST
HTTP_REFERER
HTTP_USER_AGENT
REMOTE_ADDR
REMOTE_PORT
SCRIPT_FILENAME
SERVER_ADMIN
SERVER_PORT
SERVER_SIGNATURE
PATH_TANSLATED
SCRIPT_NAME
REQUEST_URL
lasvariablescreadasporelpropioPHPson:
argv
argc
PHP_SELF
HTTP_COOKIE_VARS
HTTP_GET_VARS
HTTP_POST_VARS
Nota:Estalistanoesexhaustivanipretendeserlo.Simplementeesunaguadequ
tipodevariablespredefinidassepuedeesperartenerdisponiblesenunscriptPHP.
5.3.mbitodeunaVarible
http://flanagan.ugr.es/php/basico.htm

7/18

6/11/2015

ConceptosBsicosdePHP

ElmbitodeunavariableenPHPesexactamenteigualqueenCoenPerltomando
siempreencuentalosficherosincluidosalprincipiodecadaprograma.
Lanicadiferenciaseencuentraenlasvariablesglobales,quetienenqueser
expresamentedefinidasdentrodelasfunciones.
Variablesglobales
<html>
<head><title>Ejemplo8</title></head>
<body>
<h1>EjemplodePHP</h1>
<?php
$a=1
$b=2
FunctionSum(){
global$a,$b
$b=$a+$b
}
Sum()
echo$b
?>
</body>
</html>
5.4.Variblesvariables
PHPpermiteunmecanismoparamantenervariablesconunnombrenofijo.
Porejemplo:
$a="hola"
$$a="mundo"
Elejemploanterior,definedosvariables,unadenominada$aquecontieneelvalor
"hola"yotraquesellama$holaquecontieneelvalor"mundo"
Paraaccederalvalordeunavariable,seaccedecon:
echo"$a${$a}"
Lasentenciaanteriorprovocarlasalida"holamundo".
Algoquesedebetenerencuentacuandoseutilizanvariables,esquehayque
resolverlaambiguedadquesecreaalutilizararraysdevariablesdeestetipo.Porejemplo
$$a[1]provocaunaambiguedadparaelintrprete,puestoquenosabesisedeseautilizar
lavariabledenominada$a[1]outilizarlavariables$aindexndolaensuprimervalor.Para
estoseutilizaunasintaxisespecialquesera${$a[1]} o${$a}[1] segnsedeseeuna
opcinuotra.
5.5.VariablesdelosformulariosHTML
CuandoexisteunformularioenHTML,inmediatamentedespusdeserenviado,
http://flanagan.ugr.es/php/basico.htm

8/18

6/11/2015

ConceptosBsicosdePHP

dentrodelmbitoPHPsecreanautomticamenteunavariableporcadaunodelosobjetos
quecontieneelformulario.
Porejemplo,consideremoselsiguienteformulario:
Formulariosimple
<html>
<head><title>Ejemplo9</title></head>
<body>
<h1>EjemplodeFormulario1</h1>
<p>
Dametunombre!!!
<formaction="ej10.php"method="post">
Nombre:<inputtype="text"name="nombre">
<inputtype="submit">
</form>
</body>
</html>
Cuandoesenviado,PHPcrearlavariable$nombre,quecontendrloqueseaquese
introdujoenelcampoNombre::delformulario.
ProcesadodeFormulariosiple
<html>
<head><title>Ejemplo10</title></head>
<body>
<h1>EjemplodePHP</h1>
<?php
print"<h2>Hola$nombre</h2>\n"
?>
</body>
</html>
PHPtambinmanejaarraysenelcontextodevariablesdeformularios,perosloen
unadimensin.Sepuede,porejemplo,agruparjuntasvariablesrelacionadas,ousaresta
caractersticapararecuperarvaloresdeuncamposelectinputmltiple:
Formulariocomplejos
<html>
<head><title>Ejemplo11</title></head>
<body>
<h1>EjemplodeFormulario2</h1>
<formaction="ej12.php"method="post">
Nombre:<inputtype="text"name="personal[name]">
Email:<inputtype="text"name="personal[email]">
Cerveza:<br>
<selectmultiplename="beer[]">
http://flanagan.ugr.es/php/basico.htm

9/18

6/11/2015

ConceptosBsicosdePHP

<optionvalue="warthog">Warthog
<optionvalue="guinness">Guinness
<optionvalue="stuttgarter">StuttgarterSchwabenbru
</select>
<inputtype="submit">
</form>
</body>
</html>
Variablesdeformularioscomplejos
<html>
<head><title>Ejemplo12</title></head>
<body>
<h1>EjemplodePHP</h1>
<?php
print"<h2>Hola$personal[name],"
print"tuemailes$personal[email]y"
print"tegustalacerveza$beer[0]</h2>\n"
?>
</body>
</html>
SilaposibilidaddePHPdetrack_varsestactivada(sehaceenlaconfigurtacin
previaalacompilacin),lasvariablesenviadasconlosmtodosPOSToGETtambinse
encontrarnenlosarraysasociativosglobales $HTTP_POST_VARSy $HTTP_GET_VARS.
5.6.CookiesHTML
Lascookiessonunmecanismoparaalmacenardatosenelnavegadoryasrastrearo
identificarausuariosquevuelven.
Lafuncin SetCookie()esunafuncinPHPparaasignarCookiesaunordenador
cliente.Estafuncinsedebellamarsiempreantesdecomenzaracrearlapginapuesto
quedebeformarpartedelacabeceradeHTML.
CualquierCookiequeseenvaauncliente,seconviertedentrodePHPenuna
variable.
EjemplosdecookiesconPHP
<?php
$cuenta++
SetCookie("cuenta",$cuenta,time()+3600)
SetCookie("visita[$cuenta]","Visitanmero$cuenta",time()+3600)
?>
<html>
<head><title>Ejemplo13</title></head>
<body>
<h1>EjemplodePHP</h1>
<?php
print"cuenta:$cuenta<br>\n"
print"NmerodeVisitas:".count($visita)."<br>\n"
http://flanagan.ugr.es/php/basico.htm

10/18

6/11/2015

ConceptosBsicosdePHP

for($i=0$i<count($visita)$i++)
{
print"Visita$i:".$visita[$i]."<br>\n"
}
?>
</body>
</html>
EsteejemplomantienedosCookiesenelcliente.Laprimeramantieneelcontador
cuentaylasegundacontieneunalistadeloscomentariosdecadaunadelasvecesquese
haactualizadolacookie,visita.
Msadelanteveremosconmsprofundidadelusodelascookies.
5.7.Variablesdeentorno
Lasvariablesdeentorno,talescomo$HOME,paraentornosLinux,sepuedenutilizar
desdePHP.
Paraasegurarnospodemosusarlafuncin getenv()
Tambinsepuedeasignarunvaloraunavariabledeentornoconlafuncin putenv()

6.Constantes
LasconstantesenPHPtienenqueserdefinidasporlafuncindefine()yademsno
puedenserredefinidasconotrovalor.
Adems,existenunaseriedevariablespredefinidasdenominadas:
_FILE_:Ficheroqueseestprocesando.
_LINE_:Lneadelficheroqueseestprocesando
_PHP_VERSION:VersindePHP.
PHP_OS:Sistemaoperativodelcliente.
TRUE:Verdadero.
FALSE:Falso.
E_ERROR:Errorsinrecuperacin.
E_WARNING:Errorrecuperable.
E_PARSE:Errornorecuperable(sintaxis).
E_NOTICE:PuedeTratarsedeunerrorono.Normalmentepermitecontinuarla
ejecucin.
Ejemplo:
Todaslasconstantesqueempiezanpor"E_"seutilizannormalmenteconlafuncin
error_reporting().
Ejemplosdeconstantes
<html>
<head><title>Ejemplo14</title></head>
<body>
<h1>EjemplodePHP</h1>
<?php
define("CONSTANTE","helloworld.")
echoCONSTANTE
http://flanagan.ugr.es/php/basico.htm

11/18

6/11/2015

ConceptosBsicosdePHP

?>
</body>
</html>

7.Expresionesyoperadores
EnPHPunaexpresinescualquiercosaquepuedacontenerunvalor.Lasexpresiones
mssimplessonlasvariablesylasconstantesyotrasmscomplicadassernlas
funciones,puestoquecadafuncindevuelveunvaloralserinvocada,esdecir,contieneun
valor,porlotanto,esunaexpresin.
TodaslasexpresionesenPHPsonexactamenteigualqueenC.Losoperadores
abreviados,losincrementos,etc,sonexactamenteiguales.Inclusoexistenotros
operadoresadicionalescomoeloperador"."queconcatenavaloresdevariables,oel
operador"==="denominadooperadordeidentidadquedevolververdaderosilas
expresionesaambosladosdeloperadorcontienenelmismovaloryalavezsondelmismo
tipo.Porltimo,eloperador"@"sirveparaelcontroldeerrores.Parapodervercomo
funcionaeloperador@,veamosunejemplo:
<?php
$res=@mysql_query("selectnombrefromclientes")
ordie("Errorenlaseleccin,'$php_errormsg'")
?>
Esteejemplo,utilizaeloperador@enlallamadaamysql_queryyenelcasodedar
unerror,sesalvarelmensajedevueltoenunavariabledenominadaphp_errormsg.Esta
variablecontendraelmensajedeerrordecadasentenciaysiocurreotroerrorposterior,
semachacaelvalorconlanuevacadena.
PHPmantienetambinlosoperadores"'"quesirvenparaejecutaruncomandodel
sistematalycomohacelafuncin system().
EnPHPexistendosoperadoresandydosoperadoresorqueson:'and','&&'y'or','||'
respectivamente,quesediferencianenlaprecedenciadecadauno.
Latablaquenospuederesumirlaprecedenciadecadaunodelosoperadoreses:
Asocitividad

Operadores

Izquierda

Izquierda

or

Izquierda

xor

Izquierda

and

Derecha

print

Izquierda

=+=**=/=.=%=&=|=^=~=<<=>>=

Izquierda

?:

Izquierda

||

Izquierda

&&

Izquierda

Izquierda

Izquierda

&

Noposee

==!====

Noposee

<<=>>=

Izquierda

>><<

http://flanagan.ugr.es/php/basico.htm

12/18

6/11/2015

ConceptosBsicosdePHP

Izquierda

+.

Izquierda

*/%

Derecha

!~++(int)(double)(string)(array)(object)

Derecha

Noposee

new

Ejemplosdeexpresiones
<html>
<head><title>Ejemplo15</title></head>
<body>
<h1>EjemplodePHP</h1>
<?php
functiondouble($i){
return$i*2
}
$b=$a=5/*asignarelvalorcincoalasvariables$ay$b*/
$c=$a++/*postincremento,asignarelvalororiginalde$a(5)a$c*/
$e=$d=++$b/*preincremento,asignarelvalorincrementadode$b(6)a
$dya$e*/
/*enestepunto,tanto$dcomo$esonigualesa6*/
$f=double($d++)/*asignareldobledelvalorde$dantes
delincremento,2*6=12a$f*/
$g=double(++$e)/*asignareldobledelvalorde$edespus
delincremento,2*7=14a$g*/
$h=$g+=10/*primero,$gesincrementadoen10yterminavaliendo24.
despuselvalordelaasignacin(24)seasignaa$h,
y$htambinacabavaliendo24.*/
#Operadordeejecucin
$output=`lsal`
echo"<pre>$output</pre><br>"
echo"<h3>Postincremento</h3>"
$a=5
echo"Deberaser5:".$a++."<br>\n"
echo"Deberaser6:".$a."<br>\n"
echo"<h3>Preincremento</h3>"
$a=5
echo"Deberaser6:".++$a."<br>\n"
echo"Deberaser6:".$a."<br>\n"
echo"<h3>Postdecremento</h3>"
$a=5
echo"Deberaser5:".$a."<br>\n"
echo"Deberaser4:".$a."<br>\n"
echo"<h3>Predecremento</h3>"
$a=5
echo"Deberaser4:".$a."<br>\n"
echo"Deberaser4:".$a."<br>\n"
http://flanagan.ugr.es/php/basico.htm

13/18

6/11/2015

ConceptosBsicosdePHP

?>
</body>
</html>

8.EstructurasdeControl
Ademsdelasintaxisnormal(parecidaalPerloalC),PHPofreceunasintaxis
altenativaparaalgunadesusestructurasdecontrolasaber,if,while,for,yswitch.En
cadacaso,laformabsicadelasintaxisalternativaescambiarabrirllavepordospuntos
(:)ycerrarllaveporendif,endwhile,endfor,orendswitch,respectivamente.
Ejemplodesintaxisalternativaparaelif
<html>
<head><title>Ejemplo16</title></head>
<body>
<h1>EjemplodePHP</h1>
<?php
$a=8
$b=6
#Primerif
if($a>$b){
print"aesmayorqueb<br>"
$b=$a
}
#ifalternativo
if($a>$b):
print"AesmayorqueB<br>"
endif
#Segundoif(conelseyelseif)
if($a>$b){
print"aesmayorqueb<br>"
}elseif($a==$b){
print"aesigualqueb<br>"
}else{
print"besmayorquea<br>"
}
#Segundoifalternativo
if($a>$b):
print"AesmayorqueB<br>"
print"..."
elseif($a==$b):
print"AesigualaB<br>"
print"!!!"
else:
print"BesmayorqueA<br>"
endif
?>
</body>
</html>

http://flanagan.ugr.es/php/basico.htm

14/18

6/11/2015

ConceptosBsicosdePHP

LamejorformaderesumircadaunadelasopcionesqueofrecePHPparalasestructurasdecontrolesmedianteunatabla:
Estructura

Alternativa

If,ifelse,ifelseif

if:endif

while

while:endwhile

for

for:endfor

do..while

foreach(arrayas$value)
foreach(arrayas$key=>$value)

switch

switch:endswitch

continue

break

require()(Necesitanestardentrodetags
PHP)

include()(Necesitanestardentrodetags
PHP)

Lasentencia require()sesustituyeasmismaconelarchivoespecificado,talycomo
funcionaladirectiva#includedeC.Lasentenciainclude()incluyeyevalaelarchivo
especificado.
Adiferenciadeinclude(),require()siempreleerelarchivoreferenciado,inclusosi
lalneaenqueestnoseejecutanunca.Sisequiereincluircondicionalmenteunarchivo,
seusa include().Lasentenciaconditionalnoafectaa require().Noobstante,silalnea
enlacualapareceelrequire()noseejecuta,tampocoseejecutarelcdigodelarchivo
referenciado.
Deformasimilar,lasestructurasdebuclenoafectanlaconductade require()..
Aunqueelcdigocontenidoenelarchivoreferenciadoesttodavasujetoalbucle,el
propio require()sloocurreunavez.Estosignificaquenosepuedeponerunasentencia
require()dentrodeunaestructuradebucleyesperarqueincluyaelcontenidodeun
archivodistintoencadaiteracin.Parahaceresto,usaunasentencia include().As,
require,reemplazasullamadaporelcontenidodelficheroquerequiere,einclude,incluyey
evaluaelficheroespecificado.
Ejemplodeinclude1
<?php
print"HolaCaracola<br>\n"
?>
Ejemplodeinclude2
<html>
<head><title>Ejemplo18</title></head>
<body>
<h1>EjemplodePHP</h1>
<?php
include('ej17.php')
?>
</body>
</html>
http://flanagan.ugr.es/php/basico.htm

15/18

6/11/2015

ConceptosBsicosdePHP

9..Funciones
9.1.Funcionesdefinidasporelusuario
Unejemplopuedeser:
functionfoo($arg1,$arg2,...,$argN)
{
echo"Funcinejemplo"
return$value
}
Dentrodeunafuncinpuedeaparecercualquiercosa,inclusootrafuncino
definicionesdeclase.
Respectoalpasodeargumentos,sonsiemprepasadosporvaloryparapasarlospor
referenciahayqueindicarloysepuedehacerdedosformasdiferentes,enladefinicinde
lafuncin,anteponiendoelsmbolo&alargumentoquecorresponda,enestecasola
llamadaserigualquelallamadaaunafuncinnormal,omanteniendoladefinicindela
funcinnormalyanteponerun&delantedelargumentoquecorrespondaenlallamadaala
funcin.
Ejemplodeparmetrosdefunciones
<html>
<head><title>Ejemplo19</title></head>
<body>
<h1>EjemplodePHP</h1>
<?php
#Definimoslafuncinconparametrosporreferencia
functionsuma1(&$a,&$b)
{
$c=$a+$b
return$c
}
#Definimoslafuncinconparametrosporvalor
functionsuma2($a,$b)
{
$c=$a+$b
return$c
}
$a=2$b=3$suma
#Llamamoslafuncin1porreferencia(nopuedeserdeotraforma)
print$suma=suma1($a,$b)
#Llamamoslafuncin2porreferencia
print$suma=suma1(&$a,&$b)
#Llamamoslafuncin2porvalor
print$suma=suma1($a,$b)
?>
</body>
http://flanagan.ugr.es/php/basico.htm

16/18

6/11/2015

ConceptosBsicosdePHP

</html>
PHPpermiteelmecanismodeargumentospordefecto.Unejemplodeesta
caracteristicaes:
functionhacerCafe($tipo="capuchino")
{
return"hehechouncaf$tipo\n"
}
Enlallamadaaestafuncinseobtendrunafraseuotrasegnsellame:
echohacerCafe()
echohacerCafe("expreso")
Enelcasodetratarsedeunafuncinconargumentospordefectoyargumentos
normales,losargumentospordefectodebernestaragrupadosalfinaldelalistade
argumentos.
EnPHP4elnmerodeargumentosdeunafuncindefinidaporelusuario,puedeser
variable,seutilizanlasfuncionesfunc_num_args(),func_get_arg()y
func_get_args().
9.2Valoresdevueltos
AdiferenciadeC,PHPpuededevolvercualquiernmerodevalores,sloharfalta
recibirestosargumentosdelaformaadecuada.Ejemplo:
functionnumeros()
{
returnarray(0,1,2)
}
list($cero,$uno,$dos)=numeros()
9.3FuncionesVariables
PHPsoportaelconceptodefuncionesvariable,estosignificaquesiunavariabletiene
unosparntesisaadidosalfinal,PHPbuscarunafuncinconelmismonombrequela
evaluacindelavariable,eintentarejecutarla.
<?php
funtcionfoo()
{
echo"Enfoo()<br>\n"
}
functionbar($arg='')
{
echo"bar()Elargumentohasido'$arg'.<br>\n"
}
$func='foo'
$func()
$func='bar'
$func('test')
?>

10.Ejercicios
http://flanagan.ugr.es/php/basico.htm

17/18

6/11/2015

ConceptosBsicosdePHP

Ejercicio:RealizarunapginaPHPquegeneredosvectoresordenadosylosunaen
untercero.
Ejercicio:Escribirunafuncin mcdquecalculeelmximocommdivisordedos
nmerosylodevuelva.
Ejercicio:Hacerunformularioquepidalashorastrabajadasalda,elnmerode
das.DichoformulariodebeentregarlosdatosaunapginaPHPquecalcularelsalario
neto,apartirdelsalariobrutoylasretencionesfiscales(suponerun12%)
Ejercicio:RealizarunapginaPHPquegenere,escribaysumadosmatricesNxN.
Ejercicio:RealizarunapginaPHPqueilustreelusodelosdistintostiposdecasting
posible,mostrandolostiposdelasvariables
Ejercicio:Hacerunformularioquepidaelnombredelusuario.Dichoformulariodebe
entregardichonombreaunapginaPHPqueguardarelnombredelusuarioylasveces
quehavisitadoelscriptPHPconCookies.

http://flanagan.ugr.es/php/basico.htm

18/18

6/11/2015

ConceptosAvanzadosdellenguajePHP

ConceptosAvanzadosdellenguajePHP
Autor:F.JavierGarcaCastellano
Web: http://decsai.ugr.es/~fjgc,Mail:fjgc@decsai.ugr.es

(C)GeNeuraTeam
Web: http://geneura.ugr.es,Mail:todos@geneura.ugr.es

1.Clasesyobjetos
Unaclaseesunacoleccindevariablesydefuncionesqueaccedenaesasvariables.Unaclasese
defineconlasiguientesintaxis:Lasintaxisparadefinirunaclaseeslasiguiente:
<?php
classCarrito{
var$items//Artculosennuestrocarritodelacompra

//Aadir$numartculosdetipo$artnralcarro
functionadd_articulo($artnr,$num){
$this>items[$artnr]+=$num
}

//Sacar$numartculosdeltipo$artnrdelcarro
functionremove_articulo($artnr,$num){
if($this>items[$artnr]>$num){
$this>items[$artnr]=$num
returntrue
}else{
returnfalse
}
}
}
?>
ElejemplodefineunaclasellamadaCarritoqueconsisteenunarrayasociativodeartculosdeun
carritodelacompraydosfuncionesparaaadirysacartemsdelcarro.Lasclasessontipos,esdecir,son
plantillasparavariables.Coneloperador newcreaunainstanciadelaclaseCarrito.
$carro=newCarrito
$carro>add_articulo("PlanchaFilips202",1)
Enelanteriorejemplocreamosunobjeto carrodelaclasecarritoalaqueleaadimos1artculo.
Entrefuncionesdeunaclase,lavariable$thishacereferenciaalpropioobjeto.Tienesqueusar $this
>loqueseaparaaccederaunavariableofuncinllamada loqueseadelobjetoactual.
PHPsoportaherencia,lasclasesextendidasoderivadastienentodaslasvariablesyfuncionesdela
clasebaseyloquelesaadasalextenderladefinicin.Laherenciamltiplenoestsoportada.Laherencia
enPHPserealizaconextends.
Losconstructoresdecadaclasesellamanautomticamenteporeloperadornew.Elconstructorde
cadaclasedebetomarelmismonombredelaclaseycuandosetratadeunaclasederivada,hayquetener
cuidadoporqueslosellamaautomticamentealconstructordedichaclaseperonoalconstructordela
clasepadre.
classCarrito_con_amoextendsCarrito{
var$amo

functionfijar_amo($nombre){
$this>amo=$nombre
}
}
ElejemploanteriordefineunaclaseCarrito_con_amoquetienetodaslasvariablesyfuncionesde
Carrito,yademsaadelavariable$amoyunafuncinadicionalfijar_amo().Uncarroconamosecreade
laformahabitualy,unavezhecho,puedesaccederalpropietariodelcarro.Enloscarrosconnombre
tambinpuedesaccederalasfuncionesnormalesdelcarro:
http://flanagan.ugr.es/php/avanzado.htm

1/17

6/11/2015

ConceptosAvanzadosdellenguajePHP

$miCarro=newCarrito_con_amo//Creamosuncarrocondueo
$miCarro>fijar_amo("Richal")//Nombramoselcarro
print$miCarro>amo//Imprimimoselnombredelpropietario
$miCarro>add_articulo("MonitorSoniGD450",1)//FuncionalidadheredadadeCarrito
Losconstructorestambinpuedenrecibirparmetrosyestosparmetrospuedenseropcionales,lo
queloshacemstiles.
classOtro_CarritoextendsCarrito{
functionOtro_carrito($articulo="BoliBycAzul",$cantidad=1){
$this>add_articulo($articulo,$cantidad)
}
}

//Compramoslasmismascosasaburridasdesiempre
$default_cart=newOtro_Carrito

//Compramoslascosasinteresantes
$different_cart=newOtro_Carrito("AzlonXP3000+",17)

2.ManejodeErrores
EnPHPhaycuatrotiposdeerroresyavisos:
1ErroresNormalesdeFunciones(NormalFunctionError)
2AvisosNormales(NormalWarnings)
4Erroresdelanalicadordecdigo(ParseErrors)
8Avisosquesepuedenignorar(Notices)
Los4nmerosdelaizquierdasonsumadosparadefinirunniveldeavisodeerror.Elniveldeerror
pordefectoes7(1+2+4),peroestopuedesermodificadoentiempodeejecucinusandolafuncin
error_reporting().
CualquierexpresinenPHPsepuedellamarconla"@"alprincipioqueinvocaralafuncinde
manejodeerrores,yelerrorpodremosencontrarloenlavariable$php_errormsg.
ErrorenundocumentoPHP
<html>
<head><title>Ejemploerror</title></head>
<body>
<h1>EjemplodeerrorenPHP</h1>
<?php
error_reporting(0)
$a=5/0
print"<p>Lasiguientevariablenoexiste:$zx\n"
?>
</body>
</html>

3.CreacindeImgenes
PHPtieneunafuncionalidadmuypotente:lacreacindeimgenesalvuelo(aunquetambinpuede
generar,porejemplo,documentosPDF).Estopuedesertilparacreargrficaspartirdedatosygenerar
cualquiergrficodinmicamente.Paraesto,PHPutilizalalibreraGDdelaempresaBoutell.com,porloque
esnecesariotenerlainstaladaenelsistema(sepuedeversiestinstaladaviendoelresultadogeneradopor
phpinfo()).Apartirdelaversin1.6nosepuedetrabajarconimgenesGIF(porproblemadepatentes)y
desdela1.8sepuedetrabajarconjpeg.
Elejemplomssencilloesabrirunaimagenqueestenunficherodediscoymostrarlatalcual.
<?php
#EnlacabeceradecimosnoesHTMLloquedevolvemos,sinounaimagenjpeg
Header("Contenttype:image/jpeg")
#Creamoslaimagenapartirdeunfichero
$im=imagencreatefromjpeg("php.jpg")
#Lamostramos
http://flanagan.ugr.es/php/avanzado.htm

2/17

6/11/2015

ConceptosAvanzadosdellenguajePHP

ImageJPEG($im)
#Liberamoslamemoriaocupada
ImageDestroy($im)
?>
Sienelanteriorejemplocambiamosjpegpor pngnosservirparaleerimgenesenformatopng.
Conlafuncin imagecreatefromjpegcreamosunaimagenapartirdeunficherojpeg.Conimagejpeg
devolvemosalnavegadorunaimagenjpeg.
Enelsiguienteejemploserllamadodesdeunapginaconunalneacomoesta: <img
src="boton.php?texto=hola">Elsiguientescriptdearribatomalacadena"text"lasituasobrelaimagen
base,enestecasoes"images/button1.jpg"ymuestralaimagenresultante.Estaesunaformamuy
convenienteparaevitartenerquedibujarunnuevobotncadavezquequieracambiareltextodelmismo.
Conestemtodolosbotonessongeneradosdinmicamente.
Unejemplodeestacaractersticasemuestraenelsiguienteejemplo:
<?php
#Decimosqueesunaimagen
Header("Contenttype:image/jpeg")
#Creamoslaimagenapartirdeunfichero
$im=imagecreatefromjpeg("images/button1.jpg")
#Creamosuncolorblanco(seusanvaloresRGB)
$blanco=ImageColorAllocate($im,255,255,255)
#Tomamoselsitiopordondevamosaempezaraescribireltexto
$px=(imagesx($im)7.5*strlen($texto))/2
#Escribimoseltexto
ImageString($im,10,$px,9,$texto,$blanco)
#Creamoslaimagen
ImageJPEG($im)
#Liberamoslamemoriaocupada
ImageDestroy($im)
?>
Conestemtodopuedesgenerarlaimagenadecuadadinmicamente.Elparmetrotextonos
permitirponereltextoquedeseemosenlaimagenquevamosagenerar.

4.AutentificacindeunUsuarioconPHP
ElprotocoloHTTPproporcionaunmecanismodeautentificacindeclientes.Lomscomnesquese
presenteunacajitacondoscampos:unoparaelloginyelotroparalaclave.PHPtienelafuncinHeader().
Estafuncindebeserllamadaantesdequesehayaproducidoningunasalidadelficherohtmlqueseest
generando.EstafuncinenvaunalneaalacabeceradedichoHTML.Yconestafuncinesposibleenviar
unmensajede"AutentificacinRequerida"queforzaralusuarioacompletarlosdatossolicitados.
Elfuncionamientoesmuysencillo.Unavezqueelusuariohacompletadolosdatosqueselepiden,se
fuerzaunanuevallamadaalscriptconlasvariables $PHP_AUTH_USER,$PHP_AUTH_PWy
$PHP_AUTH_TYPEquecontendrnelnombredelusuario,elpaswordyeltipodeautentificacin.
Autentificacindeusuarios
<?php
if(!isset($_SERVER['PHP_AUTH_USER'])){
header("WWWAuthenticate:Basicrealm=\"flanagan.ugr.es\"")
header("HTTP/1.0401Unauthorized")
}
?>
<html>
<head><title>Ejemplo20</title></head>
<body>
<h1>EjemplodePHP</h1>
http://flanagan.ugr.es/php/avanzado.htm

3/17

6/11/2015

ConceptosAvanzadosdellenguajePHP

<?php
if(!isset($_SERVER['PHP_AUTH_USER'])){
echo"TextoaenviarsipulsaelbotnCancelar\n"
exit
}else{
echo"<p>Hola".$_SERVER['PHP_AUTH_USER'].".</p>"
echo"<p>Hasintroducido<b>".$_SERVER['PHP_AUTH_PW']."</b>comotucontrasea.
"
}
?>
</body>
</html>
Hayquetenermuchocuidadoconelordenenelqueseenvianlosdiferentestiposdecabeceras.La
cabeceradeWWWauthenticate,debeirsiempredelantedeladeltipo HTTP/1.0401.
Esunaespeciedecookiequesemantienemientraselusuarionoapagueelnavegador.Ademsel
usuariodebeserconscientedeque,desdeelmomentoquehainsertadosuloginysuclave,hasido
identificadoyquetodoloquehagapuedeserregistrado.

5.Cookies(Galletitas)
Unacookienoesmsqueunavariablequeseregistrasdentrodelnavegadordelinternauta.Siel
navegadortieneconfiguradoqueserechacenlascookiesoquesepreguntesisepermiteaceptarlas,pueden
sercontroladas.Encambio,pordefecto,losnavegadoresdejanquelascookiessecreensinqueelusuario
seaconscientedeello.
ParaPHPlascookiessonfcilesdeutilizar.Paraestoseutilizalafuncinsetcookie()yaligualquela
funcinanterior,Header,tienequeserinvocadaantesdeproducirningunasalida.
Lafuncinposeeelsiguienteformato:
intsetcookie(stringname,stringvalue,intexpire,stringpath,stringdomain,intsecure)
Estafuncindefinela cookiequesevaaenviar.Todoslosargumentossonopcionalesaexcepcindel
nombre,Sisloseespecificaelparmetro name,lacookieconesenombreseborrardelclienteremoto.
Tambinpuedesustituircualquierparmetroporunacadenadetextovaca("")ysaltaraseseparmetro.
Losparmetros expirey securesonnmerosenterosynosepuedensaltarconunacadenadetextovaca.
Ensulugarutiliceuncero(0).Elparmetroexpireesunenterodetiempo.Elparmetro secureindicaquela
cookiesedebetransmitirnicayexclusivamentesobreunaconexinseguraHTTPS.Todoslosparmetros
exceptonamesonopcionales.Sisloseespecificaelparmetroname,lacookieconesenombrese
borrarradelclienteremoto.Losparmetros pathy domainsirvenparadistinguirnuestrascookiesdelasde
otrossitiosweb.
setcookie("TestCookie","TestValue")
setcookie("TestCookie",$value,time()+3600)/*expiraen1hora*/
setcookie("TestCookie",$value,time()+3600,"/~rasmus/",".utoronto.ca",1)
Parapoderverelcontenidodeuncookie,podemosutilizar:
print$TestCookie
print$HTTP_COOKIE_VARS["TestCookie"]
Sepuedenutilizarvectoresdecookies.
setcookie("cookie[three]","cookiethree")
setcookie("cookie[two]","cookietwo")
setcookie("cookie[one]","cookieone")
if(isset($cookie)){
while(list($name,$value)=each($cookie)){
echo"$name==$value
\n"
}
}
Falloshabituales:Lascookiesnosehacenvisibleshastalasiguientecargadeunapginaparalaque
lacookiedebaestarvisible.Lasllamadasmltiplesa setcookie()enelmismoscriptseejecutarnenorden
http://flanagan.ugr.es/php/avanzado.htm

4/17

6/11/2015

ConceptosAvanzadosdellenguajePHP

inverso.Siestasintentandoborrarunacookieantesdeinsertarotra,sedebesituarlallamadadeinsercin
antesdeladeborrado.

6.Utilizacindeficheroslocalesyremotos
6.1.Utilizacindeficheros
LautilizacindeficherosenPHPesmuysimilaracomosehaceenC.Tenemosfopenparaabrirun
fichero,dondeseindicaelnombredelficheroyelmododeaperturaynosdevuelveeldescriptordelfichero.
Confeofmiramossiestamosalfinaldeunfichero.Confclosecerramosunfichero.Yconfputsy fgets
escribimosoleemos,respectivamente,unalneaddeunfichero.
Ejemplodeescrituraenunfichero
<?
//Abrimoselficheroenmododeescritura
$DescriptorFichero=fopen("fichero_prueba.txt","w")
//Escribimosunalnea
$string1="Estaeslaprimeralneadetexto\r\n"
fputs($DescriptorFichero,$string1)
//Escribimosotra
$string2="Yestaeslasegunda\r\n"
fputs($DescriptorFichero,$string2)
//Cerramoselfichero
fclose($DescriptorFichero)
?>
Ejemplodelecturadeunfichero
<?
//Abrimoselficheroenmodolectura
$DescriptorFichero=fopen("fichero_prueba.txt","r")
//Repetimoshastaquenolleguemosalfinaldelfichero
while(!feof($DescriptorFichero)){
//Leemosunalneadecomomax4096caracteres(4KB),quesermenossihayunretornodecarro
$buffer=fgets($DescriptorFichero,4096)
//Escribimoslalnea
echo$buffer."<BR>"
}
?>
Tambindisponemosdefwritey freadparaescribiroleer,respectivamente,unbufferdeunfichero.
6.2.Utilizacindeficherosremotos
PHPpermitelautilizacindeficherosremotospararealizaralgntipodelecturadeellos.Enelcasode
quererrealizaralgntipodeescritura,sedebehaceratravsdeunservidorftp.Unejemplodeambas
cosassemuestraacontinuacin.
Leyendounficheroremoto
<?php
#Abrimoselficheroremoto
$archivo=fopen("http://www.php.net/","r")
if(!$archivo){
echo"<p>Nosepudoabrirelarchivoremoto.\n"
exit
}
#Mostramoselficherolneaalnea
$i=0
http://flanagan.ugr.es/php/avanzado.htm

5/17

6/11/2015

ConceptosAvanzadosdellenguajePHP

while(!feof($archivo))
{
$linea=fgets($archivo,1024)
print"LINEA$i:$linea<BR>"
$i++
}
#Cerramoselfichero
fclose($archivo)
?>
TambinsepuedeescribiraarchivosenunFTPsiemprequeseconectecomounusuarioconlos
correctosderechosdeacceso,yelarchivonoexistaya.Paraconectarcomounusuariodistintode
'anonymous',senecesitaespecificarelnombredeusuario(yposiblementecontrasea)dentrodelaURL,
talescomo'ftp://usuario:clave@ftp.ejemplo.com/camino/a/archivo'.
Escribiendoenunficheroremotousandoftp
<?php
$file=fopen("ftp://ftp.php.net/incoming/outputfile","w")
if(!$file){
echo"<p>Unabletoopenremotefileforwriting.\n"
exit
}
/*Escribimoselfichero.*/
fputs($file,"$HTTP_USER_AGENT\n")
/*Locerramos*/
fclose($file)
?>

7.SubidadeficherosusandoHTTP
LasolucinidealparaintercambiosdeficheroseselprotocoloFTP,perolosinternautasaloqueestn
acostumbradosesautilizarlaweb.ConHTTPUploadpodemoslograrqueelclienteenvieficheroslocalesde
sucomputadorpulsandounbotn.
LoprimeroquehayquehacerescrearunapginaHTMLconunformularioconelcualenviaremosel
fichero:
FormularioHTMLparaenviarficheros
<html>
<head><title>Ejemplo21</title></head>
<body>
<h1>EjemplodeFormulario3</h1>
<p>
<formenctype="multipart/formdata"action="ej22.php"method="post">
Fichero:<inputtype="file"name="fichero_usuario">
<br>
<inputtype="submit"value="EnviarFichero">
</form>
</body>
</html>
DebemosdestacardeesteformularioHTMLlaposibilidadderestringireltamaodelficheroqueseva
aenviar.ComoHTTPnoestpensadoparaestosmenesteres(alcontrariodeFTP)noesaconsejableusarlo
paraficherosgrandes.
DentroelPHPquevaaprocesarelanteriorformulario,seencargadeirrecibiendoelficheroy
guardarloeneldiscoduro.Esimportantetenerencuentaqueelusuarioqueestguardandoelficheroes
aquelconelqueseejecutaelservidorweb(normalmente nobody),porloquedebertenerpermisospara
escribireneldirecgtorioyficherosqueseutilicen.
EnelprogramaPHPquerecibeesteficherosevanadefinirunaseriedevariables:
$fichero_usuarionombredelficherotemporalenelquesehaalmacenadoenelservidorelfichero
enviadoporelusuario.Ellugardondeseguardanestosficheroseseldirectoriotemporaldelservidor
http://flanagan.ugr.es/php/avanzado.htm

6/17

6/11/2015

ConceptosAvanzadosdellenguajePHP

web.
$fichero_usuario_namenombreoriginaldelfichero
$fichero_usuario_sizetamaodelfichero
$fichero_usuario_typeeltipoMIMEdelficheroconelquenavegadorlohaenviado.
ScriptPHPpararecibirficheros
<html>
<head><title>Ejemplo22</title></head>
<body>
<h1>EjemplodeFormulario3</h1>
<p>
<?php
#Mostramosinformacindelficherorecibido
print"Elficherorecibidoest$fichero_usuario<br>\n"
print"Elnombredelficherorecibidoes$fichero_usuario_name<br>\n"
print"Eltamaodelficherorecibidoes$fichero_usuario_size<br>\n"
print"EltipoMIMEdelficherorecibidoes$fichero_usuario_type<br>\n"

#mostramoselcontenido
print"Elcontenidodelficherorecibidoes:<br>\n"
#Abrimoselficheroremoto
$archivo=fopen("$fichero_usuario","r")
if(!$archivo){
echo"<p>Nosepudoabrirelarchivoremoto.\n"
exit
}
#Mostramoselficherolneaalnea
$i=0
while(!feof($archivo))
{
$linea=fgets($archivo,1024)
print"LINEA$i:$linea<BR>"
$i++
}
#Cerramoselfichero
fclose($archivo)
?>
</body>
</html>

8.Manejodeconexiones
(2).

EnPHPlasconexionesquesemantinenpuedentenertresestados,Normal(0),Aborted(1)yTimeout

Enunscriptnormal,elestadoesNORMAL,cuandoelclientedesconecta,elestadopasaaser
ABORTEDysiellmiteimpuestoporPHPimposedhatranscurrido,(set_time_limit(),eltiempopordefecto
es30segundos)elestadoes TIMEOUT.
Unafuncinmuyutilparaestoscasos,esconnection_status()quedevuelveelestadodelaconexin.
8.1.Conexionesabasesdedatos
LasconexionespersistentessonenlacesSQLquenosecierrancuandolaejecucindelscripttermina.
Elcomportamientodeestasconexioneseselsiguiente.
Cuandoseinvocaunaconexindeestetipo,PHPcompruebasiexisteunaconexindeestemismo
tipooporelcontrario,setratadeunanuevaconexin.Enelcasodequeexista,seprocedeasuuso,yen
elcasodequenoexista,laconexinsecrea.Dosconexionesseconsideranigualescuandoestnrealizadas
sobreelmismoservidor,conelmismousuarioylamismacontrasea.
Peroenrealidad,estasconexionespermanentes,noproporcionanningntipodefuncionabilidad
adicionalfrenteaconexionestemporales,debidoalaformaenquelosservidoresWebfuncionan.
http://flanagan.ugr.es/php/avanzado.htm

7/17

6/11/2015

ConceptosAvanzadosdellenguajePHP

Anasseutilizandebidoalaeficiencia,debidoaltiempodeestablecimientodelaconexin,ydebido
aquesitienesunaslaconexinsobreelservidor,irmuchomsrpidoquesitienes10conexiones
temporales,puestoquelacargaquesoportaesdiferente.

9.FuncionesdePHPparaMySQL
Lalistadefuncionesdisponibleseslasiguiente:

mysql_affected_rows:Otieneelnmerodetuplasmodificadasenlaltimaoperacion
MySql.

intmysql_affected_rows(int[identificadordelink])
Devuelveelnmerodelneasafectadasporlaltimaoperacin,INSERT,UPDATEoDELETE,
asociadasconelidentificadorqueseespecifica.
Sinoseespecificaellink,seasumequeserefierealltimo.
Excepcin:Silaltimaoperacinhaborradotodoslosregistrosdeunatabla,
estafuncindevuelve0.
EstafuncinnotieneefectoconningunaoperacinSELECT,puestoqueno
modificanningunalnea.

mysql_change_user:Modificaelusuarioresponsabledelasoperaciones.
intmysql_change_user(stringuser,stringpassword,string[database],int
[identificadordelink]
Losparmetrosdatabaseylinksonopcionales.
Silanuevacombinacindeusuarioypasswordnoescorrecta,seguiractivala
actual.

mysql_close:CierralaconexinMySql.
intmysql_close(int[identificadordelink]
Estafuncincierralaconexinpermanentequemantieneellink.Elparmetro
esopcional.Sinoseespecifica,secerrarlaltimaconexinabierta.
Siunaconexinnosecierra,elscriptlacierraautomticamentealterminarsu
ejecucin.
Estafuncinnooperacorrectamenteconlasconexionesabiertasconlafuncin
mysql_pconnect().

mysql_connect:OpenaconnectiontoaMySQLServer.
intmysql_connect(string[hostname[:port][:/path/to/socket]],
string[username],string[password])
Estafuncinestableceunaconexinaunservidormysql.Todoslosargumentos
sonopcionalesylosvalorespordefectoson localhost,elusuariodueodelproceso,
sinpassword.
Sirealizasdosvecesunallamadaaestafuncinconlosmismosparmetros,
devuelveelmismoidentificadorqueparalallamadaanterior.
Todaslasconexionesterminanalterminarlaejecucindelscript,anoserque
seeliminelaconexinllamandoalafuncin mysql_close().

mysql_create_db:CreaunabasededatosenelgestordeBasesdeDatos.
intmysql_create_db(stringdatabaseName,int[identificadordellink])
Estafuncincreaunanuevabasededatosasociadaallinkespecificado.
Paramantenerlacoherenciaconotrasversiones,seutilizamysql_createdb()

http://flanagan.ugr.es/php/avanzado.htm

8/17

6/11/2015

ConceptosAvanzadosdellenguajePHP

mysql_data_seek:Realizaunmovimientoenelpunterodelosdatosresultado.
intmysql_data_seek(intresult_identifier,introw_number)
Estafuncinpermitequeelpunteroalosresultadosapuntealalnea
especificada.
Elnmerodelneascomienzaen0.

mysql_db_query:Realizaunaconsultaaunabasededatos.
intmysql_db_query(stringdatabase,stringquery,int[identificadordellink]
Seleccionalabasededatosdatabaseyejecutaunaconsulta.Sinoseespecifica
ellink,utilizaelltimoabierto,sinoexiste,intentaoptenerunollamando
internamentealafuncinmysql_connect()sinargumentos.

mysql_drop_db:RealizaunaoperacinDropsobreunabasededatos.
intmysql_drop_db(stringdatabase_name,int[identificadordellink])
DevuelveTrueoFalsesegnhayaonotenidoxito.
Nota:Cuidado,segnlaversindeMySql,borratodalabasededatosan
conteniendotablascondatos.

mysql_errno:DevuelveuncdigodeerrorrelacionadoconlaltimaoperacinMySqlrealizada.
intmysql_errno(int[identificadordellink]
Estafuncindevuelveelnmerodelcdigodeerrorquedevuelveelservidor
MySql.

mysql_error:Devuelveelmensajedeerrorasociadoauncdigoconcretorelacionadoconla
ltimaoperacinMySqlrealizada.

stringmysql_error(int[identificadordellink]
Devuelvelacadenaasociadaaunerrorqueposeeelidentificadordeconexinquese
especifica.

mysql_fetch_array:Introduceelresultadoenunarrayasociativo.
arraymysql_fetch_array(intresult,int[resulttype])
Estafuncinesunaversinextendidade mysql_fetch_row().Loquehacees
almacenarelresultadoenunarrayindexado,almacenandoaslosdatosenun
ndiceasociativoutilizandolosnombresdeloscamposcomoclaves.
Siexistenmsdeunacolumnaconelmismonombre,tendrprecedenciala
ltimacolumna.Paraaccederalalotrascolumnasconelmismonombre,sedebe
indexarlacolumnaohacerunaliasparaella.
Ejemplo:
selecttabla1.precioasprecio1,tabla2.precioasprecio2from
tabla1,tabla2
Elsegundoargumento,esunaconstantequepuedetomarlossiguientes
valores.
MYSQL_ASSOC
MYSQL_NUM
MYSQL_BOTH

mysql_fetch_field:Devuelveunobjetoconlainformacindeunresultado.
objectmysql_fetch_field(intresult,int[field_offset])
Devuelveunobjetoconlainformacinquecontiene resultPuedeutilizarsepar
http://flanagan.ugr.es/php/avanzado.htm

9/17

6/11/2015

ConceptosAvanzadosdellenguajePHP

obtenerinformacindeloscamposdeciertasconsultas.Sielcampodel
desplazamientonoestespecificado,seseleccionaelsiguientedatoquenohaya
sidoyaasignadomedianteestafuncin.
Laspropiedadesdelobjetoson:
name:Nombredelcampo
table:Nombredelatablaalaqueperteneceelcampo.
max_length:Longitudmxima.
not_null:Serverdaderosielcampopooseeestapropiedad.
primary_key:Verdaderosielcampoeslaclaveprincipal.
unique_key:Verdaderosielcampoesclavenica.
multiple_key:Verdaderosielcamponoesclavenica.
numeric:Verdaderosisetratadeuncamponumrico.
blob:VerdaderosilacolumnaesaBLOB.
type:Tipodelacolumna.
unsigned:Verdaderosisetratadeundatosinsigno.
zerofill:Verdaderosilacolumnatienelapropiedad zerofill.

mysql_fetch_lengths:Obtenerlalongituddelosresultados.
arraymysql_fetch_lengths(intresult)
Devuelveunarrayquecontienelaslongitudesdetodosloscamposqueforman
elltimoregistroasignadoconlafuncin mysql_fetch_row(),mysql_fetch_array()o
mysql_fetch_object().

mysql_fetch_object:Devuelveelresultadocomounobjeto.
objectmysql_fetch_object(intresult,int[result_type])
Devuelveunobjetoconlaspropiedadesdelltimoregistroextraidodeun
resultado.
Estafuncinesigualquemysql_fetch_array()conladiferenciadequese
obtieneunobjetoenvezdeunarray.
Elsegundoargumento,esunaconstantequepuedetomarlossiguientes
valores.
MYSQL_ASSOC
MYSQL_NUM
MYSQL_BOTH

mysql_fetch_row:Devuelveelresultadocomounarray.
arraymysql_fetch_row(intresult)
Devuelveunarrayconunregistrodelresultadoofalseenelcasodequeno
existanregistros.
Sisellamadosvecesaestafuncin,lasignarelprimerregistrodelresultado
laprimeravezyelsegundoregistrodelresultadolasegundavez.

mysql_field_name:Devuelveelnombredeuncampoespecificadoenunresultado.
stringmysql_field_name(intresult,intfield_index)
Devuelveelnombredelcampoqueseespecifica,medianteelordenqueocupe
dentrodelresultado.

mysql_field_seek:Asignaelpunterodelosresultadosaunaposicindeterminada.
intmysql_field_seek(intresult,intfield_offset)
Buscaeldesplazamientoqueseespecificaenelsegundoargumento,dentrodel
resultado.

mysql_field_table:Obtieneelnombredelatabladeuncampoespecificado.
http://flanagan.ugr.es/php/avanzado.htm

10/17

6/11/2015

ConceptosAvanzadosdellenguajePHP

stringmysql_field_table(intresult,intfield_offset)

mysql_field_type:Obtieneeltipodeuncampoespecificado.
Obtieneelnombredelatablaparaelcampoqueseindicaeneldesplazamiento.
stringmysql_field_type(intresult,intfield_offset)
Sedevuelveeltipodelcampoqueseindicamedianteeldesplazamiento.
Lascadenasquedevuelvepuedenser:
int
real
string
blob
OtrostiposdetalladosenladocumentacindeMySql.

mysql_field_flags:Obtienelos"Flags"asociadosdelcampoespecificado.
stringmysql_field_flags(intresult,intfield_offset)
Devuelveunacadenaconlaspropiedadesdelcamposeparadasporunespacio.
Parapartiresacadenasepuedeutilizarlafuncinexplode()
Laspalabrasquepuededevolverson:
not_null
primary_key
unique_key
multiple_key
blob
unsigned
zerofill
binary
enum
auto_increment
timestamp

mysql_field_len:Obtienelaslongituddeuncampoespecificado.
intmysql_field_len(intresult,intfield_offset)
Devuelvelalongituddelcampoespecificado.

mysql_free_result:Liberalamemoriadelosresultados.
intmysql_free_result(intresult)
Liberalamemoriaqueutilizaelparmetro.

mysql_insert_id:ObtieneelidentificadordelaltimaoperacinINSERT.
intmysql_insert_id(int[link_identifier])
DevuelveelIDgeneradoparauncampoAUTO_INCREMENTED.Devolverelid
autogeneradodevueltoporlaltimaoperacinINSERTdelenlacequeseespecifica
comoargumento.
Sielidentificadornoseespecifica,seutilizalaltimaconexinabierta.

mysql_list_fields:Listaloscamposresultado.
intmysql_list_fields(stringdatabase_name,stringtable_name,int[link_identifier]
Devuelveinformacindelnombredelatablaqueseproporciona.Elpuntero
quedevuelve,puedeserutilizadoconlasfuncionesmysql_field_flags(),
mysql_field_len(),mysql_field_name()ymysql_field_type().
Elresultadoesunenteropositivo,slodevuelve1encasodequeexistaalgn
http://flanagan.ugr.es/php/avanzado.htm

11/17

6/11/2015

ConceptosAvanzadosdellenguajePHP

error.

mysql_list_dbs:ListalasbasesdedatosdisponiblesenelservidorMySQL.
intmysql_list_dbs(int[link_identifier])
Devuelveunpunteroquecontienelalistadebasesdedatosdisponiblesenese
servidorMySql.
Conlainformacinquedevuelve,puedellamarsealafuncin
mysql_tablaname().

mysql_list_tables:ListalastablasdeunabasededatosMySql.
intmysql_list_tables(stringdatabase,int[link_identifier])
Extraeunputeroalalistadetablasqueestnenunabasededatos.
Paraextraerelnombredelastablassepuedeposteriormenteutilizar
mysql_db_query()o mysql_tablename().

mysql_num_fields:Otieneelnmerodecamposdelresultado.
intmysql_num_fields(intresult)
Devuelveelnmerodecamposquecontieneelparmetroresultado.

mysql_num_rows:Obtieneelnmerodelneasdelresultado.
intmysql_num_rows(intresult)
Devuelveelnmerodelneasquecontieneelparmetroresultado.

mysql_pconnect:Abreunaconexinpermanenteconunabasededatos.
intmysql_pconnect(string[hostname[:port][:/path/to/socket]],string
[username],string[password])
DevuelveunaconexinpersistenteaunservidorMySql.
Todoslosargumentossonopcionalesysusvaloressonlosmismosqueparala
funcinmysql_connect().
Estafuncinprimero,intentaencontrarunaconexinyaexistente,sila
encuentra,devuelveunidentificadorparaella,yenelcasodequenolaencuentre,
abreunanuevaconexinpermanente.
Despuesdeesto,mantienelaconexinhastaquefinalizalaejecucindel
script.
Hayquetenercuidado,porquemysql_close()nocierraconexionesabiertascon
estafuncin.

mysql_query:EnviaunaconsultaSQLaMySQL.
intmysql_query(stringquery,int[identificadordellink])
Envaunaconsultaaunabasededatosactivaenelservidorasociadoallink
queseespecifica.Enelcasodequenoseespecifiqueningunaconexinabierta,la
funcinintentareestablecerunaconexinconlafuncin mysql_connect().
Lacadenadelaconsulta,debeterminarcon.
LafuncindevuelveTRUEoFALSEsilaconsultatienexito.Sielvalordevuelto
esTRUE,significaquelaconsultapuedeserrealizada,noqueexistandatosque
respondanaesaconsulta.
Paraconsultarcuantaslneasrespondenaesaconsulta,sepuedeutilizarla
funcinmysql_affecter_rows()ynosdircuantaslneassehanvistoafectadaspor
laltimaoperacinINSERT,DELETE,REPLACEoUPDATE.Enelcasodetratarsede
http://flanagan.ugr.es/php/avanzado.htm

12/17

6/11/2015

ConceptosAvanzadosdellenguajePHP

unaoperacinSELECTlafuncinmysql_query()devuelveunidentificadorde
resultadoquesepuedeutilizarconlafuncin mysql_result().

mysql_result:Obtienelosdatosresultados.
intmysql_result(intresult,introw,mixed[field])
DevuelveelcontenidodeunaceldadelatabladinmicaquedevuelveMySql
comoresultadodeunaoperacinprevia.
Elltimoargumentoesopcionalypuedecontenereldesplazamientodelcampo
quesedeseaobtener,elnombredelcampooalgocomotabla.campooelaliasdel
campoquesedeseeconsultarsiseestableciopreviamente.
Cuandosetrabajaconampliosconjuntosderesultados,esmejorutilizaralguna
delasfuncionesqueextraenunregistrodeesaconsulta.
Hayquetenercuidadodenohacerllamadasafuncionesqueobtienen
resultadosderesultjuntoconestafuncin,puestoqueelpunteroquevaleyendode
losresultados,puedeperderse.

mysql_select_db:SeleccionaunabasededatosMySql.
intmysql_select_db(stringdatabase_name,int[identificadordellink])
Estafuncinasignalabasededatosactivaenelservidorasociadoal
identificadordellink.

mysql_tablename:Obtieneelnombredelatabladeuncampo.
stringmysql_tablename(intresult,inti)
Estafuncindevuelveelnombredeunatabladeunpunteroderesultadosque
hadevueltopreviamentelafuncin mysql_num_rows.
9.1.EjemplosdeutilizacindeMySQLdesdePHP
Ejemplodecreacindeunabasededatos
<html>
<head><title>EjemplodecreacindeunaBDconPHPyMySQL</title>
</head>
<body>
<h2>Creacindeunabasededatos</h2>
<?php
$host="flanagan.ugr.es"
$user="serweb"
$password="serweb"
#ConectamosaMySQL
$bd=@mysql_connect($host,$user,$password)
ordie("NosepuedeconectaraMySQL:".mysql_error())
#Creamosunabasededatos
if(@mysql_create_db("mi_bd")){
print("<p>BasedeDatoscreadaconxito\n")
}else{
printf("<p>ERRORalcrearlabasededatos:%s\n",mysql_error())
}
?>
</body>
</html>
Ejemplodecreacindeunatabla
<html>
<head><title>EjemplodecreacindeunatablaconPHPyMySQL</title>
http://flanagan.ugr.es/php/avanzado.htm

13/17

6/11/2015

ConceptosAvanzadosdellenguajePHP

</head>
<body>
<h2>Creacindeunatabla</h2>
<?php
$host="flanagan.ugr.es"
$user="serweb"
$password="serweb"
#ConectamosaMySQL
$bd=@mysql_connect($host,$user,$password)
ordie("NosepuedeconectaraMySQL:".mysql_error())

#Creamosunatabladearticulos
$campos_tabla_articulos="idINTPRIMARYKEY,nombreVARCHAR(200)NOTNULL,precioFLOAT"
#Creamos1variableconlasentenciaSQLquecrealatabla
$SQL_crea_tabla_articulos="createtabletabla_articulos($campos_tabla_articulos)"
#Ejecutamoslasentencia
$result=@mysql_db_query("mi_bd",$SQL_crea_tabla_articulos)
ordie("<p>ERROR,Nopuedocrearlatabla".mysql_error())
print"<p>Tablacreada</p>"
?>
</body>
</html>
Ejemplodeinsercinenunatabla
<html>
<head><title>EjemplodeinsercinenunatablaconPHPyMySQL</title>
</head>
<body>
<h2>Insercinenunatabla</h2>
<?php
$host="flanagan.ugr.es"
$user="serweb"
$password="serweb"
#ConectamosaMySQL
$bd=@mysql_connect($host,$user,$password)
ordie("NosepuedeconectaraMySQL:".mysql_error())
#Insertamos2artculos
$SQL_inserta1="insertintotabla_articulosvalues(10,'patatas',1.4)"
$SQL_inserta2="insertintotabla_articulosvalues(5,'manzanas',2.2)"
$result=@mysql_db_query("mi_bd",$SQL_inserta1)
orprint("\nNopuedoinsertar")
$result=@mysql_db_query("mi_bd",$SQL_inserta2)
orprint("\nNopuedoinsertar")
?>
</body>
</html>
Ejemplodeconsultaenunatablaconarraysnumricos
<html>
<head><title>EjemplodeconsultaenunatablaconPHPyMySQL</title>
</head>
<body>
<h2>Consultaenunatabla</h2>
<?php
$host="flanagan.ugr.es"
$user="serweb"
$password="serweb"

http://flanagan.ugr.es/php/avanzado.htm

14/17

6/11/2015

ConceptosAvanzadosdellenguajePHP

#Mostramoselcontenidodelatabla
$result=@mysql_db_query("mi_bd","select*fromtabla_articulos")
while($fila=mysql_fetch_array($result,MYSQL_NUM)){
echo"<p>".$fila[0].""
echo$fila[1].""
echo$fila[2].""
}
#Liberamoslamemoriausadaporlaconsulta
mysql_free_result($result)
?>
</body>
</html>
Otroejemplodeconsultaenunatablaconarraysasociativos
<html>
<head><title>EjemplodeconsultaenunatablaconPHPyMySQL</title>
</head>
<body>
<h2>Consultaenunatabla</h2>
<?php
$host="flanagan.ugr.es"
$user="serweb"
$password="serweb"

#Mostramoselcontenidodelatabla
$result=mysql_db_query("mi_bd","select*fromtabla_articulos")
$result=@mysql_db_query("mi_bd","select*fromtabla_articulos")
while($fila=mysql_fetch_array($result,MYSQL_ASSOC)){
echo"<p>".$fila["id"].""
echo$fila["nombre"].""
echo$fila["precio"].""
}
#Liberamoslamemoriausadaporlaconsulta
mysql_free_result($result)
?>
</body>
</html>
Otroejemplodeconsultaenunatablaconobjetos
<html>
<head><title>EjemplodeconsultaenunatablaconPHPyMySQL</title>
</head>
<body>
<h2>Consultaenunatabla</h2>
<?php
$host="flanagan.ugr.es"
$user="serweb"
$password="serweb"

#Mostramoselcontenidodelatabla
$result=mysql_db_query("mi_bd","select*fromtabla_articulos")
while($fila=mysql_fetch_object($result)){
echo"<p>".$fila>id.""
echo$fila>nombre.""
echo$fila>precio.""
}
#Liberamoslamemoriausadaporlaconsulta
mysql_free_result($result)
?>
</body>
</html>

http://flanagan.ugr.es/php/avanzado.htm

15/17

6/11/2015

ConceptosAvanzadosdellenguajePHP

10.ReferenciadeFuncionesdePHP
I. FuncionesespecficasdeApache
II.Funcionesdematrices
III. FuncionesOrtogrficas
IV.Funcionesmatemticasdeprecisinarbitraria
V. FuncionesdecompresinconBzip2
VI.Funcionesdecalendario
VII. CCVSAPIFunctions
VIII.soportedelasfuncionesCOMparaWindows
IX.FuncionesdeClases/Objectos
X. FuncionesdeClibPDF
XI.Crackfunctions
XII. CURL,ClientURLLibraryFunctions
XIII.Funcionesdepagoelectrnico
XIV. CrditMutuelCyberMUTfunctions
XV.CyrusIMAPadministrationfunctions
XVI. Funcionesdetiposdecaracteres
XVII.Funcionesdelacapadeabstracciondebasesdedatos(dbmstyle)
XVIII. Funcionesdefechayhora
XIX. FuncionesparadBase
XX.Funcionesdbm
XXI. dbxfunctions
XXII.DB++Functions
XXIII. DirectIOfunctions
XXIV.Funcionescondirectorios
XXV. FuncionesdeDOMXML
XXVI..NETfunctions
XXVII. ErrorHandlingandLoggingFunctions
XXVIII.FrontBaseFunctions
XXIX.FuncionesfilePro
XXX. Funcionesdelsistemadeficheros
XXXI.FuncionesFormsDataFormat(FormatodeDatosdeFormularios)
XXXII. FriBiDifunctions
XXXIII.FuncionesFTP
XXXIV. FunctionHandlingfunctions
XXXV.GNUGettext
XXXVI. GMPfunctions
XXXVII.FuncionesHTTP
XXXVIII. FuncionesparaHyperwave
XXXIX. FuncionesparaICAPInternetCalendarApplicationProtocol
XL.iconvfunctions
XLI. Funcionesdeimgenes
XLII.FuncionesIMAP
XLIII. FuncionesparaInformix
XLIV.FuncionesInterBase
XLV. IngresIIfunctions
XLVI.IRCGatewayFunctions
XLVII. Java
XLVIII.FuncionesLDAP
XLIX.FuncionesdeCorreo
L. mailparsefunctions
LI.Funcionesmatemticas
LII. MultiByteStringFunctions
LIII.MCALfunctions
LIV. FuncionesCriptogrficas
LV.FuncionesHash
LVI. FuncionesdeMicrosoftSQLServer
LVII.MingfunctionsforFlash
LVIII. Miscelneadefunciones
LIX. mnoGoSearchFunctions
LX.funcionesmSQL
LXI. FuncionesMySQL
LXII.MohawkSoftwaresessionhandlerfunctions
LXIII. muscatfunctions
LXIV.FuncionesdeRed
LXV. Ncursesterminalscreencontrolfunctions
LXVI.LotusNotesfunctions
LXVII. ODBCfunctions
LXVIII.FuncionesdeOracle8
LXIX.OpenSSLfunctions
LXX. FuncionesOracle
LXXI.OvrimosSQLfunctions
http://flanagan.ugr.es/php/avanzado.htm

16/17

6/11/2015

ConceptosAvanzadosdellenguajePHP

LXXII. OutputControlFunctions
LXXIII.Objectpropertyandmethodcalloverloading
LXXIV. PDFfunctions
LXXV.VerisignPayflowProfunctions
LXXVI. opcioneseinformacindePHP
LXXVII.FuncionesPOSIX
LXXVIII. FuncionesdePostgreSQL
LXXIX. Funcionesdeejecucindeprogramas
LXXX.Printerfunctions
LXXXI. PspellFunctions
LXXXII.GNUReadline
LXXXIII. FuncionesGNURecode
LXXXIV.FuncionesdeexpresionesregularescompatiblesconPerl
LXXXV. qtdomfunctions
LXXXVI.Funcionesparaexpresionesregulares
LXXXVII. FuncionesSemforoydememoriacompartida
LXXXVIII.SESAMdatabasefunctions
LXXXIX.Sessionhandlingfunctions
XC.SharedMemoryFunctions
XCI. ShockwaveFlashfunctions
XCII.FuncionesSNMP
XCIII. Socketfunctions
XCIV.Funcionesdecadenas
XCV. FuncionesdeSybase
XCVI.FuncionesURL
XCVII. Funcionessobrevariables
XCVIII.vpopmailfunctions
XCIX.W32apifunctions
C. FuncionesWDDX
CI.FuncionesdeintrpreteXML
CII. XMLRPCfunctions
CIII.XSLTfunctions
CIV. YAZ
CV.NISfunciona
CVI. ZipFileFunctions(ReadOnlyAccess)
CVII.FuncionesdeCompresin

11.Ejercicios
Ejercicio:Pruebaarealizarunaconexinconelmysql,creaunatabla,insertaunpardevalores,lee
losvaloresdelatablaymuestralosenlasalida.Latablalapuedescrearcontreselementos,unnombre,un
precioyunapequeadescripcion.Nota:antesdecrearunatabla(enSQL)tienesquehabercreadolabase
dedatosconlaquevasatrabajar
Ejercicio:UtilizandolatabladelejemploanteriorcreaunapaginaPHPquetepermitaseleccionarun
cantidaddeelementosdelabasededatosyenvieloselementosseleccionadosaotroPHPqueteguardalos
seleccionadoenunacookie.Sihaymsdeunopuedesutilizarunvector.
Ejercicio:Pideelidiomadelusuarioentrevarios(espaoloingls),yguardaloenuncookieparauso
futuro.Creaunformularioconuncampoparaescribirunemail,otroparaunasuntoyunterceropara
escribiruntema,conesosdatosenviauncorreo.(Nota:Usalareferenciadefunciones XLIX.Funcionesde
Correo)

http://flanagan.ugr.es/php/avanzado.htm

17/17

You might also like