Résumé de plusieurs problèmes auxquels il faut prêter attention lors de l'utilisation de PHP Header pour les sauts de page
Auteur:Eve Cole
Date de mise à jour:2009-06-05 16:25:10
Lorsque vous utilisez header("location:test.php") pour accéder à PHP, vous devez faire attention aux points suivants, qui aideront à résoudre certains problèmes que les novices rencontrent souvent.
1. Il ne peut pas y avoir d'espace entre l'emplacement et ":", sinon une erreur se produira.
2. Il ne peut y avoir de sortie avant d'utiliser l'en-tête.
3. Le code PHP après l'en-tête sera également exécuté.
Ce qui suit est une comparaison avec la redirection réponse.redirect en asp :
Exemple 1 :
réponse.redirect "../test.asp"
header("emplacement:../test.php");
La différence entre les deux :
La fonction de redirection d'ASP peut fonctionner après l'envoi du fichier d'en-tête au client.
comme
<html><head></head><body>
<%response.redirect "../test.asp"%>
</body></html>
Vérifiez si le code suivant en php signalera une erreur :
<html><head></head><body>
<?
header("emplacement:../test.php");
?>
</body></html>
C'est le seul moyen :
<?
header("emplacement:../test.php");
?>
<html><head></head><body>...</body></html>
Autrement dit, la fonction d'en-tête ne peut envoyer aucune donnée au client auparavant.
Exemple 2 :
en aspe
<html><head></head><body>
<%
réponse.redirect "../a.asp"
réponse.redirect "../b.asp"
%>
</body></html>
Le résultat est une redirection du fichier a.asp.
Et php?
<?
header("emplacement:../a.php");
header("emplacement:../b.php");
?>
<html><head></head><body></body></html>
Nous avons constaté qu'il redirige b.php.
Il s'avère qu'après l'exécution de la redirection dans asp, le code suivant ne sera pas exécuté.
Une fois que php a exécuté l'en-tête, il continue d'exécuter le code suivant.
À cet égard, la redirection d'en-tête en php n'est pas aussi efficace que la redirection en asp. Parfois, nous ne pouvons pas exécuter le code suivant après la redirection :
Généralement, nous utilisons
si(...)
en-tête("...");
autre
{
...
}
Mais on peut simplement utiliser la méthode suivante :
si(...)
{ en-tête("...");exit();}
Notez également que des problèmes peuvent survenir si Unicode (UTF-8) est utilisé pour l'encodage et que les paramètres du cache doivent être ajustés.
<[email=%@]%@LANGUAGE="VBSCRIPT[/email]" CODEPAGE="936"%>
<%if Request.ServerVariables("SERVER_NAME")="s.jb51.net" alors
réponse.redirect "news/index.htm"
sinon%>
<%end if%>
<script>
var url = emplacement.href;
if(url.indexOf('http://www.devdao.com/')!=-1)location.href='/index/index.htm';
if(url.indexOf('http://www.knowsky.com/')!=-1)location.href='/index1/index.htm';
if(url.indexOf('http://www.google.com/')!=-1)location.href='/cn/index.asp';
if(url.indexOf('http://www.baidu.com/')!=-1)location.href='/cn/index.asp';
</script>