PHP: Hypertext Preprocessor Rodrigo Gómez Rodríguez Jose Manuel Moreno García Roberto González Sánchez María Pilar Igualada Villodre Departamento de Ingeniería Telemática Universidad Carlos III de Madrid Contenido Introducción Descripción y funcionamiento Sintaxis básica Ventajas y desventajas Casos de uso y desarrollo Uso PHP vs ASP Ejemplos Conclusiones y referencias 2
Motivación El 5º lenguaje de programación más popular Según http://www.tiobe.com/tpci.htm Detrás de Java, C, Visual Basic y C++ Usado por importantes compañías Yahoo, HP, Lufthansa, Lucent, El País, El Mundo, etc. Una de las tecnologías de código libre más utilizadas por la Administración Según el informe IRIA/REINA 2006 el 18% del desarrollo orientado a objetos es PHP http://www.csi.map.es/csi/iria2006/capitulo3/c3t32.htm 3 Contenido Introducción Descripción y funcionamiento Sintaxis básica Ventajas y desventajas Casos de uso y desarrollo Uso PHP vs ASP Ejemplos Conclusiones y referencias 4
Introducción Qué es? es un lenguaje de "código abierto" interpretado, de alto nivel, embebido en páginas HTML y ejecutado en el servidor. La mayoría de su sintaxis es similar a C, Java y Perl y es fácil de aprender. La principal meta de este lenguaje es permitir a los creadores de páginas web, escribir páginas dinámicas de una manera rápida y fácil. Aunque se puede hacer mucho más con PHP 5 Introducción Breve Reseña Histórica Fue originalmente diseñado en Perl por el programador Rasmus Lerdorf en el año 1994. 1997: PHP3 - reescritura del parser 2000: PHP4 - lanzado bajo el poder del motor Zend Engine 1.0. 2004: PHP5 utilizando las ventajas del motor Zend Engine 2. La versión más reciente de PHP es la 5.2.5 Próximamente PHP6 6
Introducción PHP5 surge para mejorar PHP4 en los siguientes aspectos: Soporte sólido y REAL para Programación Orientada a Objetos (o OOP) con PHP Data Objects. Mejoras de rendimiento. Mejor soporte para MySQL con extensión completamente reescrita. Mejor soporte a XML ( XPath, DOM... ). Soporte nativo para SQLite. Soporte integrado para SOAP. Iteradores de datos. Excepciones de errores. 7 Contenido Introducción Descripción y funcionamiento Sintaxis básica Ventajas y desventajas Casos de uso y desarrollo Uso PHP vs ASP Ejemplos Conclusiones y referencias 8
Descripción Soporte para gran cantidad de bases de datos: MySQL Oracle SQL Server... Buena integración con bibliotecas externas: Desde generar un documento PDF hasta analizar código XML. Solución simple y universal para Webs dinámicas Mantenimiento y actualización más sencillo que con otros lenguajes. Código abierto. Extensa librería de desarrollo. Ejecución en el servidor: El resultado final enviado al navegador es HTML 9 Funcionamiento PHP se ejecuta en el servidor y el resultado es enviado al navegador web. El resultado normalmente es HTML. Acceso a los recursos del servidor. Ej. BBDD El navegador no necesita soportar PHP El servidor SÍ debe soportar PHP. Modo de operación: El Navegador realiza una petición al servidor (URL) Después el servidor ejecuta el código PHP solicitado y retorna el código HTML al navegador El navegador muestra la respuesta del servidor. 10
Contenido Introducción Descripción y funcionamiento Sintaxis básica Ventajas y desventajas Casos de uso y desarrollo Uso PHP vs ASP Ejemplos Conclusiones y referencias 11 Sintaxis Básica Los scripts se pueden incluir en el interior del código HTML/XHTML. Comienzo de script php Final de script A veces habilitada la opción corta: Comentarios: // y /* */ Comentarios: // y /* */ Cuando se solicita una página PHP se interpreta el código y se genera la respuesta para enviar al cliente 12
Algunos apuntes sobre programación en PHP Las variables comienzan con el signo $. Tienen tipado débil: no es necesario indicar el tipo de datos de la variable Se convierte automáticamente al tipo correcto en base al valor que se le asigna. Los arrays se comportan en la práctica como Maps: asocian valores a claves. El valor de las constantes no cambia durante la ejecución a excepción de las Magic constants:su valor cambia con el sitio en el que se invocan: _LINE_,_FILE_,_FUNCTION_,_CLASS_,_METHOD_ Los operadores de comparación ===,!== comparan valor y tipo La concatenación de cadenas se hace por medio de. 13 HolaMundo PHP El ejemplo siguiente escribiría simplemente "Hello World" (sin comillas) en la página web. Es importante recordar que todo bloque de código php debe estár dentro de php (para abrir) y (para cerrar) o simplemente de una forma más corta <CÓDIGO_PHP>, muy parecido a las etiquetas en ASP <% <CÓDIGO_ASP> %>. 14
Contenido Introducción Descripción y funcionamiento Sintaxis básica Ventajas y desventajas Casos de uso y desarrollo Uso PHP vs ASP Ejemplos Conclusiones y referencias 15 Ventajas y puntos fuertes Muy sencillo de aprender Es un lenguaje multiplataforma. Similar en sintaxis a C y a PERL Se puede incrustar código PHP con etiquetas HTML. El análisis léxico para recoger las variables que se pasan en la dirección lo hace PHP de forma automática. Capacidad de expandir su potencial utilizando la enorme cantidad de módulos. PHP viene equipado con un conjunto de funciones de seguridad que previenen la inserción de ordenes dentro de una solicitud de datos. 16
Ventajas y puntos fuertes Todas las funciones del sistema están explicadas y ejemplificadas en un único archivo de ayuda. Al ser libre, tiene una gran comunidad de desarrolladores: Los fallos de funcionamiento se localizan y reparan fácilmente. Permite las técnicas de Programación Orientada a Objetos. Clases y herencia. Biblioteca nativa de funciones sumamente amplia Reduciendo los tiempos de desarrollo. No requiere definición de tipos de variables. Tiene manejo de excepciones. 17 Desventajas y limitaciones No posee una abstracción de base de datos estándar, sino bibliotecas especializadas para cada motor. No posee adecuado manejo de internacionalización, unicode, etc. Existen muchas versiones de PHP con incompatibilidades entre sí. Cada cual programa a su manera y hace que sea muy difícil mantener el código de terceras personas. Todo el trabajo lo realiza el servidor y no delega al cliente. Por tanto puede ser más ineficiente a medida que las solicitudes aumenten de número. La legibilidad del código puede verse afectada al mezclar sentencias HTML y php. La orientación a objetos es aún muy deficiente para aplicaciones grandes 18
Contenido Introducción Descripción y funcionamiento Sintaxis básica Ventajas y desventajas Casos de uso y desarrollo Uso PHP vs ASP Ejemplos Conclusiones y referencias 19 Casos de Uso Los principales usos del PHP son los siguientes: Programación de páginas web dinámicas, habitualmente en combinación con el motor de base datos MySQL, aunque cuenta con soporte nativo para otros motores, incluyendo el estándar ODBC, lo que amplía en gran medida sus posibilidades de conexión. Programación en consola, al estilo de Perl o Shell Script. Creación de aplicaciones gráficas independientes del navegador, por medio de la combinación de PHP y Qt/GTK+, lo que permite desarrollar aplicaciones de escritorio en los sistemas operativos en los que está soportado. 20
Desarrollo Herramientas necesarias para programar en PHP: Servidor Web (Recomendado Apache) Módulo o interprete de PHP Servidor de base de datos (Recomendado MySQL) IDE (Integrated Development Environment): Multitud de ellos: PHPEclipse Quanta + BlueFish Zend Studio PHP Designer 21 Contenido Introducción Descripción y funcionamiento Sintaxis básica Ventajas y desventajas Casos de uso y desarrollo Uso PHP vs ASP Ejemplos Conclusiones y referencias 22
Uso Aplicaciones desarrolladas con PHP: Gallery Project Proyecto para la organización de album s de fotos. MediaWiki Motor para wikis. WordPress Sistema de gestión de contenidos enfocado a la creación de blogs. Smarty Motor de plantillas para PHP. Frameworks en PHP: Symfony CakePHP Kumbia 23 Uso Historias exitosas o fallidas: Migración de ASP a PHP bajo Linux de ClickForLessons.com: "Recientemente nosotros migramos la mayoría de nuestros sitios desde Windows con IIS a Linux, Apache, MySQL y PHP. El cambio ha hecho que ahora sean más fáciles de desarrollar y mantener, tengan mejor performance, una escalabilidad y seguridad mejores" "Los resultados iniciales muestran que el sitio funciona ahora un 60% más rápido. En general, fuimos capaces de obtener la misma funcionalidad con menos código. La velocidad es fantástica, pero igualmente importante, lo es el costo a medida que el sitio escala" http://www.stevencox.com/2007/08/net-to-linux-co.html 24
Contenido Introducción Descripción y funcionamiento Sintaxis básica Ventajas y desventajas Casos de uso y desarrollo Uso PHP vs ASP Ejemplos Conclusiones y referencias 25 PHP vs ASP Soporte: Código abierto. ASP tiene el respaldo de Microsoft. Plataformas aceptadas: PHP es multiplataforma. ASP solo funciona bajo SO de Microsoft. Desarrollo: PHP tiene multitud de programadores y documentación. ASP en menor medida. Seguridad: PHP funciona bajo Linux Más seguridad y estabilidad 26
PHP vs ASP Coste PHP es gratuito ASP necesita Windows Coste Popularidad: PHP es muy popular ASP es conocido por la popularidad de Microsoft 27 Vulnerabilidades comunes en PHP 1. Parámetros no validados: Antes de utilizar las variables globales, se deben validar para asegurarse de que no contienen ninguna entrada inesperada. 2. Control de acceso: En vez de programar tu propia aplicación para el control de acceso, utiliza los módulos de las librería PEAR que son bastante buenos (Paquetes de PEAR: Auth, Auth_HTTP) 3. Vulnerabilidades en el manejo de cuentas y sesiones: Se deben utilizar las funciones incorporadas en PHP para manejo de sesiones. Debe tenerse cuidado con la configuración del servidor y con cómo almacena la información de la sesión. Las sesiones deben almacenarse en una base de datos o en una parte del sistema de ficheros a la que sólo los administradores de la web puedan tener acceso. 4. Defectos en Cross-Site Scripting (XSS): Nunca debe mostrarse información que venga de fuera sin filtrarla primero. Las variables deben filtrarse antes incluyéndolas en campos ocultos de un formulario. 5. Problemas de la gestión de error :Los mensajes de error no deben contener ninguna información descriptiva del sistema. Esto puede dar una idea de cómo está organizado el sistema y qué software utiliza. 28
Contenido Introducción Descripción y funcionamiento Sintaxis básica Ventajas y desventajas Casos de uso y desarrollo Uso PHP vs ASP Ejemplos Conclusiones y referencias 29 Ejemplos: MySQL (conexión) // Conectamos con el servidor if (!isset($conexion)){ $conexion=mysql_connect ( host, login, passwd ); // Seleccionamos la BASE DE DATOS mysql_select_db( mi_base,$conexion); } isset($variable) comprueba si la conexión ya existe. mysql_connect( host, login, passwd ) conecta con el servidor mysql alojado en host. mysql_server_db( mi_base,conexión) coge como base de datos a manipular la que se llama mi_base en la conexión creada 30
Ejemplos: MySQL (meter datos) echo <form action="'.$php_self.'" method="post"> Nombre :<input type="text" name="nombre"><br> Dirección:<input type="text" name="direccion"><br> Teléfono :<input type="text" name="telefono"><br> E-mail :<input type="text" name="email"><br> <input type="submit" name="enviar" value="aceptar información"> </form> ; echo escribe en el Html. Las cadenas se concatenan con un punto. $PHP_SELF indica la dirección de la página 31 actual. Ejemplos: MySQL (meter datos) $sql = "INSERT INTO agenda (nombre, direccion, telefono, email) ". "VALUES ('$nombre', '$direccion', '$telefono', '$email')"; if (mysql_query($sql)) echo <p>datos insertados correctamente</p> ; else echo <p>error al insertar los datos</p> ; mysql_query( Sentencia ) ejecuta la sentencia sql y devuelve el resultado. Formulario y código para sql en el mismo archivo? -> Usamos isset para saber que mostrar. 32
Ejemplos: MySQL (meter datos) <html><head>...</head><body> extract($http_post_vars); if((isset($enviar) && $nombre!= ){ //Inserto en la base de datos... }else{ //Muestro formulario.... } </body></html> extract($http_post_vars) hace variables de los campos enviados en el formulario. 33 Ejemplos: MySQL (mostrar datos) $ssql="select * From agenda"; $resultid = mysql_db_query($base,$ssql); while( $damefila = mysql_fetch_array($resultid) ){ $nombre=$damefila[ nombre ];... $mail=$damefila[ email ]; echo <table> <tr> <td>. $nombre. </td>... ; } Mysql_fetch_array(resultado) convierte una tupla en un array. Cuando ya no queden tuplas en la consulta devuelve false. 34
Ejemplos: Sesiones session_start(); $_SESSION["autentificado"]= "SI"; Session_start() crea la sesión, en $_SESSION tenemos una array en el que meter valores de sesión. if ($_SESSION["autentificado"]!= "SI") { header("location: index.php"); } header( Location: dir ) redirige a esa web. session_destroy() elimina la sesión con todos los valores guardados. 35 Ejemplos: Subiendo imágenes Minitaura Imagen reducida Queremos a partir de una imagen subida crear una imagen con un tamaño máximo y una miniatura cuadrada para previsualizar. 36
Ejemplos: Subiendo imágenes <HTML> <HEAD></HEAD> </BODY> <FORM ENCTYPE="multipart/form-data" ACTION="SubirImagen.php" METHOD="post"> <INPUT type="file" name="archivo"><br> <INPUT type="submit" name="enviar" value="aceptar"> </FORM> </BODY> </HTML> El formulario debe llevar la etiqueta ENCTYPE= multipart/form-data ya que ahora no solo enviamos texto. 37 Ejemplos: Subiendo imágenes if (is_uploaded_file($_files['archivo']['tmp_name'])) { /* * Código para subir una imagen, redimensionarla * y crear una miniatura. */ }else{ echo Error al subir la imagen ; } is_uploaded_file(ruta) comprueba si el archivo que le pasamos acaba de ser subido. La variable $_FILES o la variable $HTTP_POST_FILES son la misma y en ella están los datos del archivo. 38
Ejemplos: Subiendo imágenes // Obtenemos la ruta temporal $RutaTemporal=$_FILES['Archivo']['tmp_name']."/".$_FILES[' Archivo']['name']; // Obtenemos la extensión del archivo buscando el // texto tras el último punto. $extensionfile = explode(".",$_files['archivo']['name']); $num = count($extensionfile)-1; $extensionfile = $extensionfile[$num]; Los archivos se suben a una ruta temporal del servidor y nosotros debemos moverlos al directorio donde queramos guardarlos. También se puede buscar el tipo de archivo con $_FILES['archivo']['type']. 39 Ejemplos: Subiendo imágenes // Obtento los datos de la imagen $filename = $_FILES['Archivo']['tmp_name']; $width = 640; $height = 400; $coef = $width / $height; $mini_width = 100; $mini_height = 100; list($width_orig, $height_orig) = getimagesize($filename); // Si es más ancha que larga en proporción a lo que queremos if ( $coef > ( $width_orig / $height_orig )){ $width = ( $width_orig / $height_orig ) * $height ; }else{ $heigth = ( $height_orig / $width_orig ) * $width; } 40
Ejemplos: Subiendo imágenes // Calculo el trozo de imagen que me voy a quedar para la miniatura cuadrada. $w_ini = 0; $w_fin = $width_orig; $h_ini = 0; $h_fin = $height_orig; // Si es más alta que ancha if ( $width_orig < $height_orig ){ $h_ini = ( $height_orig - $width_orig )/2; $h_fin = $width_orig; }else // Si es más ancha que alta if ( $width_orig > $height_orig ){ $w_ini = ( $width_orig - $height_orig )/2; $w_fin = $height_orig; } 41 Ejemplos: Subiendo imágenes // imagecreatetruecolor crea la imagen con el tamaño que le digamos. $image_p = imagecreatetruecolor( $width, $height ); $image_mini = imagecreatetruecolor( $mini_width, $mini_height ); // imagecreatefromjpeg crea una imagen a partir de un archivo. $image = imagecreatefromjpeg( $filename ); // imagecopyresampled copia un trozo de una imagen en otra redimensionandola. imagecopyresampled( $image_p, $image, 0, 0, 0, 0, $width, $height, $width_orig, $height_orig ); imagecopyresampled( $image_mini, $image, 0, 0, $w_ini, $h_ini, $mini_width, $mini_height, $w_fin, $h_fin ); // imagejpeg crea un archivo a partir de una imagen con la calidad deseada. imagejpeg( $image_p, $dir, 85); imagejpeg( $image_mini, $mini_dir, 100); 42
Ejemplos: Subiendo imágenes Este ejemplo hace uso de las librerías GD2 para el manejo de imágenes. Mediante estas librerías se puede editar imágenes al vuelo, no solo cuando estás imágenes van del cliente al servidor. De este modo podemos, por ejemplo, añadir un texto personalizado a las imágenes que enviemos. Para subir un archivo tal cual está en el cliente solo tenemos que usar la linea: move_uploaded_file($http_post_files['archivo']['tmp_ name'], $HTTP_POST_FILES['archivo']['name']); 43 Contenido Introducción Descripción y funcionamiento Sintaxis básica Ventajas y desventajas Casos de uso y desarrollo Uso PHP vs ASP Ejemplos Conclusiones y referencias 44
Conclusiones Tecnología potente que permite crear páginas dinámicas de una manera fácil y rápida. Sintaxis similar a lenguajes de programación populares (C, Java y Perl) y fácil de aprender. Lenguaje de código abierto. Está previsto el lanzamiento en breve de la rama 6 de PHP, quedando sólo dos ramas activas en desarrollo (PHP5 y 6). Algunas de las diferencias que encontraremos frente a PHP 5 son: Soportará Unicode Limpieza de funcionalidades obsoletas como register_globals, safe_mode... PECL Mejoras en orientación a objetos Solucionando así algunas de las desventajas descritas 45 Referencias Proporcionar las referencias utilizadas para preparar esta presentación: http://es.wikipedia.org/wiki/php http://ascii.eii.us.es/docs/2002-03/php/php4.html http://www.alegsa.com.ar/notas/156.php http://www.linuxcentro.net/linux/staticpages/index.php?page =CaracteristicasPHP 46