PHP - Headers already sent by.....

Dezembro 2016

Ao utilizar uma função PHP que lida com os cabeçalhos http, como por exemplo:
  • header()
  • setcookie()
  • session_start()


É importante utilizar estas funções antes de gerar qualquer fluxo para o cliente. A partir do momento em que a informação foi enviada para o cliente (em geral: o início da exposição de uma página web), isso significa que os cabeçalhos HTTP já foram enviados para o cliente, automaticamente. Este tipo de fluxo é muitas vezes enviado com as funções de eco, impressão, etc.

Se houver um espaço livre antes da primeira abertura de marcação PHP, este espaço poderá ser enviado como início de página para o cliente e, logo, os cabeçalhos http o precederão automaticamente, para indicar ao cliente o tipo de fluxo. Veja um exemplo do cabeçalho com a página inicial do Kioskea:

Server: Apache   
X-Powered-By: Php/4.4.0-0.dotdeb.0   
Keep-Alive: timeout=15, max=50   
Connection: Keep-Alive   
Transfert-Encoding: chunked   
Content-type: text/html; charset=iso-8859-1


Portanto, temos que entender o sistema:
  • Eu uso "eco" ou "imprimir" no início do meu script. Idem, se eu tiver um espaço no meu script que não esteja incluído nas minhas marcações PHP, ele será considerado como parte da fonte da página a ser enviada e os cabeçalhos o precederão. Isso pode provocar um erro do tipo que busca a solução durante vários dias) .
  • O servidor envia estes dados e os faz preceder, por padrão, dos cabeçalhos que indicam ser uma página html.
  • Se, depois disso, no meu script eu usar uma função que afeta os cabeçalhos, ela não poderá mais fazê-lo porque os cabeçalhos já foram enviados. Então, eu obtenho um erro do tipo "headers already sent".

Utilizar header() após session_start()


P: Mas como eu faço, então, para fazer um redirecionamento com o header() se eu usar o session_start() antes?

R: É impossível. Neste caso, você deverá escolher uma maneira de redirecionar, normalmente isso é feito em javascript, ou melhor, em html na marcação meta refresh:

Webmaster redirecionar



Tradução feita por Lucia Maurity y Nouira

Veja também :
Este documento, intitulado « PHP - Headers already sent by..... »a partir de CCM (br.ccm.net) está disponibilizado sob a licença Creative Commons. Você pode copiar, modificar cópias desta página, nas condições estipuladas pela licença, como esta nota aparece claramente.