PHP

Em por

No artigo de hoje, veremos como corrigir, ou em último caso, ao menos contornar um erro que muito iniciante acaba se deparando por aí, o famoso “Warning: Cannot modify header information - headers already sent by…” e que nem sempre é fácil de descobrir o que se fazer para resolver esse erro (lembrando que não é erro, é um warning, ou seja, apenas um aviso).

Erro com SESSION

Muitas vezes em nosso LOCALHOST funciona tudo direitinho e quando subimos a aplicação para nosso SERVIDOR, para surpresa de muitos, tudo para de funcionar! Antes de resolver o problema você precisa entender por que esse erro acontece.

Por que o erro “headers already sent” acontece?

Toda página na internet está hospedada em servidor e o seu navegador solicita ao servidor da página, o resultado (HTML) da página com endereço X, então servidor interpreta os arquivos e começa a responder, enviando um cabeçalho de resposta (o famoso header). Esse cabeçalho contém informações sobre a codificação da página, tamanho, tempo de duração do cache, hora da ultima atualização e tudo que seja relevante, sobre uma página da Internet, para um navegador.

Depois do envio do header o servidor envia o HTML da página toda e o seu browser começa a montar ela pra você. Quando você recebe o erro “headers already sent” no aviso, significa que o seu servidor já enviou o header e após esse envio, você está tentando criar ou alterar alguma informação que deva ser enviada no header, o que não é permitido.

Se você não usa nenhuma função de manipulação de headers, ou tem certeza que você não fez nada e está recebendo esse erro, ainda há uma explicação pra isso! Em se tratando de PHP, o header começa a ser enviado logo que você insere o primeiro caractere no HTML final da página.  Seja fora do código PHP com HTML normal, seja dentro do código PHP com um echo ou print().

Às vezes até mesmo comentários são motivos para dor de cabeça neste sentido! Outra coisa que pode atrapalhar muito é a codificação do Front-end que você está usando para desenvolver. Tem uma matéria falando sobre isso aqui.

Resolvendo o problema “headers already sent”!

Se você não fez nenhuma manipulação do header e ainda tá recebendo o erro, para resolver o problema primeiro você precisa colocar todo código que trabalhe com headers (sessões, cookies, redirecionamentos e etc.), antes de enviar qualquer caractere pro HTML.

Os cookies e sessões, bem como os redirecionamentos e encriptação de conteúdo devem ser enviados, criados, definidos e modificados antes de qualquer HTML.

Agora se você conferiu tudo, certificou que o seu código não tem o chamado “UTF-8 with BOM”, não tem comentários e nenhuma sujeira antes do código HTML, você pode usar o comando do PHP chamado ob_start() em conjunto com o ob_end_flush().

ob_start: Esta função irá ativar o buffer de saída. Enquanto o buffer de saída estiver ativo, não é enviada a saída do script (outros que não sejam cabeçalhos), ao invés a saída é guardada em um buffer interno, esse comando indica a abertura do cache.

ob_end_flush:  Esta função irá enviar o conteúdo do buffer mais em cima (se existir algum) e desativar o buffer de saída, liberando seu conteúdo.

Como e onde utilizar o comando ob_start e ob_end_flush?

A função ob_start deve ser utilizada no inicio do documento, antes de qualquer coisa, mas logicamente após as tags de abertura do PHP.

 <?php ob_start(); ?> <HTML> <HEAD> </HEAD> <BODY> </BODY> </HTML>

Já a função ob_end_flush deve ser a última palavra escrita no código, desta maneira serão tratadas as informações em fluxo correto e não terá mais o erro chato de “headers already sent”.

 </HTML> <?php ob_end_flush(); ?>

Espero ter colaborado e qualquer dúvida, crítica ou sugestão, favor utilize o comentário para que possamos ajudar no que for possível. wink

 

Veja Também:

Artigos Relacionados a categoria: PHP

Olá, deixe seu comentário para Erro com SESSION Cannot modify header information headers already sent by no PHP

Enviando Comentário Fechar :/

...AINDA NÃO VIU NOSSO PORTFÓLIO?

Se ainda não viu nosso Portfólio e quer conhecer um pouco mais... aproveite e veja agora mesmo e tenha um site de qualidade para o seu negócio!

[contato]
Ver o Portfólio Agora