Grande parte dos programadores iniciantes em PHP tem problemas na hora de implementar algo utilizando header(). Geralmente se deparam com o aviso: “Warning: Cannot modify header information – headers already sent by…”
Muitos acabam desistindo ou, pelo menos, fugindo do header, mas esse aviso é algo bem simples e sua solução também.
O que acontece?
Como a mensagem diz, o problema é que “headers already sent” (As informações do cabeçalho já foram enviadas).
Funciona assim: Todo arquivo na internet está hospedado em um servidor. Seu navegador pergunta o conteúdo do arquivo X no endereço Y. O servidor faz a mágica dele e responde a requisição feita, começando pelo cabeçalho ou header, com as informações que permitirão ao seu navegador montar o arquivo solicitado.
É aí que está o problema, se houver qualquer saída HTML antes da chamada da função header(), o servidor já terá enviado o cabeçalho da página, pois esta é a primeira informação enviada. Percebe que este conteúdo pode ser uma informação antes do bloco ou uma informação exibida com echo ou print().
OK, mas como resolver o problema?
O segredo para resolver o problema então é bastante simples: basta remover qualquer saída HTML antes do header().
Blocos HTML, saídas com echo e print() devem ser colocadas sempre após o header(). Simples assim.
Mais uma dica: algumas vezes os arquivos php se corrompem (no envio para o servidor, em algum backup, etc) e o arquivo passa a acusar o problema, mesmo não havendo nenhuma irregularidade com o arquivo. Caso isso ocorra, copie os dados para um novo arquivo e salve substituindo o anterior. Já gastei muito tempo tentando resolver problemas de programação, quando o erro era do próprio arquivo.