PHP - Universidad Pública de Navarra

Anuncio
El servidor Web
Área de Ingeniería Telemática
Dpto. Automática y Computación
http://www.tlm.unavarra.es/
Server-side
Área de Ingeniería Telemática
Dpto. Automática y Computación
http://www.tlm.unavarra.es/
Server-side
web
80 server
pro
st a
tus
statusprog
Son las 10:21
status
prog
13 personas han
visitado la pagina
GET /
ej:
envia la hora actual
envia las visitas que ha habido a la pagina
envia los mensajes de otros usuarios
....
GE
T/
‣
del servidor
En lugar de enviar el contenido
El fichero contiene un programa que
genera el objeto
g
‣ Un URI que hace referencia a un fichero
Son las 10:23
14 personas han
visitado la pagina
Common Gateway Interface (RFC-3875)
GET /prog.cgi?x=32?nombre=mikel
web server
La salida del programa
se envia al cliente
Variables del servidor
en variables de entorno
QUERY_STRING="x=32&nombre=mikel"
Datos de POST
a la entrada estandar
prog.cgi
Content-type: text/html
<pre>
Hola, soy un CGI
</pre>
‣ El servidor web lanza un nuevo proceso
‣ Le pasa información del servidor y de la petición en variables de entorno
‣ Le pasa los datos recibidos (POST o PUT) en la entrada estandar
‣ El resultado del programa se envía al cliente
‣ El CGI es responsable de enviar la separación de fin de la cabecera... con lo
que puede enviar cabeceras (p.ej: Content-type)
Ejemplos CGIs
#!/usr/bin/env python
from os import environ
from sys import stdin
from time import *
print('Content-type: text/html')
print('\n')
print('<pre>')
print(strftime("%F %T",localtime(time())))
print('</pre>')
import java.util.Date;
public class jcgi {
public static void main(String[] args) {
System.out.printf("Content-type: text/html\n\n");
System.out.printf("<pre>");
System.out.printf(new Date().toString());
System.out.printf("</pre>");
}
}
Evolucion
‣ FastCGI
‣ Un único proceso va procesando las peticiones
‣ Separado del servidor web, comunicación por un socket
‣ Módulos del servidor que le permiten ejecutar programas
‣ mod_perl, mod_php, mod_python, mod_ruby
‣ Lenguajes muy orientados a procesar paginas: PHP
‣ ASP .NET VBScript en IIS
‣ Servlets
‣ Servidor en Java
‣ Se construyen objetos para servir las peticiones pero no procesos
‣ JSP Java Server Pages
Ejemplo PHP
<!DOCTYPE html>
<html>
<head>
<title>Probando PHP</title>
</head>
<body>
<h1>
<?php echo "Hola SWS"; ?>
</h1>
</body>
</html>
<!DOCTYPE html>
<html>
<head>
<title>Probando PHP</title>
</head>
<body>
<h1> <?php echo date("l, j F Y, G:i");
</body>
</html>
?>
</h1>
Ejemplos ASP
<!DOCTYPE html>
<html>
<body>
<%
response.write("Hello World!")
%>
</body>
</html>
<!DOCTYPE html>
<html>
<body>
Today's date is: <%response.write(date())%>.
<br>
The server's local time is: <%response.write(time())%>.
</body>
</html>
Ejemplo Servlet
import
import
import
import
java.io.*;
javax.servlet.*;
javax.servlet.http.*;
java.util.Date;
public class HelloWWW extends HttpServlet {
public void doGet(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html");
PrintWriter out = response.getWriter();
out.println("<HTML>\n<HEAD><TITLE>Hello WWW</TITLE></HEAD>\n");
out.println("<BODY>\n<PRE>\n");
out.println(new Date().toString());
out.println("</PRE>\n</BODY></HTML>");
}
}
Ejemplos JSP
<html>
<body>
<%
out.print("Hello World!");
%>
</body>
</html>
<%@ page language="java" import="java.util.*" errorPage="" %>
<html>
<body>
Current Date time: <%=new java.util.Date()%>
</body>
</html>
PHP
Área de Ingeniería Telemática
Dpto. Automática y Computación
http://www.tlm.unavarra.es/
PHP
‣ PHP (Personal Home Page ... PHP Hypertext Preprocesor)
‣ Server-side
‣ Lenguaje que genera la página ... preprocesando una plantilla
<!DOCTYPE html>
<html>
<head>
<title>Probando PHP</title>
</head>
<body>
<h1> <?php echo date("l, j F Y, G:i");
</h1>
</body>
</html>
index.php
PHP
?>
mod_php
<!DOCTYPE html>
<html>
<head>
<title>Probando PHP</title>
</head>
<body>
<h1>Monday, 25 February 2013, 19:02
</h1>
</body>
</html>
se envia al cliente
PHP
‣ Open source
‣ Simple para el principiante pero con muchas características
‣
‣
‣
‣
avanzadas
Soporta la gran mayoría de servidores web
Permite generar HTML pero también cualquier imagenes, Flash,
XML...
Soporta gran numero de bases de datos Oracle, mSQL, MySQL,
ODBC, Sybase...
Soporta un gran número de servicios y protocolos: LDAP, IMAP,
SNMP, NNTP, POP3, HTTP...
‣ Muy extendido
‣ LAMP (Linux, Apache, MySQL, PHP)
Tambien hay WAMP, MAMP, DAMP, XAMP...
Configuración del servidor
‣ Normalmente la extension .php indica que debe pasarse por
el preprocesador PHP
AddType application/x-httpd-php .php
AddType application/x-httpd-php5 .php
PHP Tags de inserción
‣ La más estandar y compatible con XHTML y XML
<?php
codigo php
?>
‣ Como script
<script language="php"> codigo php </script>
‣ Se puede habilitar esta
<? codigo php ?>
<?=expresion php ?>
‣ Y tipo ASP
<% codigo php %>
<%=expresion php %>
PHP instrucciones y comentarios
‣
‣
‣
‣
Instrucciones separadas por ;
Las variables se marcan con $
Comentarios con // # o /* comentario */
La instrucción básica de imprimir es echo
<!DOCTYPE html>
<html>
<head>
<title>Probando PHP</title>
<body>
<h1>
<?php
// Lee la fecha
$fecha=date("l, j F Y, G:i");
# Imprime la fecha
echo $fecha;
/*
como puedes ver los comentarios
se pueden poner de varias formas
en PHP
*/
?>
</h1>
</body>
</html>
</head>
Modo PHP avanzado
‣ Se puede entrar y salir del modo PHP en medio de una
instrucción condicional o bucle
<!DOCTYPE html>
<html>
<head>
<title>Probando PHP</title>
</head>
<body>
<?php
if ( $usuario_valido ) {
?>
<h1>Bienvenido <?php echo $nombre_usuario; ?></h1>
<?php
} else {
?>
<h1>NO AUTORIZADO</h1>
<?php
}
?>
...
Cuidado con las cabeceras...
‣ Se pueden enviar cabeceras para HTTP siempre que no se haya
enviado nada antes...
<?php
// Vamos a mostrar un PDF
header('Content-type: application/pdf');
echo "...";
?>
‣ Pero enviar cualquier cosa incluso un salto de linea antes del <?php es
enviar
<?php
// Vamos a mostrar un PDF
header('Content-type: application/pdf');
echo "...";
?>
Error al enviar
la cabecera
En resumen
‣ Funcionamiento básico de programas server-side
‣ Primera idea: CGI
‣ Evolución: PHP / ASP / Servlets
‣ Generación por preprocesado
‣ y PHP
‣ Ejemplos simples
‣ Inserción
‣ Instrucciones
‣ Más en próximas clases
Descargar