A mensagem completa é “Warning: Cannot modify header information - headers already sent by (output started at /caminho/ficheiro.php:12)”. Quer dizer: o PHP já começou a enviar texto ao navegador, e depois disso já não pode mudar os cabeçalhos (redireccionar, iniciar uma sessão, gravar um cookie, entregar um ficheiro). O que interessa está dentro dos parêntesis: o ficheiro e a linha onde o texto começou a sair. É aí que está o culpado.
Ler a mensagem
| Parte da mensagem |
O que diz |
| headers already sent by (output started at ficheiro:linha) |
Onde começou a sair texto. Comece por aqui. |
| ... in outro-ficheiro.php on line N |
Onde o código tentou mudar o cabeçalho (um header(), session_start() ou setcookie()). É a vítima, não o culpado. |
As causas, da mais comum para a menos comum
| 1 |
Espaços ou linhas em branco fora do PHP. Uma linha em branco antes de <?php, ou depois de um ?> final, é texto enviado. Acontece muito em ficheiros de configuração editados à mão, como o wp-config.php ou o functions.php de um tema. O remédio é apagar o espaço e, em ficheiros que são só PHP, deixar de usar o ?> final.
|
|
| 2 |
O “BOM”. Alguns editores (o Bloco de Notas, por exemplo) guardam o ficheiro com três bytes invisíveis no início. Para os apanhar, num Terminal Linux: grep -rl $'\xEF\xBB\xBF' --include=*.php .. Reguarde o ficheiro como “UTF-8 sem BOM”.
|
|
| 3 |
Um echo, print ou HTML antes do header(). Em código seu, passe a mudança de cabeçalho para o início, antes de qualquer saída.
|
|
O “truque” que adia o problema
Um ob_start() no início do código guarda a saída em memória e só a envia no fim, e assim os cabeçalhos ainda se podem mudar. Resolve o sintoma, não a causa, e esconde o espaço em branco que continua lá. Aqui o PHP vem com o output_buffering desligado, por isso qualquer byte antes do cabeçalho dá o erro. Use o ob_start() como último recurso, em código seu, e não como correcção de um ficheiro de terceiros.
|
Tem a mensagem com o ficheiro e a linha e não percebe o que está lá? Envie-nos a mensagem completa e o endereço da página.
Abrir um pedido de suporte
|
PRODUTO RECOMENDADO Alojamento de sites com cPanel Domínio e SSL incluídos, cópias diárias e o painel que já conhece. desde 5.940,00 Kz/mês (plano de 3 anos, com cupão) Ver planos |