You are on page 1of 32

Tecnologas de Servidor: PHP, CGI, programacin Web con python

Pedro J. Muoz Merino http://www.it.uc3m.es/pedmume/

Tecnologas de Servidor

Al igual que J2EE, hay otras tecnologas de servidor en otros lenguajes de programacin diferentes de Java. Adems del cambio de lenguaje de programacin, usualmente hay que hacer una serie de cosas comunes para los que cambia la sintaxis y modo de conseguirlo:

Tratamiento de peticiones de entrada Obtener informacin de la peticin HTTP (cabecera+formularios) Responder con informacin al cliente (ejemplo HTML) Mantener la sesin, manejo de cookies, etc. Tratamiento de mltiples peticiones a la vez Tratamiento de errores Conexin con Bases de Datos Acceso y manipulacin de ficheros XML
Diseo de Aplicaciones Telemticas 2

Pedro J. Muoz Merino

PHP: Variables

Declaracin de variables

$nombre_variable = valor

Ejemplos

$a = 7 $direccion = calle de Arriba

No hay que declarar explcitamente el tipo que son, sino que en PHP se interpreta automticamente segn su declaracin Para obtener el valor de una variable

$nombre_variable

Pedro J. Muoz Merino

Diseo de Aplicaciones Telemticas 3

PHP: Operaciones con Strings

Para concatenar dos strings se usa el . entre ellos

String1 . String2

Ejemplo
$s1 = El valor es; $s2 = rojo; echo $s1 . . $s2;

Hay muchas funciones para realizar operaciones con strings, algunas de ellas son parecidas a algunos interpretes de comandos (shells). Ejemplos: strcmp, strncmp, strlen, strpos, bin2hex, strchr, strtolower, strtoupper
Pedro J. Muoz Merino Diseo de Aplicaciones Telemticas 4

PHP: Arrays

Un array permite asociar valores a ndices. Los ndices pueden ser numricos o strings
$var1=array(valor1, valor2, valor3, , valorn); $var2=array(clave1=>valor1, clave2=>valor2, , claven=>valorn); $var3[0]=valor1; $var4[clave1]=varlor1;

Para acceder a los valores $nombre_variable[indice]

Pedro J. Muoz Merino

Diseo de Aplicaciones Telemticas 5

PHP: Funciones

La manera genrica de definir una funcin en PHP


function nombre_funcion ($var1, $var2, , $varn) { cdigo de la funcin }

La funcin puede retornar un valor que puede ser una variable, tambin un array return $nombre_variable A la funcin se la invoca desde el cuerpo de la siguiente manera nombre_function(param1, param2, , paramn)

Pedro J. Muoz Merino

Diseo de Aplicaciones Telemticas 6

PHP: Operadores

Aritmticos entre nmeros enteros:

+ - * / % Comparacin:

< > == != <= >= Lgicos:

&& || !

Pedro J. Muoz Merino

Diseo de Aplicaciones Telemticas 7

PHP: Estructuras de Control


if while for switch

Pedro J. Muoz Merino

Diseo de Aplicaciones Telemticas 8

PHP: if

Estructura general if (condicion) { cdigo } elseif (condicion) { cdigo } else{ cdigo


}
Pedro J. Muoz Merino

Ejemplo if ($a>$b) echo Es mayor; elseif ($a==$b) echo Es igual; else echo Es menor;

Diseo de Aplicaciones Telemticas 9

PHP: while

Estructura general while (condicion) { cdigo }

Ejemplo $i=0; while ($i<10) { echo i vale . $i; $i++; }

Pedro J. Muoz Merino

Diseo de Aplicaciones Telemticas 10

PHP: switch

Estructura general switch (expresin) { case valor1: cdigo; break; case valor2: cdigo; break; default: cdigo; }
Pedro J. Muoz Merino

Ejemplo switch ($comida) { case patatas: echo Son patatas"; break; case pescado: echo Es pescado"; break; default: echo No hay comida"; }

Diseo de Aplicaciones Telemticas 11

PHP: for

Estructura general for (expr_inic; condicion; expr_por_cada_iter) { cdigo; }

Ejemplo for ($i=0; $i<10; $i++) { echo i vale . $i; }

foreach ($array as $lista) { cdigo; }

Pedro J. Muoz Merino

Diseo de Aplicaciones Telemticas 12

PHP: Tratamiento de peticiones de entrada

En un servidor PHP tendremos varios scripts PHP, que son pginas PHP, implementadas en este lenguaje. A esas pginas llegarn peticiones HTTP que pueden ser tanto GET como POST. Podemos retomar los valores de lo que nos llega, gracias a que queda grabado todo lo que nos llega de entrada en 2 variables

$_GET: Es un array $_SET: Es un array

Cualquier cdigo de PHP visto y que veamos ir en la forma de etiqueta de la siguiente manera

<?php cdigo ?> J. Muoz Merino Pedro


Diseo de Aplicaciones Telemticas 13

PHP: Acceso a Informacin de peticiones GET

Una peticin HTTP GET se produce porque el usuario pone la URL directamente, porque presiona un enlace de URL o porque est puesto en un formulario

Forma de la URL: http://sitio/script.php?param1=valor1&param2=valor2&...paramn= valorn

Para acceder al valor de los parmetros de una peticin GET

$_GET[paramn]

Pedro J. Muoz Merino

Diseo de Aplicaciones Telemticas 14

PHP: Acceso a Informacin de peticiones POST

Una peticin HTTP POST se produce porque est puesto en un formulario

La URL no tiene incrustados los parmetros sino que estos van en el cuerpo del mensaje

Para acceder al valor de los parmetros de una peticin POST

$_POST[paramn]

Pedro J. Muoz Merino

Diseo de Aplicaciones Telemticas 15

Ejemplo de peticin POST: Aplicacin Calculadora


<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>Operation Calculator Application</title> </head> <body> <h1> Operation Calculator Application </h1> <form action="calculator.php" method=POST> Argument 1: <input type=text size=5 name=arg1> <br> Argument 2: <input type=text size=5 name=arg2> Operation (enter add, substract, multiplication or division): <input type=text size=5 name=operation> <br> <input type=submit> </form> </body> </html>
Pedro J. Muoz Merino Diseo de Aplicaciones Telemticas 16

PHP: Respuesta con informacin

Se pueden escribir respuestas de diferentes maneras

Intercalando etiquetas HTML en los trozos de cdigo de etiquetas PHP Intercalando texto en los trozos de cdigo de etiquetas PHP Utilizando las funciones echo o print en trozos de etiquetas PHP

Los comentarios en PHP se ponen como


Para una lnea: // comentario Para varias lneas: /* comentarios */

Pedro J. Muoz Merino

Diseo de Aplicaciones Telemticas 17

PHP: Sesiones y Cookies

Creacin de una sesin: funcin session_start();


Poner valores de parmetros en una sesin y recuperarlos se hace a travs de la variable $_SESSION que es un array y se manipula como tal Funcin isset para saber si un determinado parmetro ya ha sido incluido en la sesin o no Eliminar parmetros de una sesin con la funcin unset() Cerrar una sesin con la funcin session_destroy() Reescritura de URL si no se admiten cookies Cookies

Para poner: setcookie(nombre, valor, expira, ruta, dominio); Para obtener valor: Con el array $_COOKIE Para eliminar: Cambiar fecha en la que expira
Diseo de Aplicaciones Telemticas 18

Pedro J. Muoz Merino

PHP: include y forward

include

Funcin include (trae todo lo que haya en el fichero incluido, si hay algn error, slo muestra un warning): include(nombre_fichero.php");

Funcin require (trae todo lo que haya en el fichero incluido por el require pero si y slo si no hay ningn error. En caso de error detiene la ejecucin): require(nombre_fichero.php");

forward

http://stackoverflow.com/questions/433774/does-php-have-anequivalent-of-javas-requestdispatcher-forward

Pedro J. Muoz Merino

Diseo de Aplicaciones Telemticas 19

PHP: Acceso a Base de Datos mySQL

Conectar con la base de datos, devuelve una conexin: mysql_connect(nombre_servidor,usuario,contrasea); Seleccionar una base de datos concreta: mysql_select_db(nombre_BD", $conexion); Ejecucin de sentencias SQL, da un resultado: mysql_query(sentencia_SQL); Obtener valores tras una sentencia SELECT, obtiene las diferentes filas por cada llamada realizada: $variable_fila = mysql_fetch_array($result)) Cerrar la conexin con la base de datos, sobre una conexin: mysql_close($conexion);
Pedro J. Muoz Merino Diseo de Aplicaciones Telemticas 20

Ejemplo: PHP con conexin a Base de Datos (I) <?php


$URL =localhost"; $DB_LOGIN = "root"; $DB_PASSWD = "admin2009"; $con = mysql_connect($URL,$DB_LOGIN,$DB_PASSWD); if (!$con) { die(Error en la conexin: ' . mysql_error()); } mysql_select_db(sporting_manager", $con); $type=$_POST["type]; $text=$_POST["text1]; $order=$_POST[order]; if (strcmp($type, all_activities) { $rs = mysql_query("SELECT * FROM ACTIVITIES"); } else{ $rs= mysql_query("SELECT * FROM PAVILLIONS"); }

Pedro J. Muoz Merino

Diseo de Aplicaciones Telemticas 21

Ejemplo: PHP con conexin a Base de Datos (II)


If (strcmp($type, all_activities) { Cdigo a rellenar } else{ $rs= mysql_query("SELECT * FROM PAVILLIONS"); } ?> <h1>List of all pavillions</h1><table> <tr><b><td>PAVILLION</td><td>LOCATION</td></b></tr><p> <?php while($row = mysql_fetch_array($rs)) { echo "<tr><td>; echo $row[pavillion'] ; echo "</td> <td>"; echo $row[location']; echo </td></tr>; } echo </table>; mysql_close($con); ?>
Pedro J. Muoz Merino Diseo de Aplicaciones Telemticas 22

CGI: Common Gateway Interface


Est basado en el lenguaje de programacin Perl Queda como ejercicio ver como cada una de las cosas posibles vistas en J2EE y PHP, se pueden realizar en CGI

Pedro J. Muoz Merino

Diseo de Aplicaciones Telemticas 23

Programacin Web en python con XTutor

XTutor es una herramienta desarrollada en el MIT (Massachusetts Institute of Technology)


Servidor Web que se programa en Python API en python para programacin Web Utiliza una base de datos Tiene una serie de ficheros XML que se denominan XDOCs, accesibles a travs de URLs En la base de datos se guarda informacin sobre usuarios, documentos, estado de documento por usuario, interacciones e tem de interaccin

Pedro J. Muoz Merino

Diseo de Aplicaciones Telemticas 24

XTutor: Forma de procesado de peticiones

Forma de procesar peticin GET o POST

Se parsea el archivo seleccionado formando un rbol del mismo de objeto XMLTag, importando todos los ficheros python que se referencien como espacios de nombres en los XDOCs Toda etiqueta XML ser procesada segn algn archivo python (.py) de los que estn en el espacio de nombres del XDOC Si el atributo save_state est en el atributo raz del XDOC, entonces se pide autenticacin (por contrasea o certificado) Se construye una variable answers_dict que contiene todos los parmetros que vienen de una peticin POST o GET Se llama al mtodo handle_request (answer_dict) del nodo raz. Desde este mtodo se puede ir llamando a sus homnimos de nodos XML, ejecutando lo que sea conveniente para cada nodo del XML
Diseo de Aplicaciones Telemticas 25

Pedro J. Muoz Merino

XTutor: Forma de procesado de peticiones (continuacin)

Entre la artillera que se dispone para ejecutar asociada a cada nodo, est cualquier estructura permitida en el lenguaje de programacin python, recuperar el valor de los argumentos que vienen en answers_dict, coger valores de atributos de dicha etiqueta, utilizar cualquier utilidad del API que proporciona XTutor o generar cdigo HTML En caso de que save_state est activado, se puede ir almacenando la informacin que queramos en el estado, de forma que ese usuario conservar dicha informacin durante diferentes accesos a dicho XDOC Finalmente la respuesta con el HTML generado (ser la suma de todas las respuestas de los nodos por los que se va pasando) se le presenta al usuario

Pedro J. Muoz Merino

Diseo de Aplicaciones Telemticas 26

XTutor: Comparacin con J2EE


Aspecto a comparar J2EE XTutor Lenguaje de programacin Cualquier cosa permitida en Cualquier cosa permitida en empleado Java Python Procesado dinmico se Servlets, JSPs, EJBs XDOCS (son archivos XML) produce tras la peticin de Forma de procesamiento A travs de los mtodos Desde el mtodo handle_request doGet, doPost, doService, del nodo raz del XML y por los otros mtodos handle_request de etc. otros nodos XML que se vayan llamando recursivamente Parmetros de la peticin En el objeto request En answer_dict Manipulacin de ficheros API JDOM. Permite gran API Propietario de XTutor escrito XML (obtener atributos, potencialidad en Python. Permite gran realizar bsquedas de potencialidad etiquetas, etc.) Base de datos Inicialmente sin tablas Por defecto con una serie de tablas definidas Informacin de Sesin En el objeto session, se Se mantiene en document_state, mantiene mientras no se pero esta informacin se mantiene ante diferentes login y no slo cierre el navegador hasta cerrar el navegador Generacin del HTML En JSPs directamente con En XDOCS directamente con etiquetas HTML. En servlets etiquetas HTML. En fichero Python a travs del objeto response a travs de librera especial
Pedro J. Muoz Merino Diseo de Aplicaciones Telemticas 27

XTutor: Ejemplo Xdoc de la documentacin de XTutor


<xdoc:xdoc xmlns="http://www.w3.org/1999/xhtml" xmlns:xdoc="py:xdoc_standard_tags" xmlns:demo="py:demo" submit="Check answers"> <p>Here are some problems for you to try:</p> <demo:question id="q1" answer="46"> 12 + 34 = </demo:question> <demo:question id="q2" answer="32767"> 2<sup>15</sup> - 1 = </demo:question> </xdoc:xdoc>
Pedro J. Muoz Merino Diseo de Aplicaciones Telemticas 28

XTutor: Ejemplo tag handler de la documentacin de XTutor


import xdoc,utils,html # useful utilities # <question id="uid" answer="expected"> ... </question> class tag_question(xdoc.XMLTag): def handle_request(self,answer_dict,**kw): id = self.get_xml_attr('id',default='q') answer = answer_dict.get(id,') expected = utils.ParseNumber(self.get_xml_attr('answer')) got = utils.ParseNumber(answer) if (got is None) or (expected is None): annotation = ' elif got == expected: annotation = html.img(src='right.gif') else: annotation = html.img(src='wrong.gif) return html.p[ self.children_handle_request(answer_dict,**kw), ' ', html.input(type="text",name=id,value=answer,size='5'), ' ', annotation ] tags = {'question':tag_question}
Pedro J. Muoz Merino Diseo de Aplicaciones Telemticas 29

Prerrequisitos de esta temtica

Asignatura de Software de Comunicaciones, http://www.it.uc3m.es/pbasanta/SOFTCOM

Pedro J. Muoz Merino

Diseo de Aplicaciones Telemticas 30

Trabajo propio del alumno asociado a la sesin

Tutorial de PHP (Bsico, Avanzado, Base de Datos, referencia): http://www.w3schools.com/php/default.asp Tutorial de CGI y Perl (Introduction, overview, variables, scalars, arrays, if/else, loopings, database management, cgi programming: http://www.tutorialspoint.com/perl/index.htm Informacin sobre programacin Web con python en XTutor (todos los enlaces de XDocs y tag handlers), http://scripts.mit.edu/~cjt/xtutor/

Pedro J. Muoz Merino

Diseo de Aplicaciones Telemticas 31

Referencias Extra

Practical PHP Programming, http://www.tuxradar.com/practicalphp Tim Converse, Joyce Park, PHP bible, Wiley Publishing, 2002 W. E. Weinman, The CGI book, New Riders Pub, 1996 Tutorial de programacin en python, http://docs.python.org/tutorial/

Pedro J. Muoz Merino

Diseo de Aplicaciones Telemticas 32

You might also like