Corrigindo o erro "Cannot modify header information - headers already sent" no PHP

Esse erro ocorre quando você tenta enviar cabeçalhos HTTP após o PHP já ter enviado conteúdo para o navegador. Veja como corrigir isso.

Introdução

O erro "PHP Warning: Cannot modify header information - headers already sent" ocorre quando o PHP tenta modificar os cabeçalhos HTTP depois que o conteúdo já foi enviado para o navegador. Esse erro é muito comum quando você tenta usar funções como header() após já ter enviado algum conteúdo para a página, seja por echo, por espaços em branco, ou até mesmo por quebras de linha. Vamos explorar como corrigir esse erro.

1. Verificando se há saída antes dos cabeçalhos

A principal causa desse erro é o envio de conteúdo antes de usar a função header(). No PHP, os cabeçalhos HTTP precisam ser enviados antes de qualquer outro conteúdo, como HTML ou texto. Exemplo de erro:

echo 'Conteúdo enviado para o navegador';
header('Location: nova-pagina.php'); // Erro: cabeçalhos já foram enviados

Neste caso, a função header() tenta modificar os cabeçalhos após já ter sido enviado conteúdo. A solução é garantir que header() seja chamado antes de qualquer outro conteúdo ser enviado.

2. Removendo espaços em branco e quebras de linha

Outro motivo comum para esse erro são os espaços em branco ou quebras de linha antes da tag <\?php ou após a tag ?>. Qualquer espaço em branco ou texto enviado antes do comando header() causa o erro. Exemplo de erro:

 // Erro: espaços em branco antes de <?php
 header('Location: nova-pagina.php');

?>

Aqui, há uma quebra de linha ou espaço após o fechamento da tag PHP, que causa a saída de conteúdo antes de tentar modificar os cabeçalhos.

Verifique sempre se não há espaços em branco ou quebras de linha antes da tag de abertura <\?php ou após o fechamento ?>. A melhor prática é não usar a tag de fechamento ?> em arquivos PHP, para evitar esse tipo de erro.

3. Usando ob_start() para controlar o buffer de saída

Uma solução prática para evitar esse erro é usar a função ob_start(), que ativa o buffer de saída. Com o buffer de saída, o PHP mantém o conteúdo em memória e só envia para o navegador depois que todos os cabeçalhos foram enviados. Exemplo:

ob_start();
header('Location: nova-pagina.php');
// Conteúdo enviado depois do cabeçalho
ob_end_flush();

Aqui, ob_start() inicia o buffer de saída e ob_end_flush() envia o conteúdo para o navegador após os cabeçalhos.

4. Verificando o código em arquivos incluídos

Se você estiver incluindo arquivos com include() ou require(), o erro também pode ser causado por esses arquivos. Verifique se não há saída ou espaços em branco nesses arquivos antes de enviar os cabeçalhos. Exemplo:

include('cabecalho.php'); // Verifique este arquivo para espaços em branco
header('Location: nova-pagina.php'); // Certifique-se que não há conteúdo antes

Verifique os arquivos incluídos para garantir que não há saída ou espaços que possam afetar os cabeçalhos.

Conclusão

O erro "Cannot modify header information - headers already sent" ocorre quando o PHP tenta enviar cabeçalhos depois que o conteúdo já foi enviado para o navegador. Para corrigir isso, garanta que os cabeçalhos sejam enviados antes de qualquer conteúdo. Verifique espaços em branco ou quebras de linha antes ou depois das tags PHP e considere usar ob_start() para gerenciar o buffer de saída. Com essas práticas, você pode evitar esse erro e garantir que os cabeçalhos HTTP sejam enviados corretamente.

O erro "Cannot modify header information - headers already sent" é um problema comum em PHP e ocorre quando há uma tentativa de modificar os cabeçalhos HTTP depois que o PHP já enviou algum conteúdo para o navegador. Esse erro geralmente acontece quando você tenta usar funções como header() após a geração de conteúdo, como echo, ou até mesmo por causa de espaços em branco ou quebras de linha no código.

Para resolver esse erro, é importante garantir que os cabeçalhos sejam enviados antes de qualquer outro conteúdo. Uma boa prática é evitar espaços e quebras de linha fora das tags PHP e usar ob_start() para controlar o fluxo de saída, garantindo que os cabeçalhos sejam enviados corretamente antes do conteúdo. Com essas abordagens, você pode evitar esse erro e melhorar a robustez do seu código.

Algumas aplicações:

  • Garantir que os cabeçalhos sejam enviados antes de qualquer conteúdo.
  • Usar ob_start() e ob_end_flush() para controlar o fluxo de saída.
  • Verificar a presença de espaços em branco ou quebras de linha fora das tags PHP.
  • Revisar os arquivos incluídos para garantir que não haja saída de conteúdo antes dos cabeçalhos.

Dicas para quem está começando

  • Sempre chame header() antes de qualquer conteúdo HTML ou echo no seu script PHP.
  • Evite usar a tag de fechamento ?> nos seus arquivos PHP para prevenir espaços em branco desnecessários.
  • Use ob_start() no início do script se precisar controlar quando o conteúdo é enviado ao navegador.
  • Verifique se os arquivos incluídos não têm saída antes de enviar os cabeçalhos.
  • Reveja a estrutura do seu código para garantir que os cabeçalhos sejam sempre enviados no momento certo.
Foto de Andressa Maria
Contribuições de
Andressa Maria

Desenvolvedora sênior com forte atuação em PHP, JavaScript e tecnologias de backend.

Mais sobre o autor
Compartilhe este tutorial: Como corrigir

Compartilhe este tutorial

Continue aprendendo:

Como corrigir "PHP Warning: file_put_contents(): failed to open stream"?

Esse erro ocorre quando o PHP tenta gravar em um arquivo, mas não consegue abrir o arquivo devido a permissões ou outros problemas. Saiba como corrigir esse erro.

Tutorial anterior

Como corrigir "PHP Warning: Division by zero"?

Esse erro acontece quando o PHP tenta realizar uma divisão por zero, o que não é permitido. Veja como corrigir esse erro.

Próximo tutorial