Função header() do PHP
Definição e uso
A função header() envia cabeçalhos HTTP originais para o cliente.
É importante reconhecer que a função header() deve ser chamada antes de qualquer saída real ser enviada (no PHP 4 e versões superiores, você pode usar cache de saída para resolver esse problema):
<html> <?php // Resultado de erro // Saída existente antes da chamada header() header('Location: http://www.example.com/'); ?>
Sintaxe
header(string,replace,http_response_code)
Parâmetros | Descrição |
---|---|
string | Obrigatório. Especifica a string do cabeçalho a ser enviada. |
replace |
Opcional. Indica se o cabeçalho deve substituir o cabeçalho anterior ou adicionar um segundo cabeçalho. Padrão é true (substituição). false (permite múltiplos cabeçalhos do mesmo tipo). |
http_response_code | Opcional. Força o código de resposta HTTP para o valor especificado. (Disponível em PHP 4 e versões superiores) |
Dicas e Comentários
Comentário:A partir do PHP 4.4, essa função impede o envio de múltiplos cabeçalhos em uma vez. Isso é uma medida de proteção contra ataques de injecção de cabeçalhos.
Exemplo
Exemplo 1
<?php // Data no passado header("Expires: Mon, 26 Jul 1997 05:00:00 GMT"); header("Cache-Control: no-cache"); header("Pragma: no-cache"); ?> <html> <body> ... ...
Comentário:O usuário pode configurar algumas opções para alterar as configurações de cache padrão do navegador. Ao enviar os cabeçalhos acima, você pode sobrescrever qualquer uma dessas configurações, forçando o navegador a não fazer cache!
Exemplo 2
Avisar o usuário para salvar um arquivo PDF gerado (o cabeçalho Content-Disposition é usado para fornecer um nome de arquivo recomendado e forçar o navegador a exibir uma caixa de diálogo de salvar):
<?php header("Content-type:application/pdf"); // O arquivo será chamado downloaded.pdf header("Content-Disposition:attachment;filename='downloaded.pdf'"); // Fonte PDF no original.pdf readfile("original.pdf"); ?> <html> <body> ... ...
Comentário:O Internet Explorer 5.5 tem um bug que impede o mecanismo acima. Atualizando para o Service Pack 2 ou versão superior resolve esse bug.