Problemas com o Redirecionamento de página
RespondidaOi pessoal.
Eu estou tendo problemas na HostGator com redirecionamento de página através do comando header.
Eu testei os códigos no easy php para ver se eu estava fazendo algo errado e eles funcionaram corretamente para sites no teste1 e para arquivos dentro do servidor easy php no teste 2.
Teste 1
<?php
header('Location:https://www.google.com.br/');
?>
Teste 2
<?php
header('Location:http://localhost/edsa-PHP-Teste/pagina3.php');
?>
Quando fui testar no servidor da hostgator para redirecionar para um site ( https://www.google.com.br ) e para uma página do meu site, não funcionou.
Tentei colocar o exit; depois da comando header nas duas situações porém nada aconteceu.
Eu entrei em contato com o chat online porém o erro não foi resolvido, se alguém souber o motivo do comando header não funcionar na hostgator por favor me ajude e me mandem o código que deu certo.
-
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 diretivaini_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
Por favor, entrar para comentar.
1 comentário