Cannot Modify Header Information: Headers Already Sent (como resolver)

O erro “Warning: Cannot modify header information – headers already sent by” significa que um script PHP tentou enviar cabeçalhos HTTP (um redirecionamento, um cookie, uma sessão) depois que algum conteúdo já tinha sido enviado ao navegador. Pela regra do protocolo HTTP, os cabeçalhos vêm antes do conteúdo — então, se algo “vaza” antes (um espaço, uma linha em branco, um echo), os cabeçalhos falham. A boa notícia: a própria mensagem de erro diz qual arquivo e linha corrigir. Você pode vê-lo também como apenas “headers already sent” ou “cannot modify header information” — é o mesmo erro.

Como ler a mensagem de erro (a parte mais importante)

A mensagem tem três partes — e elas não significam a mesma coisa. Entender isso é o que mais economiza tempo:

Warning: Cannot modify header information - headers already sent by (output started at /home/usuario/public_html/wp-content/themes/tema/functions.php:42) in /home/usuario/public_html/wp-includes/pluggable.php on line 1450
1
O nome do erro. “Cannot modify header information – headers already sent by.” Diz o tipo de problema.
2
“output started at … :42” — ESTE é o arquivo a corrigir. O arquivo e a linha onde a saída indevida começou. É o seu culpado. Vá até aqui.
3
“in … pluggable.php on line 1450” — NÃO edite este. Normalmente é um arquivo do núcleo do WordPress que apenas falhou por causa da parte 2. É a vítima, não a causa.

A sacada: o arquivo em ‘output started at’ é o que você corrige — é ali que a saída indevida começou. O arquivo do fim (‘in … on line …’) costuma ser um arquivo do núcleo como o pluggable.php, que só falhou por causa do primeiro. Não edite esse arquivo do núcleo — ele é a vítima. Muita gente perde tempo editando o arquivo errado; ler a mensagem certa evita isso.

O que causa esse erro?

O erro “Warning: Cannot modify header information” ocorre geralmente quando o código PHP tenta modificar os cabeçalhos HTTP depois que já foram enviados para o navegador. Esse erro é comum quando ocorrem tentativas de redirecionamento ou alterações nos cabeçalhos HTTP após o início do envio de dados para o navegador.

Existem algumas situações comuns que podem causar esse erro:

  • Saída de dados antes dos cabeçalhos: Se houver qualquer saída de texto ou espaço em branco antes da função header() do PHP, o erro pode ocorrer. Isso pode incluir espaços em branco antes da tag de abertura <?php, saída acidental de texto ou HTML antes da função header(), ou mesmo espaços em branco após o fechamento da tag ?> em arquivos PHP.
Boa prática

Em arquivos que são só PHP — como o wp-config.php e o functions.php — simplesmente remova a tag de fechamento ?> do final. O PHP não precisa dela, e removê-la elimina de vez o risco de espaços em branco depois dela causarem esse erro.

  • Reenvio de cabeçalhos: O erro pode ocorrer se houver tentativas de enviar cabeçalhos HTTP repetidamente. Isso pode acontecer quando as funções header() ou setcookie() são chamadas em um loop ou após o envio dos cabeçalhos HTTP.
  • Arquivos incluídos: Se você estiver incluindo arquivos em seu código PHP que contenham saída de texto ou chamadas de função header(), isso pode causar o erro. Certifique-se de que os arquivos incluídos não contenham saídas ou chamadas de função header().
  • Erros de configuração do servidor: Em alguns casos, configurações específicas do servidor podem causar o erro. Isso pode incluir configurações relacionadas ao armazenamento em buffer de saída ou a configuração do cabeçalho “output_buffering”.
  • BOM (caracteres invisíveis): arquivos salvos como “UTF-8 com BOM” adicionam bytes invisíveis antes do seu código, que contam como saída e disparam o erro. Salve o arquivo como UTF-8 sem BOM em um editor de código.

Para corrigir o erro “Warning: Cannot modify header information”, você pode seguir algumas diretrizes:

  • Certifique-se de que não haja saída de texto ou espaços em branco antes da função header() ou qualquer outra função relacionada aos cabeçalhos HTTP.
  • Evite reenviar cabeçalhos HTTP ou chamar a função header() repetidamente.
  • Verifique se não há arquivos incluídos que contenham saída ou chamadas de função header().
  • Verifique as configurações do servidor para garantir que não haja conflitos ou erros relacionados ao armazenamento em buffer de saída ou outras configurações relevantes.

Lembre-se de que a solução exata pode variar dependendo do contexto específico em que o erro ocorre. É importante analisar o código e as configurações do servidor para identificar a causa exata do problema e aplicar as correções apropriadas.

Identificando o arquivo e linha de codigo com o erro

Um erro muito comum em servidores de hospedagem é o “warning: Cannot modify header information”. Isso significa um aviso que “Não é possível modificar as informações do cabeçalho“. A mensagem costuma aparecer como no nosso exemplo abaixo:

“Warning: Cannot modify header information – headers already sent by (output started at /home/usuario/public_html/arquivo.php:11) in /home/usuario/public_html/arquivo.php on line 26”

Observe que no exemplo acima, você consegue identificar algumas informações, em especial os diretórios e arquivos onde o erro esta ocorrendo. No caso do nosso exemplo, o diretório é o “/home/usuario/public_html/arquivo.php”. Além disso, o aviso nos informa o arquivo que está gerando o erro, que nesse caso é o “arquivo.php”, localizado dentro do diretório public_html, o diretório raiz do nosso servidor.

Basicamente, isto significa que o nosso arquivo está causando um erro que impede a aplicação de rodar corretamente.

Além disso, no final do aviso, ele também informa uma linha (on line…), que no exemplo acima, seria a linha 26. Ou seja, o erro iniciou-se a partir desta linha. Muitas vezes, essa informação pode nos poupar muito tempo, pois você consegue identificar onde está o erro, ou, pelo menos, onde ele se iniciou.

Sabendo disso, vamos então entender como solucionar esse erro! E, se você utiliza WordPress, separamos um tópico para você, então vá direto para nosso segundo Tópico!

Como solucionar o erro “Warning: Cannot modify header information”

De forma geral, existem algumas coisas que podem estar gerando esse problema. Portanto, abaixo você encontra as principais soluções possiveis para esse erro. Porém, recomendamos que antes de realizar qualquer alterações, você faça um backup dos arquivos, principalmente se não possui muita experiência em desenvolvimento. Mas vamos para nossa solução:

Primeiramente, verifique se há algum “enter”, “espaço”, outro comando ou caractere, antes do primeiro <?php. Esta é uma das causas mais comuns para originar esse erro.

Uma ótima dica para vocês:

A maioria dos editores de código atuais tem uma opção para remover espaços em branco automaticamente. No VS Code, por exemplo, você pode ativar “Trim Trailing Whitespace” (em File → Preferences → Settings, busque por “trim trailing”) ou usar a paleta de comandos. Assim você não precisa caçar espaços manualmente.

Mas, se ainda assim, a mensagem “warning: Cannot modify header information” continuar aparecendo, então verifique as possibilidades abaixo:

Verifique se em seu php.ini voce possui a opção output_buffering habilitada. Caso sim, então recomendamos usar a seguinte configuração no php.ini:

output_buffering = 4096

Verifique se há alguma saída para o navegador antes da execução do session_start(). Pois, ele só funciona se não houver nenhuma saída (echo ou print) antes do comando. Caso haja, remova.

Apesar de ser um caso raro, alguns sistemas possuem um php.ini personalizado. Nesse caso, pode ser que ele esteja desativando as configurações de session. Portanto, se o primeiro passo não resolver, analise o php.ini contido no diretório de execução do PHP procurando por alguma linha que possa desabilitar ou limitar as sessões e altere-as.

Solucionando o erro “Warning: Cannot modify header information” no WordPress

Se você utiliza WordPress no seu site, o erro “warning: Cannot modify header information” costuma ocorrer quando algum arquivo é corrompido, geralmente durante a instalação de um plugin ou tema.

Portanto, existem formas mais simples de resolver esses erros se você utiliza o WordPress.

A forma mais básica de todas é removendo e reinstalando o plugin ou tema. Ao fazer isso, geralmente, você já resolverá o problema.

Porém, se ainda assim o aviso persistir, significa que o erro se encontra em algum arquivo principal do próprio WordPress. Portanto, a melhor solução é conseguir uma cópia original do WordPress e substituir os arquivos corrompidos em sua instalação por esta nova versão. Porém, tenha certeza de que está utilizando um cópia da mesma versão do WordPress que está instalado em seu servidor, caso contrário, o erro pode persistir.

Fazendo as etapas acima, você certifica que está restaurando os arquivos corrompidos pelos arquivos no seu estado original, sem perder o restante de sua instalação do WordPress.

Porém, se preferir, você também pode tentar solucionar utilizando as técnicas do tópico anterior, buscando os erros diretamente no código.

O que é o output_buffering do PHP?

O output_buffering é uma diretiva de configuração do PHP que controla o armazenamento em buffer de saída (output buffering) do conteúdo gerado pelo PHP antes de ser enviado para o navegador. Quando o output_buffering está ativado, o PHP armazena o conteúdo gerado em um buffer interno antes de enviá-lo para o navegador.

Quando o armazenamento em buffer de saída está ativado, o conteúdo gerado pelo PHP não é enviado imediatamente para o navegador, mas é armazenado no buffer interno. O conteúdo só é enviado ao navegador quando o buffer é totalmente preenchido, quando o script PHP é concluído ou quando a função flush() é chamada explicitamente.

O output_buffering pode ser configurado no arquivo php.ini ou no código PHP usando a função ini_set().

Existem três opções principais para o output_buffering:

  • output_buffering = Off: O armazenamento em buffer de saída está desativado. O conteúdo gerado pelo PHP é enviado imediatamente para o navegador.
  • output_buffering = On: O armazenamento em buffer de saída está ativado. O conteúdo gerado pelo PHP é armazenado em um buffer interno e enviado ao navegador quando o buffer é preenchido ou o script é concluído.
  • output_buffering = N: O armazenamento em buffer de saída está ativado, e o tamanho do buffer é definido como “N” bytes. O conteúdo gerado pelo PHP é armazenado no buffer interno até que o tamanho do buffer seja atingido, momento em que é enviado ao navegador.

O output_buffering pode ser útil em várias situações, como quando você deseja modificar os cabeçalhos HTTP antes de enviá-los para o navegador, quando precisa controlar o momento exato em que o conteúdo é enviado ou quando deseja reduzir a quantidade de transferências entre o PHP e o servidor web.

É importante observar que, se o output_buffering estiver ativado, você deve ter cuidado ao lidar com a saída de texto antes dos cabeçalhos HTTP, pois isso pode resultar no erro “Warning: Cannot modify header information” mencionado anteriormente. Certifique-se de não ter saída de texto ou espaços em branco antes de enviar cabeçalhos HTTP.

💡
Dica de cache

Depois de corrigir o arquivo, uma versão em cache da página ainda pode mostrar o aviso. Limpe o cache do site e do servidor (e o do navegador) antes de concluir que a correção não funcionou.

Hospedagem com as ferramentas para resolver rápido

Editar um arquivo por FTP, restaurar um backup, limpar o cache — na Homehost você tem gerenciador de arquivos fácil, backups e suporte em português que conhece WordPress, para que um espaço perdido não custe sua tarde.

Ver planos de hospedagem WordPress

Perguntas frequentes

O que significa “cannot modify header information – headers already sent by”?
Significa que um script PHP tentou enviar cabeçalhos HTTP (como um redirecionamento ou cookie) depois que algum conteúdo já tinha sido enviado ao navegador. Como o HTTP exige os cabeçalhos antes do conteúdo, o PHP recusa e mostra o aviso. O “conteúdo” costuma ser um espaço em branco ou saída indevida antes dos cabeçalhos.
Qual arquivo eu preciso corrigir?
O que aparece na parte “output started at” da mensagem — é ali que a saída indevida começou. O arquivo do fim (“in … on line …”) normalmente é um arquivo do núcleo do WordPress, como o pluggable.php, que apenas falhou por consequência; não edite esse. Corrija sempre o arquivo do “output started at”.
Qual é a causa mais comum?
Espaço em branco — um espaço ou linha em branco antes da tag de abertura <?php ou depois da tag de fechamento ?>. É invisível na maioria dos editores, mas conta como saída. Removê-lo (ou remover a tag ?> dos arquivos que são só PHP) costuma resolver.
O erro aponta para um arquivo de plugin. O que faço?
Atualize o plugin primeiro (o desenvolvedor pode já ter corrigido), depois desative-o para confirmar que é a causa. Se não conseguir acessar o painel, renomeie a pasta do plugin via FTP para forçar a desativação, e renomeie de volta após corrigir ou substituir.
Corrigi o arquivo mas o erro continua. Por quê?
Geralmente é cache. Uma cópia em cache da página ainda pode mostrar o aviso depois da correção. Limpe o cache do site, do servidor e do navegador, e recarregue. Se persistir, verifique se há um BOM (salve o arquivo como UTF-8 sem BOM) ou outro arquivo com saída indevida.

Conclusão

O erro “Cannot modify header information – headers already sent” parece intimidador, mas é um dos mais lógicos de resolver: a própria mensagem aponta o arquivo e a linha onde a saída indevida começou. Abra esse arquivo (o de “output started at”, não o do núcleo no final), remova o espaço em branco, a linha em branco ou a saída prematura — ou atualize o plugin ou tema responsável — e o aviso desaparece. Remover a tag ?> final de arquivos que são só PHP e salvar sem BOM evita que ele volte.

Esse é um dos erros de PHP mais comuns; veja também como resolver o limite de memória do PHP e o tempo máximo de execução. E se você prefere uma hospedagem com gerenciador de arquivos fácil, backups e suporte em português que conhece WordPress para esses momentos, conheça os planos de hospedagem WordPress da Homehost.

Este artigo foi útil?

Obrigado pela resposta!
Picture of Gustavo Gallas

Gustavo Gallas

Analista de sistemas, formado pela PUC-Rio. Programador, gestor de redes e diretor da empresa Homehost. Pai do Bóris, seu pet de estimação. Gosta de rock'n'roll, cerveja artesanal e de escrever sobre assuntos técnicos.

Contato: gustavo.blog@homehost.com.br

Ganhe 30% OFF

Indique seu nome e e-mail,e ganhe um cupom de desconto de 30% para sempre na Homehost!