Descripción
void
header ( string cadena [, bool reemplazar [, int cod_respuesta_http]] )
La función header() es usada para
enviar cabeceras HTTP puras. Consulte la
especificación HTTP/1.1
para más información sobre las cabeceras
HTTP.
El parámetro opcional reemplazar
indica si la cabecera debe reemplazar una cabecera previa
semejante, o si debe agregar una segunda cabecera del mismo tipo.
Por defecto esta función procede a reemplazar, pero si
pasa FALSE como el segundo argumento, puede obligar a que se
envÃen múltiples cabeceras del mismo tipo. Por
ejemplo:
El segundo parámetro opcional,
cod_respuesta_http, obliga a que el
código de respuesta HTTP sea el valor especificado. (Este
parámetro se encuentra disponible a partir de PHP 4.3.0.)
Existen dos llamadas de cabecera que son casos especiales. El
primero es una cabecera que comience con la cadena
"HTTP/" (no es importante la diferencia entre
mayúsculas y minúsculas), la cual será usada
para elegir el código de status HTTP a enviar. Por
ejemplo, si ha configurado a Apache para que use un script PHP a
la hora de gestionar peticiones por archivos inexistentes (usando
la directiva ErrorDocument), puede que quiera
asegurarse de que su script genere el código de status
apropiado.
Nota:
La lÃnea de cabecera con el status HTTP será
siempre la primera en ser enviada al cliente, independientemente
de que la llamada a header() correspondiente
sea la primera o no. El status puede ser sobrescrito llamando
header() con una nueva lÃnea de status
en cualquier momento, a menos que las cabeceras HTTP ya hayan
sido enviadas.
El segundo caso especial es la cabecera "Location:". No solo
envÃa esta cabecera de vuelta al navegador, sino que
también devuelve un código de status
REDIRECT (302) al navegador a menos que
algún código de status 3xx haya
sido enviado ya.
Nota:
HTTP/1.1 requiere una URI absoluta como
argumento a Location:
incluyendo el esquema, el nombre del host y una ruta absoluta,
aunque algunos clientes aceptan URIs relativas. Usualmente puede
usar $_SERVER['HTTP_HOST'],
$_SERVER['PHP_SELF'] y
dirname() para construir una URI absoluta a
partir de una relativa:
Con frecuencia, los scripts PHP generan contenido dinámico
que no debe ser almacenado en caché por el navegador del
cliente o cualquier caché de proxy entre el servidor y el
navegador del cliente. Muchos proxys y clientes pueden ser
obligados a deshabilitar el uso de cachés con:
Nota:
Puede que encuentre que sus páginas no son puestas en
caché aun cuando no use todas las cabeceras
enteriores. Existe un número de opciones que puede que se
encuentren a disposición de los usuarios en sus
navegadores para modificar sus comportamientos de caché
predeterminados. Al enviar las anteriores cabeceras, usted
deberÃa sobrescribir cualquier parámetro de
configuración que de otra forma podrÃa estar
causando que la salida de su script sea puesta en caché.
Adicionalmente, session_cache_limiter() y el
parámetro de configuración
session.cache_limiter pueden ser usados para
generar automáticamente las cabeceras de uso de
caché apropiadas cuando se están usando sesiones.
Recuerde que la función header() debe
ser llamada antes de que cualquier salida sea enviada, ya sea
mediante etiquetas HTML normales, lÃneas en blanco de un
archivo, o desde PHP. Es un error bastante común
interpretar código extra con include(),
require(), o alguna otra función de
acceso de archivos, y terminar con espacios o lÃneas en
blanco que son impresas antes de un llamado a
header(). El mismo problema existe cuando se
usa un archivo PHP/HTML único.
Nota:
A partir de PHP 4, puede usar búferes de salida para
evitar este problema, con el efecto lateral de que toda su
salida al navegador es colocada en un búfer en el
servidor hasta que usted la envÃe. Puede lograr esto
usando ob_start() y
ob_end_flush() en su script, o al definir la
directiva de configuración
output_buffering en su php.ini u otros
archivos de configuración.
Si desea que el usuario reciba un cuadro de diálogo para
almacenar los datos que usted envÃa, como en el caso de un
archivo PDF generado al vuelo, puede usar la cabecera Content-Disposition para indicar un
nombre de archivo recomendado y obligar a que el navegador
despliegue un diálogo de guardado.
Nota:
Existe un problema en Microsoft Internet Explorer 4.01 que
impide que esto funcione. No existe forma de evitar este
inconveniente. Hay también un fallo en Microsoft Internet
Explorer 5.5 que interfiere con esto, el cual puede ser resuelto
al actualizarse a Service Pack 2 o superior.
Nota:
Si se encuentra habilitado el modo
seguro, el uid del script es agregado a la sección
realm de la cabecera
WWW-Authenticate si define ésta
cabecera (usada para Autenticación HTTP).
Vea también headers_sent(),
setcookie(), y la sección sobre autenticación HTTP.