PHP: PHP Hypertext Pre-processorlaurel.datsi.fi.upm.es/.../asignaturas/daw/daw-php.pdfIntroducción...

72
Introducción al lenguaje PHP Primeros pasos con PHP Manejo de arrays Programación avanzada en PHP PHP: PHP Hypertext Pre-processor Desarrollo de Aplicaciones Web Antonio LaTorre <atorre@fi.upm.es> Universidad Politécnica de Madrid 2014/2015 PHP: PHP Hypertext Pre-processor 1

Transcript of PHP: PHP Hypertext Pre-processorlaurel.datsi.fi.upm.es/.../asignaturas/daw/daw-php.pdfIntroducción...

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