php

/ Tutoriais

Erro PHP: Cannot modify header information – headers already sent

Na criação de sites e desenvolvimento de aplicações WEB muitos desenvolvedores se deparam com o erro “Cannot modify header information – headers already sent”. Mas afinal, o que é esse erro e por que acontece?

Pra começar precisamos entender o significado da mensagem, e para isso vamos traduzi-la: “Não é possível alterar a informação do cabeçalho – cabeçalhos já foram enviados”.

Agora precisamos apenas entender como funciona a comunicação HTTP, usada nas páginas WEB. Quando você acessa um site, a transferência do conteúdo dele para o seu navegador se dá em blocos. Cada bloco tem um pedaço do conteúdo do site. Entretanto, existem informações que o navegador precisa receber já no primeiro bloco de conteúdos, pois essas informações vão determinar como ele irá entender os próximos conteúdos e como ele irá apresentar o seu site. Um exemplo de informação como essa é a codificação que seu site está escrito (UTF-8, ISO, etc).

Essas informações são armazenadas numa área chamada cabeçalho, que é enviada ao navegador no primeiro bloco de conteúdo. Assim, uma vez que você tenha enviado algum conteúdo para o navegador do visitante do seu site, o cabeçalho já terá sido enviado, e você não poderá mais realizar nenhuma mudança nele.

Por exemplo, o seguinte código PHP irá gerar um erro do tipo “Cannot modify header information – headers already sent”:

<?php

echo(‘Enviando conteúdo pro navegador do cliente.’);
header(‘Content-Type: text/html; charset=utf-8′);

?>

Uma causa muito comum para esse erro é a tentativa de alterar uma variável de sessão após enviar conteúdo para o cliente. A manipulação de variáveis de sessão exige a adição de alguns parâmetros ao cabeçalho HTTP e não pode ser realizada após o envio de conteúdo para o cliente. Outra causa comum, é o acréscimo acidental de uma quebra de linha ao fim de um arquivo PHP que está sendo incluído na página que está tentando alterar o cabeçalho (veja Fechar ou não as TAGs PHP?).

Espero ter esclarecido o tema e qualquer dúvida é só perguntas! Um grande abraço!



Arivan Bastos

Analista de sistemas, desenvolvedor Web e de games. Possui domínio de PHP, SQL e ActionScript 3. Possui conhecimentos avançados em Starling Framework, Corona SDK e Yii Framework. Atua na Virtualize na criação de sites, desenvolvimento de jogos, desenvolvimento de aplicativos mobile e desenvolvimento de aplicativos para redes sociais.