PHP
Erro com SESSION Cannot modify header information headers already sent by no PHP

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).
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. =)
Gigasystems Login:
Informe seu e-mail abaixo para continuar!
XVeja Também:
Artigos Relacionados a categoria: PHP
Cotações para compra e venda de Moedas estrangeiras com PHP
27 July de 2016
Gerenciador de dependências Composer
14 January de 2016
Erro ao acessar um arquivo externo com o comando file_get_content
04 November de 2015
Baixando anexo do email no servidor com IMAP e PHP
27 August de 2015
Olá, deixe seu comentário para Erro com SESSION Cannot modify header information headers already sent by no PHP
Leandro Silva
Fausto Vieira
Amaury Frazão
Abner Santos
Kevin Alec Neri Lazzarotto
Bruno Silva
Vlws vcs são FODAS
Uellington S Lima
Alyson Ronnan Martins
Agora esta show!!! muito obrigado.
Neto Sales
Daniel Campos
Carlos Alberto Ramos Teixeira
Marcos, Perdão, mas estou tonto ainda. Estou o dia todo para resolver a mensagem: "Warning: Cannot modify header information - headers already sent by (output started at /home/httpd/htdocs/info16br/versao_03/bd/conexao.php:1) in /home/httpd/htdocs/info16br/proc_cad_msg_terco_m_gozosos.php on line 39 " Fui na página do formulário coloquei na primeira linha: Terminou o problema. Meu Deus não sei nem o que escrever. Vou até testar novamente antes de enviar essa mensagem. É isso mesmo!!! Acabou o problema!!!