php: php hypertext pre-processorlaurel.datsi.fi.upm.es/.../asignaturas/daw/daw-php.pdfintroducción...
TRANSCRIPT
Introducción al lenguaje PHP Primeros pasos con PHP Manejo de arrays Programación avanzada en PHP
PHP: PHP Hypertext Pre-processorDesarrollo de Aplicaciones Web
Antonio LaTorre <[email protected]>
Universidad Politécnica de Madrid
2014/2015
PHP: PHP Hypertext Pre-processor 1
Introducción al lenguaje PHP Primeros pasos con PHP Manejo de arrays Programación avanzada en PHP
Contenidos
1 Introducción al lenguaje PHP
2 Primeros pasos con PHP
3 Manejo de arrays
4 Programación avanzada en PHPFormularios, Cookies y SesionesAcceso a ficheros
PHP: PHP Hypertext Pre-processor 2
Introducción al lenguaje PHP Primeros pasos con PHP Manejo de arrays Programación avanzada en PHP
1 Introducción al lenguaje PHP
2 Primeros pasos con PHP
3 Manejo de arrays
4 Programación avanzada en PHP
PHP: PHP Hypertext Pre-processor 3
Introducción al lenguaje PHP Primeros pasos con PHP Manejo de arrays Programación avanzada en PHP
Ejecución de Programas Web
Páginas dinámicas en cliente• El cliente recibe un pequeño programa que interacciona
con el navegador del usuario• Útil pero tiene algunas limitaciones• Tecnologías tales como JavaScript
Páginas dinámicas de servidor• El cliente recibe el resultado de un programa que ejecuta
el servidor web• Menos interactivo pero más potente
• Soluciones básicas: CGI• Soluciones más potentes: ASP, JSP, PHP
PHP: PHP Hypertext Pre-processor 4
Introducción al lenguaje PHP Primeros pasos con PHP Manejo de arrays Programación avanzada en PHP
Ejecución de Programas Web
PHP: PHP Hypertext Pre-processor 5
Introducción al lenguaje PHP Primeros pasos con PHP Manejo de arrays Programación avanzada en PHP
PHP
PHP es...• Las siglas de PHP Hypertext Pre-processor• Un lenguaje interpretado diseñado expresamente para
crear páginas dinámicas en el servidor• Una de las alternativas tecnológicas más usadas en el
desarrollo de aplicaciones en servidor• Un estándar de código libre
PHP: PHP Hypertext Pre-processor 6
Introducción al lenguaje PHP Primeros pasos con PHP Manejo de arrays Programación avanzada en PHP
PHP
Características de PHP• El código PHP lo procesa el servidor y el cliente no lo ve
(ve su resultado)• Permite el acceso sencillo a muchas bases de datos• Tiene muchas bibliotecas de utilidades y muchos recursos
en la web• Permite intercalar etiquetas PHP y HTML (cuidado)• Se puede usar para programar otras cosas
PHP: PHP Hypertext Pre-processor 7
Introducción al lenguaje PHP Primeros pasos con PHP Manejo de arrays Programación avanzada en PHP
Historia de PHP
Versiones de PHP• Versión original de
Rasmus Lerdorf (1994)• PHP 3 (1998)• Zend Engine (1999)• PHP 4 (2000)• PHP 5 (2004)• PHP 6 (nunca liberado)• PHP 7 (octubre 2015)
Relevancia de PHP• TIOBE Programming
Community Index loindexa como 6o
lenguaje deprogramación másusado (abril 2015)
• El primero entre loslenguajes orientadosúnicamente a web
PHP: PHP Hypertext Pre-processor 8
Introducción al lenguaje PHP Primeros pasos con PHP Manejo de arrays Programación avanzada en PHP
Herramientas para PHP
RecursosExisten numerosos recursos PHP disponibles
Editores Específicos• PHP designer• PhpStorm• Rapid PHP Editor
Depuradores• PHP DBG• Xdebug• APD
Extensiones y bibliotecas• http://pear.php.net( )• https://packagist.org( )• http://pecl.php.net( )
Ayuda• http://www.php.net( )
PHP: PHP Hypertext Pre-processor 9
Introducción al lenguaje PHP Primeros pasos con PHP Manejo de arrays Programación avanzada en PHP
1 Introducción al lenguaje PHP
2 Primeros pasos con PHP
3 Manejo de arrays
4 Programación avanzada en PHP
PHP: PHP Hypertext Pre-processor 10
Introducción al lenguaje PHP Primeros pasos con PHP Manejo de arrays Programación avanzada en PHP
Instalación de un servidor web con PHP
• Múltiples soluciones (LAMP, WAMP, etc.)• Normalmente, suelen incluir un servidor Apache, una
BBDD MySQL (MariaDB) y el intérprete de PHP• En Linux, cada distribución proporciona paquetes para
cada uno de los componentes• En Windows existen multitud de alternativas
• XAMPP• WampServer• VertrigoServ• EasyPHP
PHP: PHP Hypertext Pre-processor 11
Introducción al lenguaje PHP Primeros pasos con PHP Manejo de arrays Programación avanzada en PHP
Ejemplo PHP
Hola Mundo
<BODY><B>Esto es HTML</B><BR><?phpecho "<B>Hola Mundo</B><BR>\n";echo "Hoy es: ";echo date("d/m/Y");echo ", ¡que disfrutes del día!\n";?></BODY>
PHP: PHP Hypertext Pre-processor 12
Introducción al lenguaje PHP Primeros pasos con PHP Manejo de arrays Programación avanzada en PHP
Ejemplo PHP
Instalación en el servidor• El fichero debe instalarse en la
carpeta www de la instalación.• Para ver su ejecución se debe
consultar con el navegador ladirección:
http://localhost/hola-mundo.php( )
PHP: PHP Hypertext Pre-processor 13
Introducción al lenguaje PHP Primeros pasos con PHP Manejo de arrays Programación avanzada en PHP
Ejemplo PHP
Hola Mundo (lo que ve el cliente)
<BODY><B>Esto es HTML</B><BR><B>Hola Mundo</B><BR>Hoy es: 19/01/2007, ¡qué disfrutes del día!</BODY>
PHP: PHP Hypertext Pre-processor 14
Introducción al lenguaje PHP Primeros pasos con PHP Manejo de arrays Programación avanzada en PHP
Sintaxis básica de PHP I
Sintaxis similar a la de C (con algunas particularidades...)• Existen tres tipos de comentarios: una línea (// y #) y
múltiples líneas (/* */)• Todas las variables en PHP comienzan por un dólar ($) y
se declaran con la primera asignación• El tipado de variables es débil: no es necesario
especificarlo y el tipo de una variable puede cambiar• Las cadenas de caracteres pueden delimitarse usando
comillas dobles (expanden las variables) o comillassimples (no las expanden)
• Saltos de línea en el código PHP vs. saltos de línea HTML(<BR>)
PHP: PHP Hypertext Pre-processor 15
Introducción al lenguaje PHP Primeros pasos con PHP Manejo de arrays Programación avanzada en PHP
Sintaxis básica de PHP II
Gestión de variables• Como los tipos son dinámicos, podemos preguntar por el
tipo de una variable: is_int(), is_float(),is_string(), gettype()
• Podemos convertir entre tipos de variables haciendocasting: (string), (boolean), (int), (float)
• O preguntar si una variable se encuentra definida o inclusoeliminarla: isset() y unset()
• Si una variable no va a cambiar de valor podemos definirlacomo una constante: define(“nombre”, valor) y usocomo variable (sin el $)
• Declaración de referencias (aliases): $alias=&$var
PHP: PHP Hypertext Pre-processor 16
Introducción al lenguaje PHP Primeros pasos con PHP Manejo de arrays Programación avanzada en PHP
Sintaxis básica de PHP III
Operadores• Operadores aritméticos estándar: suma(+), resta (-),
división (/), multiplicación (*) y módulo ( %)• Todos los operadores aritméticos se pueden combinar con
una asignación: +=, -=, etc.• Operadores de pre/post incremento (++) y decremento (–)• Operadores lógicos: and (&&), or (||), xor (xor), negación
lógica (!).• Operadores de igualdad y equivalencia: ==, !=, ===, !==• Operadores de comparación: <, >, >=, <=• Operador de concatenación de cadenas (también con
enteros): .
PHP: PHP Hypertext Pre-processor 17
Introducción al lenguaje PHP Primeros pasos con PHP Manejo de arrays Programación avanzada en PHP
Sintaxis básica de PHP IV
Estructuras de control• PHP comparte la mayoría de las estructuras de control
típicas de cualquier lenguaje de control estructurado:• Control de flujo: if-then-else, switch• Bucles: for, while, do-while• etc.
PHP: PHP Hypertext Pre-processor 18
Introducción al lenguaje PHP Primeros pasos con PHP Manejo de arrays Programación avanzada en PHP
Sintaxis básica de PHP V
if-then-else
if($a<0)echo "negativo";
elseif($a<10)echo "entre 0 y 10";
elseif($a<100)echo "entre 10 y 100";
elseif($a<1000)echo "entre 100 y 1000";
elseecho "un montón";
PHP: PHP Hypertext Pre-processor 19
Introducción al lenguaje PHP Primeros pasos con PHP Manejo de arrays Programación avanzada en PHP
Sintaxis básica de PHP VI
switch
switch($pais){
case "España":echo "español";break;
case "Italia":echo "italiano";break;
default:echo "otra nacionalidad";
}
PHP: PHP Hypertext Pre-processor 20
Introducción al lenguaje PHP Primeros pasos con PHP Manejo de arrays Programación avanzada en PHP
Sintaxis básica de PHP VII
for(init;cond;inc)
for($header=1;$header<4;$header++)echo "<H$header>Cabecera $header</H$header><BR>\n";
while
$header=1;while($header<4){
echo "<H$header>Cabecera $header</H$header><BR>\n";$header++;
}
PHP: PHP Hypertext Pre-processor 21
Introducción al lenguaje PHP Primeros pasos con PHP Manejo de arrays Programación avanzada en PHP
Sintaxis básica de PHP VIII
do-while
$indice=1;do{
echo "Indice $indice<BR>\n";$indice++;
}while($indice<4);
PHP: PHP Hypertext Pre-processor 22
Introducción al lenguaje PHP Primeros pasos con PHP Manejo de arrays Programación avanzada en PHP
Sintaxis básica de PHP IX
Declaración de funciones• PHP soporta el uso de funciones, que reciben argumentos
y devuelven un valor de retorno• A los argumentos podemos asignarles valores por defecto• E incluso podemos declarar funciones con un número
variable de argumentos: func_num_args() yfunc_get_args()
• Las funciones pueden recibir argumentos pasados porreferencia
• Y pueden acceder a variables globales (global y$GLOBALS)
PHP: PHP Hypertext Pre-processor 23
Introducción al lenguaje PHP Primeros pasos con PHP Manejo de arrays Programación avanzada en PHP
Sintaxis básica de PHP X
Ejemplo: función que devuelve un valor
function por_dos($num){
return 2*$num;}por_dos(33);
Ejemplo: paso de argumento por referencia
function incrementa(& $num){
$num++;}$x=2;incrementa($x);echo $x;
PHP: PHP Hypertext Pre-processor 24
Introducción al lenguaje PHP Primeros pasos con PHP Manejo de arrays Programación avanzada en PHP
Sintaxis básica de PHP XI
Ejemplo: número de argumentos variable
function suma(){
if(func_num_args()<1)return "Al menos un argumento";
$args=func_get_args();$cnt=0;foreach($args as $n)
$cnt+=$n;return $cnt;
}suma(10,21,32,43);suma(1,0.23,11);
PHP: PHP Hypertext Pre-processor 25
Introducción al lenguaje PHP Primeros pasos con PHP Manejo de arrays Programación avanzada en PHP
Sintaxis básica de PHP XII
Declaración de funciones en ficheros distintos• Si una función se usa en distintos puntos de una
aplicación podemos definirla en un fichero aparte eincluirla desde aquéllos donde se use
• Podemos usar dos funciones de PHP para cargar estasfunciones:
• include(): Si el fichero no existe da un aviso• require(): Si el fichero no existe da un error
• La inclusión de ficheros sería análoga a copiar dichofichero donde aparezca la llamada de inclusión
PHP: PHP Hypertext Pre-processor 26
Introducción al lenguaje PHP Primeros pasos con PHP Manejo de arrays Programación avanzada en PHP
1 Introducción al lenguaje PHP
2 Primeros pasos con PHP
3 Manejo de arrays
4 Programación avanzada en PHP
PHP: PHP Hypertext Pre-processor 27
Introducción al lenguaje PHP Primeros pasos con PHP Manejo de arrays Programación avanzada en PHP
Introducción IEstructuras Compuestas
Estructuras de datos compuestas• Las estructuras de datos compuestas permiten almacenar
varios elementos de diferentes tipos (simples ocompuestos) de manera estructurada
• PHP dispone de un tipo de dato compuesto muy potente:el array
PHP: PHP Hypertext Pre-processor 28
Introducción al lenguaje PHP Primeros pasos con PHP Manejo de arrays Programación avanzada en PHP
Introducción IIEstructuras Compuestas
Array• Esta estructura es la análoga a 3 ó 4 tipos compuestos en
otros lenguajes.• Hay varias formas de crear un array• Las más sencillas son:
• array(): Crea un array vacío• array(elementos...): Crea un array y lo inicializa con
tantos elementos como se le pasen.
• Los arrays también se pueden inicializar elemento aelemento.
PHP: PHP Hypertext Pre-processor 29
Introducción al lenguaje PHP Primeros pasos con PHP Manejo de arrays Programación avanzada en PHP
Arrays IEstructuras Compuestas
Inicialización de arrays
$a = array(); // Array vacío$b = array("Cero", "Uno", "Dos");$b[3]="Tres";$c[0]=true;$c[1]=false;$c[2]=false;$c[3]=true;// Imprime "Cero Uno Dos Tres"echo $b[0]." ".$b[1]." ".$b[2]." ".$b[3];echo $b; // Ojo: imprime "Array"
PHP: PHP Hypertext Pre-processor 30
Introducción al lenguaje PHP Primeros pasos con PHP Manejo de arrays Programación avanzada en PHP
Arrays IIEstructuras Compuestas
Tipos de los datos de un array• Los valores de los elementos de un array pueden ser de
distintos tipos.• Un array puede ser elemento de otro array (una matriz).
Tipos de los datos de un array
$val[0]="doce";$val[1]=34;$val[2]=0.00211;$val[3]=true;$val[4]=array(10,20,30);echo "{$val[4][1]}";
PHP: PHP Hypertext Pre-processor 31
Introducción al lenguaje PHP Primeros pasos con PHP Manejo de arrays Programación avanzada en PHP
Arrays IIIEstructuras Compuestas
Índices de un array• Un elemento de un array se puede eliminar• Esto implica que los arrays no son necesariamente
consecutivos.
Índices de un array
$foo=array(11,22,33,44);unset($foo[2]); // 33 desaparece// Pero $foo[3] sigue siendo 44$baa[0]="Adiós";$baa[12]="mundo";$baa[30]="cruel";$baa[991]="!";
PHP: PHP Hypertext Pre-processor 32
Introducción al lenguaje PHP Primeros pasos con PHP Manejo de arrays Programación avanzada en PHP
Arrays IVEstructuras Compuestas
Índices de un array• Para insertar un elemento al final de un array se puede
usar "[]"• Esto asocia al elemento el siguiente valor de la clave
numérica más alta del array
Índices de un array
$baa[991]="!";$baa[]="."; // Equivale a $baa[992];
PHP: PHP Hypertext Pre-processor 33
Introducción al lenguaje PHP Primeros pasos con PHP Manejo de arrays Programación avanzada en PHP
Arrays VEstructuras Compuestas
Arrays asociativos• Las claves (índices) de los arrays también pueden ser
cadenas de caracteres.• Un array puede tener claves numéricas y de cadena a la
vez
Arrays asociativos
$persona["Nombre"] ="Pepe";$persona["Apellido"]="Pótamo";$persona["Edad"] =70;$persona[1] =true;
PHP: PHP Hypertext Pre-processor 34
Introducción al lenguaje PHP Primeros pasos con PHP Manejo de arrays Programación avanzada en PHP
Arrays VIEstructuras Compuestas
Inicializando arrays asociativos• Un array asociativo se puede inicializar indicando claves y
valores a la vez
Inicializando arrays asociativos
$v=array("a"=>1, "b"=>2);$data=array("Edad" => 25,
"Premio" => true,"Importe"=> 239.50);
PHP: PHP Hypertext Pre-processor 35
Introducción al lenguaje PHP Primeros pasos con PHP Manejo de arrays Programación avanzada en PHP
Arrays VIIEstructuras Compuestas
Matrices• Una matriz no es más que un array cuyos elementos son
arrays• Como no hace falta declararlas se pueden inicializar sobre
la marcha
Matrices
$matriz=array();$matriz[0]=array("A","B");$matriz[1]=array("C","D");$cnt=0;for($i=0;$i<5;$i++)
for($j=0;$j<5;$j++)$M[$i][$j]=$cnt++;
PHP: PHP Hypertext Pre-processor 36
Introducción al lenguaje PHP Primeros pasos con PHP Manejo de arrays Programación avanzada en PHP
Arrays VIIIEstructuras Compuestas
Imprimiendo un array• Al hacer un echo sobre una variable array no se obtiene
su contenido• La función print_r() permite imprimir un array• El resultado está formateado con "\n", no con < BR >
Imprimiendo un array
$m=array("A"=>11, "B"=>33);echo $m; // Sale "Array"echo "<pre>";print_r($m);echo "</pre>";
PHP: PHP Hypertext Pre-processor 37
Introducción al lenguaje PHP Primeros pasos con PHP Manejo de arrays Programación avanzada en PHP
Arrays IXEstructuras Compuestas
Iteración sobre arrays• count() devuelve el número de elementos del array• Recorrer con un for desde 0 hasta ese valor puede
causar problemas• Hay que recordar que los elementos pueden no ser
consecutivos
Iteración sobre arrays
$num[0]=100;$num[3]=200;for($i=0;$i<count($num);$i++) // 0 y 1
echo $num[$i]; // No saldrá $num[3]
PHP: PHP Hypertext Pre-processor 38
Introducción al lenguaje PHP Primeros pasos con PHP Manejo de arrays Programación avanzada en PHP
Arrays XEstructuras Compuestas
Iteración sobre arrays• Existe un bucle especial para iterar sobre los arrays• foreach recorre uno a uno todos los elementos del array• Este bucle es independiente de las claves
Iteración sobre arrays
$num[0]=100;$num[3]=200;foreach($num as $k => $n) // $n es el elemento
echo $n; // 100, 200
PHP: PHP Hypertext Pre-processor 39
Introducción al lenguaje PHP Primeros pasos con PHP Manejo de arrays Programación avanzada en PHP
Arrays XIEstructuras Compuestas
Iteración sobre arrays• Existe otra forma de iterar sobre arrays• Para ello se usan las funciones:
• reset(): Se pone al comienzo del array• end(): Se pone al final del array• current(): Te da el elemento actual• next(): Avanza y te da el elemento siguiente• prev(): Retrocede y te da el elemento anterior
• Si no hay ningún elemento, estas funciones devuelvenfalse
PHP: PHP Hypertext Pre-processor 40
Introducción al lenguaje PHP Primeros pasos con PHP Manejo de arrays Programación avanzada en PHP
Arrays XIIEstructuras Compuestas
Iteración sobre arrays• Existe otra función, each(), análoga a next()
• Esta función devuelve un par (clave, elemento)• Su valor hay que recogerlo con un list
Iteración sobre arrays
$persona["Nombre"] ="Pepe";$persona["Apellido"]="Pótamo";$persona["Edad"] =70;reset($persona); // Comenzamoswhile(list($clave,$val)=each($persona))
echo "$clave : $val<BR>\n";
PHP: PHP Hypertext Pre-processor 41
Introducción al lenguaje PHP Primeros pasos con PHP Manejo de arrays Programación avanzada en PHP
Arrays XIIIEstructuras Compuestas
Funciones sobre arrays• Un array puede valer para implementar pilas o colas• Las funciones usadas serían:
• array_push(): Añade al final (como [])• array_pop(): Elimina el último elemento y da su valor• array_shift(): Elimina el primer elemento
(reordenando el resto)• array_unshift(): Añade un elemento al principio y
desplaza (reordenando) el resto
PHP: PHP Hypertext Pre-processor 42
Introducción al lenguaje PHP Primeros pasos con PHP Manejo de arrays Programación avanzada en PHP
Arrays XIVEstructuras Compuestas
Pilas y colas
$jobs=array("cargar","operar","guardar");array_unshift($jobs,"preparar");array_push($jobs,"probar","apagar");while($j=array_shift($jobs))
echo "Ejecutando: $j<BR>\n";
PHP: PHP Hypertext Pre-processor 43
Introducción al lenguaje PHP Primeros pasos con PHP Manejo de arrays Programación avanzada en PHP
Arrays XVEstructuras Compuestas
Expansión de arrays• Existen dos funciones para convertir cadenas de
caracteres en arrays (y viceversa):• explode(): Parte una cadena en subcadenas y las mete
en un array• implode(): Concatena todos los elementos de un array
en una misma cadena
• Estas funciones toman como argumento un separador
PHP: PHP Hypertext Pre-processor 44
Introducción al lenguaje PHP Primeros pasos con PHP Manejo de arrays Programación avanzada en PHP
Arrays XVIEstructuras Compuestas
Expansión de arrays
$texto="En un lugar de la Mancha";// Lista de palabras$palabras=explode(" ", $texto);// Nuevo texto$texto2=implode("_", $palabras);
PHP: PHP Hypertext Pre-processor 45
Introducción al lenguaje PHP Primeros pasos con PHP Manejo de arrays Programación avanzada en PHP
Arrays XVIIEstructuras Compuestas
Ordenación de arrays• Dos arrays no son equivalentes (===), pero sí iguales (==),
si el orden de sus elementos no es el mismo• Para ordenar arrays se usan las siguientes funciones:
• sort(): Mantiene el orden de las claves y ordena loselementos
• asort(): Ordena los elementos pero cada cual conservasu clave.
• ksort(): Ordena por clave, pero cada cual mantiene suelemento asociado
• La ordenación por defecto es ascendente• Existen las funciones análogas para ordenación inversa:rsort(), arsort() y krsort()
PHP: PHP Hypertext Pre-processor 46
Introducción al lenguaje PHP Primeros pasos con PHP Manejo de arrays Programación avanzada en PHP
Arrays XVIIIEstructuras Compuestas
Ordenación de arrays
$alumnos=array(210 => "Dolores Fuertes",115 => "Walter O’Filia",523 => "Armando Guerra",410 => "Julian Dopetas");
// Por claveksort($alumnos);// Por nombreasort($alumnos);// Rompe asociaciónsort($alumnos);
PHP: PHP Hypertext Pre-processor 47
Introducción al lenguaje PHP Primeros pasos con PHP Manejo de arrays Programación avanzada en PHP
1 Introducción al lenguaje PHP
2 Primeros pasos con PHP
3 Manejo de arrays
4 Programación avanzada en PHPFormularios, Cookies y SesionesAcceso a ficheros
PHP: PHP Hypertext Pre-processor 48
Introducción al lenguaje PHP Primeros pasos con PHP Manejo de arrays Programación avanzada en PHP
Procesamiento de Formularios IFormularios
• Dos mecanismos para enviar información medianteformularios
• GET• POST
• Las variables son “parseadas” automáticamente por elservidor
• La información puede ser accedida a través de variosarrays:
• Por medio de los arrays: $_HTTP_GET_VARS y$_HTTP_POST_VARS (en desuso)
• Por medio de las variables superglobales: $_GET, $_POST,$_REQUEST
PHP: PHP Hypertext Pre-processor 49
Introducción al lenguaje PHP Primeros pasos con PHP Manejo de arrays Programación avanzada en PHP
Procesamiento de Formularios IIFormularios
Método GET
$patron = $_GET[’patron’]; /* Forma recomendada */$patron3 = $HTTP_GET_VARS[’patron’]; /* En desuso */$patron4 = $_REQUEST[’patron’]; /* Otra opción */
Método POST
$texto = $_POST[’texto’]; /* Forma recomendada */$texto3 = $HTTP_POST_VARS[’texto’]; /* En desuso */$texto4 = $_REQUEST[’texto’]; /* Otra opción */
PHP: PHP Hypertext Pre-processor 50
Introducción al lenguaje PHP Primeros pasos con PHP Manejo de arrays Programación avanzada en PHP
Procesamiento de Formularios IIIFormularios
formulario.html
<form method="POST" action="suma.php"><input type="text" size="10" name="A" value=""><input type="text" size="10" name="B" value=""><br><input type="submit" value="Sumar"></form>
suma.php
<?php// Recibe parámetros$A = isset($_REQUEST[’A’]) ? $_REQUEST[’A’] : 0;$B = isset($_REQUEST[’B’]) ? $_REQUEST[’B’] : 0;?>
PHP: PHP Hypertext Pre-processor 51
Introducción al lenguaje PHP Primeros pasos con PHP Manejo de arrays Programación avanzada en PHP
Envío de archivos al servidor IFormularios
• El formulario debe tener un tipo de codificación“multipart/form-data”
• La información del archivo se guarda en la variablesuperglobal $_FILES
• $_FILES es un array asociativo que contiene:
• ’name’: nombre original del archivo• ’size’: tamaño en bytes• ’type’: tipo MIME del archivo, si el navegador lo proporciona• ’tmp_name’: nombre temporal de la copia del archivo en el
servidor• ’error’: código del error sucedido, si procede
PHP: PHP Hypertext Pre-processor 52
Introducción al lenguaje PHP Primeros pasos con PHP Manejo de arrays Programación avanzada en PHP
Envío de archivos al servidor IIFormularios
Ejemplo de Formulario
<FORM ENCTYPE="multipart/form-data" METHOD="POST"><H2>Escoja el archivo que desea enviar:</H2><INPUT NAME="fich" TYPE="file"><BR><INPUT TYPE="submit" VALUE="Enviar"></FORM>
PHP: PHP Hypertext Pre-processor 53
Introducción al lenguaje PHP Primeros pasos con PHP Manejo de arrays Programación avanzada en PHP
Envío de archivos al servidor IIIFormularios
Procesamiento de los datos del archivo
} else {echo "Los datos relativos al archivo suministrado
son:<BR>";echo "Nombre original: ".$_FILES[’fich’][’name’]."<BR>";echo "Tipo de archivo: ".$_FILES[’fich’][’type’]."<BR>";echo "Tamaño del fich: ".$_FILES[’fich’][’size’]."<BR>";echo "Nombre temporal:
".$_FILES[’fich’][’tmp_name’]."<BR>";
if (!empty($_FILES[’fich’][’error’]))echo "Error ocurrido:
".$_FILES[’fich’][’error’]."<BR>";}
PHP: PHP Hypertext Pre-processor 54
Introducción al lenguaje PHP Primeros pasos con PHP Manejo de arrays Programación avanzada en PHP
Funcionamiento básico y especificación ICookies
• (Breve) Información de estado almacenada por elnavegador del cliente
• Estado válido únicamente para un conjunto de URLs(dominio)
• Esta información es enviada por el navegador enposteriores visitas al mismo servidor
• Algunos ejemplos de aplicación:• Carritos de la compra en tiendas virtuales• Identificación de usuarios• Almacenamiento de preferencias de usuario para la
visualización de una página web (por ejemplo Google)
• Deben ser enviadas antes de que el script produzcaninguna otra salida
PHP: PHP Hypertext Pre-processor 55
Introducción al lenguaje PHP Primeros pasos con PHP Manejo de arrays Programación avanzada en PHP
Funcionamiento básico y especificación IICookies
• El formato de una cookie es:
• ’name’: nombre de la cookie• ’value’: valor de la cookie• ’expire’: hora de expiración de la cookie (número de
segundos desde el 1 de enero de 1970)• ’path’: ruta en el servidor en el que estará disponible la
cookie• ’domain’: dominio en el que la cookie estará disponible• ’secure’: decide si la cookie ha de ser enviada mediante
conexión segura
PHP: PHP Hypertext Pre-processor 56
Introducción al lenguaje PHP Primeros pasos con PHP Manejo de arrays Programación avanzada en PHP
Uso de cookies en PHPCookies
• Sintaxis de la función setcookie
setcookie (name,value,expire,path,domain,secure);
Ejemplo de manejo de cookie
<?$contador = $_COOKIE[’contador’];$contador++;setcookie ("contador", $contador, time() + 60);
?>
PHP: PHP Hypertext Pre-processor 57
Introducción al lenguaje PHP Primeros pasos con PHP Manejo de arrays Programación avanzada en PHP
Ventajas e IncovenientesCookies
• Ventajas:• Mecanismo fácil de implementar• Facilitan la navegación del usuario
• Inconvenientes• Puede convertirse en un mecanismo muy pesado
(sobrecarga de información enviada)• No siempre están habilitadas (el navegador del usuario
puede bloquearlas)• La información es fácilmente alterable
PHP: PHP Hypertext Pre-processor 58
Introducción al lenguaje PHP Primeros pasos con PHP Manejo de arrays Programación avanzada en PHP
IntroducciónSesiones
• Alternativa a las Cookies para mantener información deestado
DiferenciaLa información es almacenada en el servidor
• Necesita de un identificador de sesión (MD5 de un númeroaleatorio)
• Enviar el identificador en una Cookie• Enviar el identificador en cada query (a continuación de la
URL)
PHP: PHP Hypertext Pre-processor 59
Introducción al lenguaje PHP Primeros pasos con PHP Manejo de arrays Programación avanzada en PHP
Sesiones en PHPSesiones
• Existen dos funciones básicas para el manejo de sesionesen PHP:
session_start ()session_destroy ()
• Forma de registrar/acceder a las variables:
$_SESSION [’variable’]
PHP: PHP Hypertext Pre-processor 60
Introducción al lenguaje PHP Primeros pasos con PHP Manejo de arrays Programación avanzada en PHP
Ejemplo ISesiones
Abrimos la sesión y registramos las variables
<?session_start();?>
Presentamos el Formulario
<FORM METHOD="POST">Introduzca un número entero entre 0 y 9999:<BR>Número: <INPUT NAME="numero" TYPE="text"><INPUT NAME="envio" TYPE="submit" VALUE="Probar"><INPUT NAME="reinicio" TYPE="submit" VALUE="Reiniciar"></FORM>
PHP: PHP Hypertext Pre-processor 61
Introducción al lenguaje PHP Primeros pasos con PHP Manejo de arrays Programación avanzada en PHP
Ejemplo IISesiones
Procesamos la información
if (empty ($_SESSION [’secreto’]) || $_REQUEST[’reinicio’] =="Reiniciar") {
echo "Intente adivinar el número secreto.<BR><BR>";$_SESSION [’secreto’] = rand (0,9999);$_REQUEST[’numero’] = 0;
} else if (empty ($_REQUEST[’numero’])) {echo "Intente adivinar el número secreto.<BR><BR>";
} else if ($_SESSION [’secreto’] < $_REQUEST[’numero’]) {$_SESSION [’intentos’]++;echo "El número secreto es menor que " . $_REQUEST[’numero’]
. "<BR>";echo "¡Lleva usted " . $_SESSION [’intentos’] . "
intentos!<BR>";} else if ($_SESSION [’secreto’] > $_REQUEST[’numero’]) {
PHP: PHP Hypertext Pre-processor 62
Introducción al lenguaje PHP Primeros pasos con PHP Manejo de arrays Programación avanzada en PHP
Ejemplo IIISesiones
Destruimos la sesión
} else if ($_SESSION [’secreto’] > $_REQUEST[’numero’]) {$_SESSION [’intentos’]++;echo "El número secreto es mayor que " . $_REQUEST[’numero’]
. "<BR>";echo "¡Lleva usted " . $_SESSION [’intentos’] . "
intentos!<BR>";} else {
echo "<BR>";echo "ENHORABUENA, el número secreto era " .
$_REQUEST[’numero’] . "<BR>";echo "<BR>";session_destroy ();exit ();
}
PHP: PHP Hypertext Pre-processor 63
Introducción al lenguaje PHP Primeros pasos con PHP Manejo de arrays Programación avanzada en PHP
Otras consideracionesSesiones
• Si PHP fue compilado con la opción -enable-trans-id elidentificador de sesión se añade automáticamente a cadaenlace
• Para poder usar las variables de sesión hay que llamar a lafunción session_start() al comienzo de cada script
• Otras funciones de interés:
session_unset ()session_id ()
isset($_SESSION[’variable’])unset($_SESSION[’variable’])
PHP: PHP Hypertext Pre-processor 64
Introducción al lenguaje PHP Primeros pasos con PHP Manejo de arrays Programación avanzada en PHP
Manejo de Ficheros IFicheros
Uso de ficheros• Una de las alternativas para mantener información
persistente de las operaciones del usuario es la utilizaciónde ficheros
• En la gran mayoría de los sistemas hay que considerarademás los aspectos de propiedad y seguridad de losficheros
• Hay que tener en cuenta que el proceso que ejecuta elservidor Web debe poder realizar las operacionessolicitadas sobre los ficheros
PHP: PHP Hypertext Pre-processor 65
Introducción al lenguaje PHP Primeros pasos con PHP Manejo de arrays Programación avanzada en PHP
Manejo de Ficheros IIFicheros
Gestión de ficheros• Hay dos formas de manipular ficheros:
• Por medio de las funciones heredadas de C/UNIX• El interfaz de funciones propias de PHP
• Las primeras, no obstante no se recomiendan, salvo paraoperaciones muy particulares
PHP: PHP Hypertext Pre-processor 66
Introducción al lenguaje PHP Primeros pasos con PHP Manejo de arrays Programación avanzada en PHP
Manejo de Ficheros IIIFicheros
Manejo básico• Existen dos funciones que permiten gestionar ficheros por
medio de cadenas:• file_get_conents(): Esta función carga en una
cadena el contenido del fichero• file_put_conents(): Esta función vuelca el contenido
de una cadena en un fichero
Manejo básico
$cadena="La vida es maravillosa";file_put_contents("fichero.txt",$cadena);$leido=file_get_contents("fichero.txt");echo "He leído: $leido";
PHP: PHP Hypertext Pre-processor 67
Introducción al lenguaje PHP Primeros pasos con PHP Manejo de arrays Programación avanzada en PHP
Manejo de Ficheros IVFicheros
Manejo con arrays• La función file() permite cargar un fichero en un array• El array comenzará en la clave 0• Cada elemento será una línea del fichero• El carácter de final de línea \n también se guardará al final
de cada elemento
Manejo con arrays
$poema="A un panal de rica miel\n mil moscas acudieron\n Yo.";file_put_contents("poema.txt",$poema);$lineas=file("poema.txt");echo $lineas[0]; // A un panal de rica miel\necho $lineas[1]; // mil moscas acudieron\necho $lineas[2]; // Yo.
PHP: PHP Hypertext Pre-processor 68
Introducción al lenguaje PHP Primeros pasos con PHP Manejo de arrays Programación avanzada en PHP
Manejo de Ficheros VFicheros
Recorrido de directorios• Para manipular directorios se usan las siguientes
funciones:• opendir(): Devuelve un manejador para empezar a
recorrer un directorio• readir(): Se le da el manejador de un directorio y
devuelve el siguiente nombre de fichero en dicho directorio• closedir(): Cierra un directorio abierto
Recorrido de directorios
$d=opendir("datos/");while($f=readdir($d))
echo "Entrada: $f<BR>\n";closedir($d);
PHP: PHP Hypertext Pre-processor 69
Introducción al lenguaje PHP Primeros pasos con PHP Manejo de arrays Programación avanzada en PHP
Manejo de Ficheros VIFicheros
Otras funciones útiles• Existen otra serie de funciones asociadas a ficheros:
• file_exists(): Indica si un nombre de fichero que se lepasa existe
• fopen(): Abre un fichero, devolviendo un manejador. Elvalor devuelto lo usan otras funciones
• fpassthru(): Se le pasa un manejador de fichero yvuelca su contenido por la salida
• is_dir(), is_file(): Consulta si un nombre de ficherose corresponde con un fichero, propiamente dicho o con undirectorio
PHP: PHP Hypertext Pre-processor 70
Introducción al lenguaje PHP Primeros pasos con PHP Manejo de arrays Programación avanzada en PHP
Manejo de Ficheros VIIFicheros
Otras funciones útiles
$fichero="mis_datos.txt";if(is_file($fichero)){
$f=fopen($fichero);fpassthru($f); // Imprime el fichero
}else if (is_dir($fichero))
echo "Era un directorio mendrugo";
PHP: PHP Hypertext Pre-processor 71
Introducción al lenguaje PHP Primeros pasos con PHP Manejo de arrays Programación avanzada en PHP
Manejo de Ficheros VIIIFicheros
Ficheros remotos• El nombre de un fichero se puede sustituir por una URL• Hay diferentes protocolos de acceso a ficheros remotos, lo
más habitual es usar http://
Ficheros remotos
// Redirigimos a una página de error$err_page=fopen("http://www.datsi.fi.upm.es/error.html");fpassthru($err_page); // Imprime el fichero
PHP: PHP Hypertext Pre-processor 72