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 <[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 PHP Formularios, Cookies y Sesiones Acceso 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 4 (2000) Relevancia de PHP • TIOBE Programming Community Index lo indexa como 6o lenguaje de programación más usado (abril 2015) • PHP 5 (2004) • El primero entre los • PHP 3 (1998) • Zend Engine (1999) • PHP 6 (nunca liberado) • PHP 7 (octubre 2015) PHP: PHP Hypertext Pre-processor lenguajes orientados únicamente a web 8 Introducción al lenguaje PHP Primeros pasos con PHP Manejo de arrays Programación avanzada en PHP Herramientas para PHP Recursos Existen numerosos recursos PHP disponibles Editores Específicos Extensiones y bibliotecas • PHP designer • http://pear.php.net( ) • https://packagist.org( ) • http://pecl.php.net( ) • PhpStorm • Rapid PHP Editor Depuradores • PHP DBG Ayuda • http://www.php.net( ) • Xdebug • APD 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> <?php echo "<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 la direcció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 comillas simples (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 haciendo casting: (string), (boolean), (int), (float) • O preguntar si una variable se encuentra definida o incluso eliminarla: isset() y unset() • Si una variable no va a cambiar de valor podemos definirla como una constante: define(“nombre”, valor) y uso como 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"; else echo "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() y func_get_args() • Las funciones pueden recibir argumentos pasados por referencia • 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 e incluirla desde aquéllos donde se use • Podemos usar dos funciones de PHP para cargar estas funciones: • 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 dicho fichero 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 I Estructuras Compuestas Estructuras de datos compuestas • Las estructuras de datos compuestas permiten almacenar varios elementos de diferentes tipos (simples o compuestos) 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 II Estructuras 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 a elemento. PHP: PHP Hypertext Pre-processor 29 Introducción al lenguaje PHP Primeros pasos con PHP Manejo de arrays Programación avanzada en PHP Arrays I Estructuras 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 II Estructuras 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 III Estructuras 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 IV Estructuras 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 V Estructuras 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 VI Estructuras 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 VII Estructuras 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 VIII Estructuras 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 IX Estructuras 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 X Estructuras 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 XI Estructuras 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 devuelven false PHP: PHP Hypertext Pre-processor 40 Introducción al lenguaje PHP Primeros pasos con PHP Manejo de arrays Programación avanzada en PHP Arrays XII Estructuras 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); // Comenzamos while(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 XIII Estructuras 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 XIV Estructuras 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 XV Estructuras 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 XVI Estructuras 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 XVII Estructuras 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 los elementos • asort(): Ordena los elementos pero cada cual conserva su clave. • ksort(): Ordena por clave, pero cada cual mantiene su elemento 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 XVIII Estructuras Compuestas Ordenación de arrays $alumnos=array( 210 => "Dolores Fuertes", 115 => "Walter O’Filia", 523 => "Armando Guerra", 410 => "Julian Dopetas"); // Por clave ksort($alumnos); // Por nombre asort($alumnos); // Rompe asociación sort($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 PHP Formularios, Cookies y Sesiones Acceso 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 I Formularios • Dos mecanismos para enviar información mediante formularios • GET • POST • Las variables son “parseadas” automáticamente por el servidor • La información puede ser accedida a través de varios arrays: • 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 II Formularios 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 III Formularios 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 I Formularios • El formulario debe tener un tipo de codificación “multipart/form-data” • La información del archivo se guarda en la variable superglobal $_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 II Formularios 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 III Formularios 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 I Cookies • (Breve) Información de estado almacenada por el navegador del cliente • Estado válido únicamente para un conjunto de URLs (dominio) • Esta información es enviada por el navegador en posteriores 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 produzca ninguna 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 II Cookies • 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 PHP Cookies • 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 Incovenientes Cookies • 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ón Sesiones • Alternativa a las Cookies para mantener información de estado Diferencia La información es almacenada en el servidor • Necesita de un identificador de sesión (MD5 de un número aleatorio) • 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 PHP Sesiones • Existen dos funciones básicas para el manejo de sesiones en 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 I Sesiones 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 II Sesiones 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 III Sesiones 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 consideraciones Sesiones • Si PHP fue compilado con la opción -enable-trans-id el identificador de sesión se añade automáticamente a cada enlace • Para poder usar las variables de sesión hay que llamar a la funció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 I Ficheros Uso de ficheros • Una de las alternativas para mantener información persistente de las operaciones del usuario es la utilización de ficheros • En la gran mayoría de los sistemas hay que considerar además los aspectos de propiedad y seguridad de los ficheros • Hay que tener en cuenta que el proceso que ejecuta el servidor Web debe poder realizar las operaciones solicitadas 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 II Ficheros 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 para operaciones 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 III Ficheros 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 IV Ficheros 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\n echo $lineas[1]; // mil moscas acudieron\n echo $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 V Ficheros 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 VI Ficheros Otras funciones útiles • Existen otra serie de funciones asociadas a ficheros: • file_exists(): Indica si un nombre de fichero que se le pasa existe • fopen(): Abre un fichero, devolviendo un manejador. El valor devuelto lo usan otras funciones • fpassthru(): Se le pasa un manejador de fichero y vuelca su contenido por la salida • is_dir(), is_file(): Consulta si un nombre de fichero se corresponde con un fichero, propiamente dicho o con un directorio 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 VII Ficheros 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 VIII Ficheros 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
Puede agregar este documento a su colección de estudio (s)
Iniciar sesión Disponible sólo para usuarios autorizadosPuede agregar este documento a su lista guardada
Iniciar sesión Disponible sólo para usuarios autorizados(Para quejas, use otra forma )