Artigo: Erro com SESSION Cannot modify header information headers already sent by no PHP - Gigasystems

PHP

Em por

erro-com-session-cannot-modify-header-information-headers-already-sent-by-no-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).

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. =)

 

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

Já temos 11 comentário(s). DEIXE O SEU :)
Leandro Silva

Leandro Silva

Me ajudou muito! Obrigado.
★★★★★DIA 13.11.22 02h09RESPONDER
Marcos Martins
Enviando Comentário Fechar :/
Fausto Vieira

Fausto Vieira

gratidao irmao
★★★★★DIA 02.07.22 09h47RESPONDER
Marcos Martins
Enviando Comentário Fechar :/
Amaury Frazão

Amaury Frazão

Porque no localhost ele não ocorre o problema?
★★★★★DIA 18.03.22 19h48RESPONDER
N/A
Enviando Comentário Fechar :/
Abner Santos

Abner Santos

Ajudou de mais subi o site para o servidor e deu esse erro coloquei os comandos ob_start(); no começo, e ob_end_flush(); no final e normalizou. Obrigado pela explicação.
★★★★★DIA 31.05.21 17h34RESPONDER
Marcos Martins
Enviando Comentário Fechar :/
Kevin Alec Neri Lazzarotto

Kevin Alec Neri Lazzarotto

Muito obrigado, ajudou muito.
★★★★★DIA 22.12.20 09h43RESPONDER
Marcos Martins
Enviando Comentário Fechar :/
Bruno Silva

Bruno Silva

Muito obrigado, já estava ficando louco porque não sabia resolver esse erro, depois que li o porque isso acontece e alias explicaram isso de uma forma bem fácil pra quem é leigo em programação, eu consiguir entender e concertar meu código.
Vlws vcs são FODAS
★★★★★DIA 07.12.20 17h37RESPONDER
Leonardo Martins
Enviando Comentário Fechar :/
Uellington S Lima

Uellington S Lima

Muito obrigado! Resolveu o meu problema eu estava há dias quebrando a cabeça com isso.
★★★★★DIA 28.06.20 19h15RESPONDER
Marcos Martins
Enviando Comentário Fechar :/
Alyson Ronnan Martins

Alyson Ronnan Martins

Cara muito obrigado... Estava com o problema na hospedagem mais o localhost estava dando certo.
Agora esta show!!! muito obrigado.
★★★★★DIA 19.03.20 07h37RESPONDER
Marcos Martins
Enviando Comentário Fechar :/
Neto Sales

Neto Sales

Deu certo aqui também, depois de eu ter tentando um monte de coisa antes. Valeu meu brother!
★★★★★DIA 06.02.20 22h10RESPONDER
Marcos Martins
Enviando Comentário Fechar :/
Daniel Campos

Daniel Campos

Excelente, funcionou para mim. Muito obrigado jovem
★★★★★DIA 21.01.20 21h24RESPONDER
Marcos Martins
Enviando Comentário Fechar :/
Carlos Alberto Ramos Teixeira

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!!!

★★★★★DIA 16.01.20 22h55RESPONDER
Marcos Martins
Enviando Comentário Fechar :/
Enviando Comentário Fechar :/

Veja Também:

Artigos Relacionados a categoria: PHP

Soluções

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


Se ainda não viu nosso Portfólio e quer conhecer um pouco mais... aproveite, veja agora mesmo nossos Cases de Sucesso e tenha seu site nos padrões atuais preparado para maioria dos dispositivos e navegadores.

Usamos cookies para manter o site seguro, registrar e personalizar sua navegação. Para mais detalhes sobre essa atividade, acesse nossa Politica de Privacidade

Entendi