Qual é a sua dúvida?

Pergunte sobre PHP, servidores, banco de dados e outros assuntos de TI

Problemas com o Redirecionamento de página

Respondida

1 comentário

  • Emerson B. Staff HostGator

    Ola Thiago. 
    Muito provavelmente isso é um problema gerado porque os cabeçalho já teriam sido enviados. Vamos lá:

    Porquê?

    Esse comportamento ocorrerá normalmente quando você tiver dado um echo em qualquer coisa, antes de enviar o redirect. Nesse caso o cabeçalho inicial (o padrão) já teria sido enviado e os novos cabeçalhos não poderiam substituir algo que já está preparado no buffer de saída para o browser. 

    As vezes nem é necessário que tenha sido dado o echo, outras circunstâncias que tipicamente irão causar esse problema:

    • Se um erro tiver sido enviado ao navegador, isso já seria considerado como parte do cabeçalho;
    • Se um dos seus arquivos estiver com um formato especifico de codificação (por exemplo ISO-8859-1) e outro estiver em outro formato (talvez UTF-8 com BOM) a incompatibilidade entre ambos os formatos fará com que alguns bytes de erros sejam enviados. 

    Checando

    Para testar se o caso seria de um erro desse gênero, habilite o error_reporting(E_ALL); e configure para que os erros sejam exibidos através da diretiva ini_set('display_errors', TRUE); após isso muito provavelmente você irá ver um erro a respeito dos cabeçalhos já terem sido enviados.

    Corrigindo

    Para corrigir este tipo de erro você pode tentar uma das opções abaixo:

    • Escrevendo o seu redirect em algum lugar no seu código de forma que ele seja o primeiro item a ser enviado, antes de qualquer outra coisa;
    • utilize os buffers de saída para capturar qualquer tipo de informação que esteja saindo, e libere apenas no ponto onde você já estiver certo de qual redirecionamento você irá precisar e na ordem que você irá precisar;
    • utilize um framework adequado de MVC. Normalmente isso já irá resolver o problema e
    • por fim se tudo mais falhar, utilize uma saída injetando um código java que faça o redirecionamento que você deseja. Algo como
      echo '<script>window.location = "'.$url.'";</script>';
    Ações de comentário Permalink

Por favor, entrar para comentar.