PDF de programación - Capítulo 15: Manejo de HTTP en PHP - Curso de PHP

Imágen de pdf Capítulo 15: Manejo de HTTP en PHP - Curso de PHP

Capítulo 15: Manejo de HTTP en PHP - Curso de PHPgráfica de visualizaciones

Publicado el 15 de Julio del 2018
464 visualizaciones desde el 15 de Julio del 2018
26,4 KB
8 paginas
Creado hace 23a (09/02/2001)
Capítulo 15: Manejo de HTTP en PHP.

Uno de los temas más importantes en todo lenguaje de scripting usado para generación dinámica de sitios web
y aplicaciones web es el manejo del protocolo HTTP, conexiones, métodos GET y POST, uploads, headers,
cache y demás alternativas. Todas estas funciones están bien soportadas en php de forma tal de tener desde el
lneguaje un control completo sobre la forma en que el server interactua con el browser.

Headers.

Una de las funciones más importantes de PHP es la función “header” que sirve para enviar al browser un
determinado header HTTP, por default en cuanto un script PHP usa una función de salida o transmite algo al
browser php envía el header “Content-Type: text/html” al browser. Por eso es importante destacar que la
funcion header solo puede usarse ANTES de realizar cualquier tipo de salida al browser.

Ejemplos:

header(“Location: http://lugar/pepe.php”);

Este es un header http que sirve para redireccionar al browser a otra página, script o URL, es muy util para
scripts php que procesan datos recibidos desde un formulario o similar y luego en funcion de los datos
redireccionan al browser a una página que por ejemplo puede mostrar errores en el ingreso de datos, aceptar
los datos o simplemente volver a la página que llamo al script.

Este tipo de redirección sólo puede usarse si no se emitió ninguna salida al browser, si ya se emitió una salida
al browser y es necesario redireccionar la página debemos generar desde PHP código JavaScript que
transmitimos al browser y el browser si es capaz de interpretar JavaScript podrá redireccionarse a la página
pasada, por ejemplo:

<?
print(“Cosas anteriores”);
if($redireccionar) {
?>
<script>
location.href=<?print($URL);?>
</script>
?<
}
?>

El browser recibe por ejemplo:

<script>
location..href=http://www.yahoo.com
</script>

Y automaticamente se redirecciona al URL pasado, el uso de JavaScript desde PHP es importante (ver el
capítulo de programacion en el cliente desde el server)

Otro header importante que ya vimos es el de imagen que enviamos antes de pasarle al browser una imagen
generada dinámicamente.

Una de las funciones importantes de los headers HTPP es controlar el comportamiento del cache del browser,
en numerosas ocasiones tendremos que codificar scripts que generan una cierta salida que no es deseable que
sea cacheable, si no impedimos que el browser cachee el resultado del script el usuario tendrá que refrescar
manualmente la página desde el browser para ver el nuevo resultado. Los siguientes headers http impiden que
el browser cachee una página y sirven tanto para Internet Explorer como para Netscape Navigator:

header("Cache-Control: no-cache, must-revalidate");
header("Pragma: no-cache");
header("Expires: Mon,26 Jul 1997 05:00:00 GMT");

El protocolo HTTP dispone de un mecanismo de autorización básico mediante el cual puede pedirse al
browser que promptee al usuario por un usuario y password, luego estos datos se transmiten al web-server y el
mismo debe encargarse de autorizar al usuario o no según corresponda. Desde PHP podemos generar los
headers correspondientes para que el browser pida al usuario un usuario y password y luego validar estos
datos desde el script php (usando una base de datos o lo que corresponda):

<?php
if(!isset($PHP_AUTH_USER)) {
Header("WWW-Authenticate: Basic realm=\"My Realm\"");
Header("HTTP/1.0 401 Unauthorized");
echo "Text to send if user hits Cancel button\n";
exit;} else {
echo "Hello $PHP_AUTH_USER.<P>";
echo "You entered $PHP_AUTH_PW as your password.<P>";
}
?>

El header “WWW-Authenticate: Basic realm=\”My Realm\”” fuerza al browser a preguntar al usuario por un
user y password, si el usuario cancela el script sigue su ejecución en la próxima línea (notar que enviamos un
header de acceso no autorizado y termina el script”). Si el usuario ingresa un usuario y password el browser
vuelve a invocar al script pasándole como variables $PHP_AUTH_USER y $PHP_AUTH_PW.

Control de la conexión usando PHP.

Internamente PHP mantiene un status de la conexión con el cliente durante la ejecución del script, el valor del
status es habitualmente “NORMAL”, pero puede cambiar a “ABORTED” si el usuario presiona el botón de
STOP o a “TIEMOUT” si es script sobrepasa el tiempo limite de ejecución que se fija en (/var/lib/php.ini). Es
posible controlar que se hace si el usuario interrumpe la ejecución de un script con el botón de STOP usando
dos funciones de PHP:

boolean=connection_aborted()

Devuelve true si la conexión fue abortada por el usuario presionando STOP, cerrando el browser o similar.

register_shutdown_function(nombre_funcion)

Esta funcion permite registrar el nombre de una función que se ejecutara en los siguientes casos:

a) Cuando el script intenta enviar algo al browser pero el usuario aborto la conexión.
b) Cuando termina normalmente la ejecución del script.

Para distinguir estos dos casos dentro de la función que se registre es importante usar la función
connection_aborted para saber si la función se llama por la terminación normal del script o por conexión
abortada. La función registrada con register_shutdown_function no puede generar ninguna salida (lo cual
dificulta debuggearla), usualmente sirve para chequear consistencia en bases de datos, eliminar archivos
temporales que pueden quedar abiertos, loggear un problema, registrar que la conexión fue abortada, hacer
rollback de una transacción o similares.

Transacciones HTTP usando PHP.

Una modalidad muy en boga en estos días es el establecimiento de servidores de transacciones HTTP o
HTTPS (usando SSL), muchas veces el propósito de estos servidores es hacer de gateway para solicitar
servicios a una determinada red de servidores. Por ejemplo supongamos que el site www.super.com tiene 56
servidores, para poder interactuar con empresas externas www.super.com muchas veces tiene el problema de
que un agente externo debe desencadenar una acción en uno de sus web servers, setear “n” servers para
permitir que algunas direcciones en particular tengan acceso a cierta funcionalidad es muy complejo por lo
que www.super.com decide instalar un servidor de transacciones, cualquiera tiene acceso a este servidor para
solicitar servicios usando el protocolo HTTP y este servidor tiene acceso a los servers de www.super.com, el
unico cambio en los 56 servers es permitir que el servidor de transacciones opere sobre ellos.

Para generar transacciones HTTP muchas veces es necesario que un scrip “simule” postear datos a un script
como si los datos vinieran de un formulario HTML, a continuación sugerimos 2 distintas formas de generar
transacciones POST desde un script sin necesidad de que un usuario submitee los datos:

Método 1: Usando CURL.

Curl es una pequeña utilidad que corre en Unix o Windows y permite generar paquetes HTTP de todo tipo,
desde PHP podemos llamar a CURL como un programa externo para generar la transacción de la forma:

<?php
$data="hola=mundo";
$URL="luigi.arcadia.com.ar/pruebas/profo.php";
exec("/usr/local/bin/curl -m 120 -d \"$data\" http://$URL -L",$return_msg_array,$return_number);
for($i=0;$i<count($return_msg_array);$i++) {
$results=$results.$return_msg_array[$i];
}
print("Resultado:$results\n");

Como vemos “curl” es llamado usando la función “exec” al ser un programa externo, $data tiene los datos a
enviar en formato “nombre1=valor1&nombre2=valor2....”, curl devuelve un vector donde cada elemento del
vector es una línea de la salida que devuelve el server al recibir el request en modo POST.
En este script como vemos pegamos todas las líneas de salida y mostramos el resultado en pantalla.

Método 2: Usando la clase http_post.

Si no que quiere usar un programa externa podemos usar una clase que denominamos http_post y permite
postear datos en un servidor, un ejemplo de uso de esta clase es:

<?
include("class_post.php");
$a=new http_post;
$a->set_action("http://luigi.arcadia.com.ar/pruebas/profo.php");
$a->set_element("hola","mundo");
$res=$a->send(0);
print("Resultado: $res");
?>

Como vemos en este script hacemos lo mismo que en el anterior, la diferencia principal radica en que esta
clase devuelve como resultado “TODA” la salida del web server (incluyendo headers) mientras que CURL en
la forma en que fue llamado no devuelve los headers.

La clase http_post es la siguiente:

<?php
#
# http_post - PHP3 class for posting a 'form' from within a php3 script
# Version 0.5b
#
# Copyright 2000
# Alan van den Bosch ([email protected])
# Sanguis Pty Ltd (acn 061 444 031)
#
# Licence:
# You are granted the right to use and/or redistribute this
# code only if this licence and the copyright notice are included
# and you accept that no warranty of any kind is made or implied
# by the author or Sanguis Pty Ltd.
#
#
# Methods:
#
# http_post()
# Constructor used when creating a new instance of the http_post class.
# Returns true on success.
# ie.
# $a=new http_post;
#
#
# set_server(string SERVER)
# Set the server of the URI you wish to post to. see also set_action()
# Returns true on success.
# ie.
# $a->set_server("127.0.0.1");
# or
# $a->set_server("www.somehost.org");
#
#
# set_port(string PORT)
# Set the tcp port of the URI you wish to post to. see also set_action()
# Returns true on success.
# ie.
# $a->set_port("8080");
#
#
# set_file(string FILENAME)
# Set the filename of the URI you wish to post to. see also set_action()
# Returns true on success.
# ie.
# $a->set_file("/incoming.php3");
#
#
# set_action(string ACTION)
# Set the URI you wish to post to.
# Returns true on success.
# ie.
# $a->set_action("http://www.somehost.org:8080/incoming.php3");
#
# set_enctype(string ENCTYPE)
# Set the encoding type used for the post. Can have the values
# "application/x-www-form-urlencoded" or "multipart/form-d
  • Links de descarga
http://lwp-l.com/pdf12544

Comentarios de: Capítulo 15: Manejo de HTTP en PHP - Curso de PHP (0)


No hay comentarios
 

Comentar...

Nombre
Correo (no se visualiza en la web)
Valoración
Comentarios...
CerrarCerrar
CerrarCerrar
Cerrar

Tienes que ser un usuario registrado para poder insertar imágenes, archivos y/o videos.

Puedes registrarte o validarte desde aquí.

Codigo
Negrita
Subrayado
Tachado
Cursiva
Insertar enlace
Imagen externa
Emoticon
Tabular
Centrar
Titulo
Linea
Disminuir
Aumentar
Vista preliminar
sonreir
dientes
lengua
guiño
enfadado
confundido
llorar
avergonzado
sorprendido
triste
sol
estrella
jarra
camara
taza de cafe
email
beso
bombilla
amor
mal
bien
Es necesario revisar y aceptar las políticas de privacidad