Header

1. Función Header

Esta función es usada para enviar encabezador HTTP sin formato. Recuerde que header() debe ser llamado antes de mostrar nada por pantalla: etiquetas HTML ni siquiera una línea en blanco ya sea desde un archivo o desde PHP. Es un error muy común leer código con funciones como include o require, u otro tipo de funciones de acceso a archivos que incluyen títulos, espacios o líneas en blanco que se muestran antes de llamar a la función header(). Sucede el mismo problema cuando se usa un solo archivo PHP/HTML.

Esta dirección debe venir antes de que cualquier salida HTML se haya mostrado en el navegador.

header("Location: http://www.perut.org/donacion.php");
header("Refresh:5;url=perut.php"); 
header("Content-Type:application/xls");
header("Content-Disposition:attachment");
header("Content-Transfer-Encoding:binary");
header($_SERVER["SERVER_PROTOCOL"]." 404 Not Found"); 
header("Content-Disposition: attachment; filename=\"" . basename($filename) . "\""); //Usara para descargar archivo

La funcion header() le permite enviar cabeceras HTTP arbitrarias. Entre otras cosas, header() puede ser de utilidad para autenticacion y redireccion a nivel de pagina.

Si se quiere preguntar al usuario si quiere guardar los datos que se están enviando, como un archivo PDF generado, puede usarse el encabezado Content-Disposition para proporcionar un nombre de archivo recomendado y forzar al navegador a mostrar el diálogo para guardar el archivo.

header('Content-type: application/pdf'); //Muestra un PDF
header('Content-Disposition: attachment; filename="perut.pdf"'); //Se llama a perut.pdf
readfile('original.pdf'); //La fuente se encuentra en original.pdf

Los scripts PHP normalmente generan contenido dinámico que no debe ser puesto en caché por el navegador cliente o por ningún proxy caché entre el servidor y el navegador cliente. En muchos proxies y clientes se puede forzar la desactivación de la caché con:

header("Cache-Control: no-cache, must-revalidate"); // HTTP/1.1
header("Expires: Fri, 14 Jul 2017 05:00:00 GMT");   // Fecha en el pasado

No se puede enviar cabeceras despues de que se genere el contenid de pagina habitual.

Es importante tener en cuenta que los encabezados se envían realmente cuando el primer byte se envía al navegador. Si está reemplazando los encabezados en sus secuencias de comandos, esto significa que la colocación de las sentencias echo y los buffers de salida pueden afectar realmente a los encabezados que se envían. En el caso de los redireccionamientos, si olvidas terminar el script después de enviar el encabezado, agregar un buffer o enviar un carácter puede cambiar la página a la que se envían tus usuarios.

ob_start();
header("location: 1.html"); 
echo "send data"; 
header("location: 2.html"); //reemplaza a 1.html
ob_end_flush(); //Ahora el encabezado en esviado