Conteúdo
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çãoheader()
, ou mesmo espaços em branco após o fechamento da tag?>
em arquivos PHP. -
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()
ousetcookie()
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çãoheader()
. -
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”.
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/texto atuais possuem uma opção que remove espaços em branco automaticamente. Portanto, você pode poupar muito tempo utilizando isso. No editor ATOM, por exemplo, você pode selecionar todo o código e utilizar a opção: Packages -> Whistespace -> Remove Trailing Whitespace. Dessa forma, você não precisa ficar procurando por espaços em branco, e ainda lhe poupa tempo.
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.
Conclusão
Seguindo o tutorial acima, você provavelmente conseguirá solucionar o problema e o erro “warning: Cannot modify header information” não será mais mostrado.
Porém, caso o problema persista, recomendamos que você busque ajuda com o suporte do seu Servidor de Hospedagem ou o Desenvolvedor responsável pelo seu site.
Observação: Atualizado em Dezembro de 2020