Documente Academic
Documente Profesional
Documente Cultură
El lenguaje PHP
El lenguaje PHP
Objetivos
Conocer las caractersticas bsicas de las aplicaciones desarrolladas con PHP y situarlas frente a otras tecnologas Adquirir conocimientos y destreza bsica para utilizar PHP en
Aplicaciones web dinmicas Formularios Acceso a bases de datos
Contenidos
Introduccin Instalacin de APACHE, PHP, MySQL Instalacin de FoxServ Sintaxis bsica del lenguaje PHP PHP y Formularios Web Acceso a bases de datos con PHP Gestin de sesiones con PHP Seguridad con PHP
Introduccin
Introduccin
Pginas web estticas
Archivos HTML almacenados en un servidor Poca o nula interaccin del usuario Informacin que vara con muy poca frecuencia Mantenimiento de la informacin modificando documentos HTML
Introduccin
Pginas web dinmicas
HTML generado automticamente en el servidor y en tiempo de ejecucin Programas en el servidor cuya respuesta vara segn la peticin, fecha, ... Aplicaciones tipo
Peridico online Aplicacin de comercio electrnico Enciclopedia Buscador
6
Introduccin
Generacin de webs dinmicas
Generacin a partir de opciones en la peticin
Ejecucin de programas en el servidor Interaccin con el usuario
Tecnologas
Common Gateway Interface: CGI Lenguajes de script
Software libre: PHP Microsoft: ASP
CGIs
Especificacin para transferir informacin entre un servidor web y un programa ejecutable Protocolo para envo y recepcin de datos Recepcin
Entrada estndar Variables de entorno que crea el servidor antes de llamar al CGI
Funcionamiento de CGIs
Internet
[ HTTP ]
[ HTTP ]
CGI
Docum. HTML
B ase de Datos
10
Activacin de un CGI
Servidor
Recibe URL Determina el archivo al que referencia Si es html (ext. .html, .htm, etc.) Lo enva al cliente que hace la peticin Si_no Si es un programa (ext. .cgi o directorio especfico)
Se ejecuta en el sistema Enva el resultado de la ejecucin al cliente
Si_no
Otros
Fin_Si Fin_si
11
Ejemplo de CGI
13
14
Cliente W eb (Browser)
[ HTTP ]
[ HTTP ]
Inter faz DBI CGI Mdulo DBI Interfaz DBD Otras Fuentes de Datos Docum. HTML
Dr iver de O racle
Driver de Postgres
BD Oracle
BD PostGres
BD MySQL
15
Desventajas
Las comunicaciones permanecen abiertas hasta que se genera el resultado Cada programa consume un nuevo proceso (o hilo) en el servidor Problemas de seguridad
Llamadas al shell que pueden degenerar en ataques al sistema
16
Lenguajes de Script
Peticin pgina PHP, ASP... Cliente W eb (Browser) Documen to HTM L estndar Servidor Web (Apache, IIS...)
(PHP,ASP...) (PHP,ASP...)
Pginas HTML
Base de Datos
17
El lenguaje PHP
Personal Home Page Tools (PHP) Ejecucin de scripts en el servidor: interpretado Creado por Rasmus Lerdorf (1994) Alternativa a la programacin CGI/Perl Se ejecutan en el contexto (proceso) del servidor web
Mdulo de extensin a un servidor web Posibilidad de utilizacin de mltiples hilos
Idneos para servidores que soportan gran volumen de usuarios Orientado a conexiones entre pginas web y diferentes servidores de bases de datos
18
Servidor Web
Mdulo de PHP
Base de Datos
Otros Servicios
19
ASP
Active Server Pages (ASP) Disponible por primera vez con IIS 3.0 Cdigo Visual Basic Script que genera dinmicamente archivos HTML que se envan al cliente Permite el acceso a objetos y componentes en el servidor (Sistemas Windows) Ejecucin en el mismo proceso servidor Funcionalmente equivalente a PHP Lenguaje propietario
21
Funcionamiento de ASP
Peticin de URL.asp
Servidor Web
Componentes Active X
Otros Servicios
Base de Datos
22
23
JSP
Tecnologa Java de SUN Java Server Pages (JSP)
Alternativa a PHP o ASP
Servlets
Programacin Java en servidor Acepta peticiones y genera resultados (html, acceso a datos, etc.)
JDBC
Acceso directamente a bases de datos relacionales Pude utilizarse sobre ODBC
24
Funcionamiento de JSP
Peticin de URL.jsp
Servidor Web
Motor de Servlets
Servlets
Pginas JSP
Servicios J2EE
Base de Datos
Otros Servicios
25
Funcionamiento de JSP
Una pgina JSP pasa por tres etapas en la evolucin de su cdigo:
Cdigo fuente JSP (.jsp) Cdigo fuente Java (.java) Clase Java compilada (.class)
26
Objetivo
Resolver el problema de rendimiento de los CGI Los script se cargan como parte del servidor Acceso a todos los recursos del servidor
ISAPI
Microsoft Internet Information Server API
Caractersticas
Flexibilidad y potencia Problemas de seguridad Poca portabilidad: limitado a cada tipo de servidor Los API son propietarios
27
28
Browser
Web Server
Gateway de Cach
Cach Server
29
En este curso
APACHE
Servidor ms utilizado en el mundo
PHP
Seguridad Facilidad para conexin a bases de datos
MySQL
Soporte SQL Libre disposicin Muy potente para bases de datos de tamao medio
30
Instalacin en Linux
Paquetes necesarios
Apache: www.apache.org MySQL: www.mysql.com PHP: www.php.net
32
Instalacin en Linux
Procedimiento (pude depender de la distribucin que utilicemos)
Descompresin de paquetes Compilar MySQL Instalar MySQL Creacin de las BBDD del sistema Iniciar el servidor de MySQL Configuracin de Apache para compilacin, activando el mdulo para PHP Definicin de extensiones para tratarlas con PHP Probar Apache + PHP
33
Instalacin de FoxServ
Otras alternativas
FoxServ
Completo y eficiente paquete que instala Apache, PHP, Zend Optimizer, MySQL y PhpMyAdmin en Windows Lo hace de una sola vez No requiere configurar los componentes de forma independiente Todos los componentes se instalan en un directorio con subdirectorios para cada paquete
35
FoxServ
En la ltima pantalla de la instalacin nos permitir seleccionar la opcin de ejecutar el Apache y dirigir el navegador a http://localhost y ver si se ha instalado todo correctamente.
Administracin de MySQL
http://localhost/phpMyAdmin
36
Ejemplo PHP
Ejemplo PHP
<html> <head> <title>Example</title> </head> <body>
Ejemplos PHP
<html> <body> <?php print "Hello, world."; ?> </body> </html>
42
Cdigo PHP
Cdigo HTML
Prrafo 1
Salida
Prrafo 2
Poco legible
43
Cdigo HTML
Salida
Prrafo 1 Prrafo 2
44
require()
En caso de error produce un error fatal Se usa cuando debe interrumpirse la carga de la pgina en caso de error
45
Ejemplo de PHP
<HTML> <HEAD> <TITLE>Ttulo</TITLE> <?PHP // Incluir bibliotecas de funciones require ("$libdir/conecta.php"); require ("$libdir/fecha.php"); require ("$libdir/cadena.php"); require ("$libdir/globals.php"); ?>
<HTML> <HEAD> <TITLE>Ttulo</TITLE> </HEAD> <BODY> <?PHP include ("cabecera.html"); ?> // Cdigo HTML + PHP . . . <?PHP include ("pie.html"); ?> </BODY> </HTML>
46
47
var_dump()
Muestra el tipo y el valor de una variable til con los arrays
48
Dobles
Admite ms caracteres de escape, como \n, \r, \t, \\, \$, \ Permite la expansin de las variables print a vale $a; // muestra a vale 9
Funciones relacionadas
Creacin: list(), array() Ordenacin: asort(), arsort(), ksort(), rsort(), sort() Otras funciones: count(), next(), prev(), each()
50
Acceso:
$color[rojo] $medidas[0] El primer elemento es el 0
51
52
Variables en PHP
Nombres
Identificador precedido de un $ El identificador comienza por letra o subrayado, seguido de letras, nmeros o subrayado Sensibles a las maysculas Las variables siempre se asignan por valor En PHP4 existen asignaciones por referencia (&).
Predefinidas
Unas creadas por el servidor y otras por PHP $GLOBALS, $_SERVER, $_GET, $_POST, $_COOKIES, $_FILES, $_ENV, $_REQUEST, $_SESSION Lista completa: phpinfo()
53
Variables en PHP
mbito
Similar a C o a Perl Globales al fichero o locales a la funcin
Variables variables
Variables con un nombre no fijo
$a = "hola"; $$a = "mundo"; $a con valor hola $hola con valor mundo
Variables externas
Variables de los formularios HTML Cookies
54
Constantes en PHP
Nombre
No llevan $ como primer carcter
Definicin
Slo se pueden definir constantes de los tipos escalares (boolean, integer, double, string) Se utiliza la funcin define()
define (CONSTANTE, hola); print CONSTANTE;
Algunas predefinidas
PHP_VERSION: Versin de PHP PHP_OS: Sistema operativo del cliente TRUE: Verdadero FALSE: Falso
55
Constantes en PHP
<?php define("CONSTANTE", "hello world."); echo CONSTANTE; ?>
56
Expresiones en PHP
Cualquier cosa que pueda proporcionar un valor como consecuencia de su evaluacin
Variables Constantes Funciones
57
Operadores en PHP
58
Operadores en PHP
Algunos especiales
Operador de control de error @
Antepuesto a una expresin, evita cualquier mensaje de error que pueda ser generado por la expresin Captura el valor de error generado
Operadores de cadenas
concatenacin . (punto) asignacin con concatenacin .=
operador de identidad = = =
Igualdad en valor y tipo
59
Operadores en PHP
Ejemplo de uso del operador @
<?php $res = @mysql_query( select nombre from clientes") or die ("Error en la seleccin, '$php_errormsg'"); ?>
60
61
IF ELSE ELSE IF
Comportamiento como en C Las sentencias compuestas se encierran entre llaves
if (expresin_1) sentencia_1 else if (expresin_2) sentencia_2 ... else if (expresin_n) sentencia_n else sentencia_n+1
62
SWITCH
Comportamiento como en C la expresin puede ser integer, float o string
switch (expresin) { case valor_1: sentencia_1 break; case valor_n: sentencia_n break; default sentencia_n+1 }
63
Ejemplos con IF
if( $a > $b ) echo "a es mayor que b"; elseif( $a == $b ) echo "a es igual a b"; else echo "a es menor que b"; # UTILIZACION DE LLAVES if( $a >= $b ) { echo "a es mayor o igual que b"; $mayor = $a; } else { echo "a es menor que b"; $mayor = $b; }
64
Ejemplos con IF
<H1>Listado de ventas</H1> <? if( $orden == "fecha" ) ?> <P>Ordenadas por <B>fecha</B></P> <? elseif ( $orden == "producto" ) ?> <P>Ordenadas segn el <B>nombre</B> del producto</P> <? endif; ?>
65
WHILE
Comportamiento como en C while (expresin) sentencia
$a = 10; echo "Cuenta regresiva ...\n"; while($a > 0) { echo $a-- ."\n"; } echo "Cero !!!";
66
DO WHILE
Comportamiento como en C do
sentencia
while (expresin)
$a = 10; echo "Cuenta regresiva ...\n"; do { echo $a-- . "\n"; } while( $a > 0 ); echo "Cero !!!";
67
FOR
Comportamiento como en C
for (expresin1; expresin2; expresin3) sentencia # Cuadrados for($a=1;$a<=10;$a++) { echo El cuadrado de $a es; echo ($a * $a) . \n; }
68
Ejercicio
Desarrollar un programa en PHP que permita construir y mostrar una tabla de multiplicar. El nmero de tabla estar definido por una constante. Desplegar el programa para que sea accesible desde la web. Retocar la presentacin combinando PHP y HTML para lograr un buen aspecto.
69
FOREACH
Permite iterar sobre arrays Cada elemento del array supone una iteracin Sintaxis
foreach (expresin_array as $valor) sentencia foreach (expresin_array as $clave => $valor) sentencia
71
Salida
Valor: Valor: Clave: Clave: 101 51 rojo; Valor: 101 verde; Valor: 51
72
73
Funciones en PHP
Definicin por parte del usuario
Palabra reservada function
Declaracin
Antes de ser referenciadas
Paso de parmetros
Por defecto se pasan por valor Con PHP4 se puede forzar paso por referencia Se pueden emplear parmetros con argumentos por defecto
Deben ser siempre los ltimos en la funcin
74
Ejemplo de funciones
Definicin
function suma ($x, $y) { $s = $x + $y; return $s; } $a=1; $b=2; $c = suma ($a, $b); print $c;
75
Ejemplo de funciones
Paso por referencia
function incrementa (&$a) { $a = $a + 1; } $a=1; incrementa ($a); print $a; // Qu muestra?
76
Ejemplo de funciones
Argumentos por defecto
function mTitulo($titulo = "Sr."){ print "Estimado $titulo:\n"; } mTitulo (); mTitulo ("Prof.");
Salida
Estimado Sr.: Estimado Prof.:
77
Ejemplo de funciones
Argumentos por defecto
function hacerCafe($tipo="capuchino"){ return "he hecho un caf $tipo\n"; } echo hacerCafe(); echo hacerCafe(expreso);
78
Funciones en PHP
Devolucin de valores
Pueden devolver cualquier nmero de valores Hay que efectuar una correcta recepcin de estos valores
Ejemplo
function numeros(){ return array(0,1,2); } list ($cero, $uno, $dos) = numeros();
79
Funciones en PHP
Funciones variables
<?php function foo() { echo "En foo()<br>\n" } function bar ($arg ='') { echo "bar(); El argumento ha sido '$arg'.<br>\n" } $func = 'foo'; $func(); $func='bar'; $func('test'); ?>
80
Funciones en PHP
Bibliotecas de funciones
Algunos ejemplos:
Funciones de manipulacin de cadenas Funciones de fecha y hora Funciones de arrays Funciones de ficheros Funciones matemticas Funciones de bases de datos Funciones de red
Algunas bibliotecas requieren la instalacin de componentes adicionales Documentadas en manual de referencia de PHP 81
Ejercicios
Modificar el programa de la tabla de multiplicar para que la tabla que muestre se corresponda con el da actual Desarrollar un programa en PHP que, utilizando funciones definidas por el usuario y funciones de biblioteca, muestre la fecha actual en formato
Da 4 de julio de 2005
82
84
85
Fichero dos.php
<HTML> <BODY> <?PHP print (La edad es: $edad); ?> </BODY> </HTML>
86
Altenativa
Poner register_globals = on en php.ini No es recomendable por motivos de seguridad Sugerencia
$edad = $_REQUEST[edad];
87
SELECT
Simple / mltiple
TEXTAREA
88
89
90
<?PHP $n = count ($extras); for ($i=0; $i<$n; $i++) print ($extras[$i]<BR>\n); //foreach ($_REQUEST[extras] as $extra) //print ($extra<BR>\n); ?>
91
<?PHP if ($nueva) print ("Se va a aadir una ms"); //if ($_REQUEST [nueva]) //print ("Se va a aadir una nueva"); ?>
92
93
95
96
99
Ejercicio (I)
Disear y programar una pgina Web que contenga un formulario en el que se pidan datos sobre nombre, apellidos y direccin de email. Adems, mediante una lista de opciones se debe poder seleccionar un nmero.
100
Ejercicio (II)
El formulario se procesar mediante un programa en php, y mostrar una nueva pgina con los datos introducidos (la direccin de email como un link), y la tabla de multiplicar correspondiente al nmero seleccionado en la lista anterior.
101
Ejercicio (III)
<html><body> <?php print "Estimado Sr/a. " . $nombre . " print $apellido1 . " " . $apellido2; print "<br>"; print "<a href=mailto:\"" . $email . "\"> print $email . "</a>"; print "<br><br>"; print "Ha elegido la tabla del " . $tabla; print "<br><br>"; for ($a=1; $a<=10; $a++) echo "$tabla * $a = " . ($tabla * $a) . "<br>"; ?> </body> </html>
102
Ejercicio
Disear una pgina Web que contenga un formulario que incorpore todos los tipos de elementos de entrada de informacin presentados anteriormente (excepto BUTTON y FILE). Construir un programa php que acceda a los datos de estos elementos y genere una pgina web que los muestre.
103
Formularios y PHP
Esquema de programacin
Utilizacin de un nico programa Muestra el formulario o lo procesa dependiendo de si ha sido enviado o no Ventajas
Esto disminuye el nmero de ficheros Permite validar los datos del formulario en el propio formulario
si no
Mostrar formulario
Fin
104
Formularios y PHP
Cmo determinar si se ha enviado el formulario o no?
Consultar la variable correspondiente al botn de envo
<INPUT TYPE="SUBMIT" NAME="enviar VALUE="procesar">
Consulta
if (isset($enviar)) ... if ($enviar == procesar) ...
105
Ejercicio
Construir un programa php que permita mostrar y procesar un formulario como el siguiente
106
Envo de archivos
Consideraciones
Utilizacin de FILE Debe tener el atributo
ENCTYPE="multipart/form-data
Envo de archivos
Limitacin de tamao en php.ini
;;;;;;;;;;;;;;;; ; File Uploads ; ;;;;;;;;;;;;;;;; ; Whether to allow HTTP file uploads. file_uploads = On ; Temporary directory for HTTP uploaded files (will use ; system default if not specified). ;upload_tmp_dir = ; Maximum allowed size for uploaded files. upload_max_filesize = 2M
108
Envo de archivos
Limitacin de tamao en el formulario <INPUT TYPE=HIDDEN NAME=MAX_FILE_SIZE VALUE='102400 > <INPUT TYPE=FILE NAME=archivo">
109
Envo de archivos
Ms informacin
Acceso a la variable $_FILES o $HTTP_POST_FILES $_FILES[nombre_archivo']['name']
Nombre original del archivo en el cliente
$_FILES[' nombre_archivo]['error']
Cdigo de error
110
Envo de archivos
Procedimiento general SI se ha enviado correctamente el archivo Asignar un nombre Mover a su ubicacin definitiva SI NO Mostrar un mensaje de error FIN
111
Envo de archivos
Ejemplo de procedimiento
if (is_uploaded_file ($_FILES['imagen']['tmp_name'])) { $nombreDirectorio = "img/"; $idUnico = time(); $nombreFichero = $idUnico . "-" . $_FILES['imagen']['name']; move_uploaded_file ( $_FILES['imagen']['tmp_name'], $nombreDirectorio . $nombreFichero ); } else print ("No se ha podido subir el archivo\n");
112
Ejercicio
Construir un programa php que permita mostrar y procesar un formulario mediante el que se pueda gestionar una lista de archivos de imgenes (gif o jpg). El programa debe permitir:
Mostrar un formulario para aadir un nuevo archivo junto con un texto Procesar el envo
Asignacin de nombre en servidor Localizacin Presentacin de la imagen y del texto asociado
113
CONEXIONES A BBDD
Estados de una conexin
Funcin connection_status() Normal (0) Aborted (1) Timeout (2)
set_time_limit()
118
121
Algo de SQL
CREATE TABLE tabla (campo1 tipo (tamao), campo2 tipo (tamao), ..., ) SELECT Campos FROM Tabla; SELECT Campos FROM tabla WHERE condicin; INSERT INTO Tabla (campo1, campo2, .., campoN) VALUES (valor1, valor2, ..., valorN); DELETE Tabla.* FROM Tabla WHERE condicin; UPDATE Tabla SET Campo1 = Valor1, Campo2 = Valor2, ... CampoN = ValorN WHERE condicin;
122
123
Utilizacin de sesiones
Justificacin
Mantenimiento del estado de una conexin entre distintas pginas Ejemplos
aplicaciones personalizadas carrito de la compra control de acceso
Utilizacin de sesiones
sesin
Variable_n
Valor_n
132
Utilizacin de sesiones
Funciones de PHP
session_start ()
Inicializa una sesin Le asigna un identificador de sesin nico Si la sesin ya est iniciada, carga todas las variables de sesin
session_register (variable)
Registra una variable de sesin
session_unregister (variable)
Elimina una variable de sesin
session_is_registered (variable)
Comprueba si una variable est registrada Devuelve true en caso afirmativo y false en caso contrario
session_destroy ()
Cierra una sesin
133
Utilizacin de sesiones
Procedimiento general
Todas las pginas asociadas a una sesin deben realizar una llamada a session_start() para cargar las variables de dicha sesin La llamada debe estar colocada antes de cualquier cdigo HTML Conviene llamar a session_destroy() para cerrar la sesin y liberar recursos
134
Utilizacin de sesiones
Autenticacin de usuarios
A nivel de servidor (Apache) A nivel de aplicacin (PHP + base de datos)
Mayor flexibilidad Tabla de usuarios
Nombre y contrasea encriptada $salt = substr ($usuario, 0, 2); $clave_crypt = crypt ($clave, $salt);
Autenticacin
Registro de variable
135
Utilizacin de sesiones
Autenticacin de usuarios
136
Cookies
Cookies HTML
Cualquier cookie que se enva a un cliente se convierte en un variable PHP La funcin SetCookie() se utiliza para asignar cookies La funcin debe ser llamada antes de empezar a crear la pgina
Forma parte de la cabecera
137
Seguridad
Introduccin
Importante
Utilizar versiones actualizadas de Apache y PHP
Variables globales
Creacin automtica de variables globales
Activacin de register_globals en php.ini Datos de los formularios y de las cookies
Problemas
Generacin incontrolada de variables Adquisicin de privilegios de superusuario como consecuencia de alguna variable
Soluciones
register_globals = off Inicializacin de variables antes de usarlas Orden en la creacin de variables globales
140
Variables globales
Inicializacin de variables
Utilizacin de la directiva error_reporting=E_ALL en php.ini
Se genera un aviso cuando se usa una variable que no ha sido previamente inicializada
141
Variables globales
Orden en la generacin de variables
Generacin de variables
Entorno (E) Cookies (C) Servidor (S) GET (G) y POST (P)
Permitir la creacin de variables globales desde parmetros GET y POST y desde cookies es potencialmente peligroso. Un posible valor para variables_order que evita esto es ES Para acceder a los parmetros de los formularios y a las cookies se deben utilizar los arrays globales $_REQUEST, $_GET, $_POST y $_COOKIES
142
Se puede desactivar la funcionalidad de acceso a archivos remotos con la siguiente directiva en php.ini
allow_url_fopen = off
144
Envo de archivos
Consideraciones
El usuario puede enviar cualquier archivo al servidor que luego podra ejecutar Recomendacin
Evitar utilizar el nombre enviado por el navegador Generar un nombre nico
Bibliotecas
Consideraciones
Conviene almacenar los archivos de bibliotecas de funciones fuera de la raz del directorio que contiene los documentos a publicar en web
Evitamos que puedan ser accedidos por su URL Indicar a PHP la ubicacin de los archivos indicando la ruta completa en los include() y require() o bien mediante la directiva include_path en php.ini
Esto es particularmente importante cuando en el cdigo de la biblioteca aparecen passwords, como es el caso de las funciones de conexin con bases de datos
146
Bibliotecas
Consideraciones
Conviene almacenar los archivos de bibliotecas de funciones fuera de la raz del directorio que contiene los documentos a publicar en web
Evitamos que puedan ser accedidos por su URL Indicar a PHP la ubicacin de los archivos indicando la ruta completa en los include() y require() o bien mediante la directiva include_path en php.ini
Esto es particularmente importante cuando en el cdigo de la biblioteca aparecen passwords, como es el caso de las funciones de conexin con bases de datos
147
Formularios
Recomendaciones
Validar todos los datos provenientes de formularios para asegurarse de que los valores recibidos son los esperados Cualquier informacin del exterior debe considerarse como posiblemente contaminada y debe ser verificada antes de ser utilizada Por ejemplo una variable puede contener cdigo HTML
La funcin htmlspecialchars() impide que se interpreten los caracteres especiales de HTML (<, >, &)
148
Comentarios finales
Recomendaciones generales
Estudiar los requerimientos de las aplicaciones Configurar y ajustar adecuadamente PHP a travs del archivo php.ini Seguir unas buenas prcticas en la programacin
149
Referencias
Referencias bibliogrficas
http://www.php.net http://www.apache.org http://www.mysql.org http://www.lsi.us.es/cursos/cursophp/ http://w3.one.net/~jhoffman/sqltut.htm http://www.wtwebwizard.com/tutorials/mysql http://www.otri.us.es/php-mysql/manual/manual_pag_01.htm http://www.programacion.net/cursos/php/mysql.htm http://www.programacion.net/cursos/php/access.htm http://www.pageimpact.com/soporte_online/php.php3 http://www.angelfire.com/al/acs/bd.html http://www.find-script.com/scripts/PHP3/ http://wwwdi.ujaen.es/php/manual/manual.html http://geneura.ugr.es
151