Maison  >  Article  >  développement back-end  >  Précautions à prendre pour sauter l'emplacement de l'en-tête du programme PHP

Précautions à prendre pour sauter l'emplacement de l'en-tête du programme PHP

伊谢尔伦
伊谢尔伦original
2017-06-23 14:02:163349parcourir

Comme nous le savons tous, il existe trois façons d'accéder aux sites Web PHP : JS, HTML META Refresh et PHP header("location: $url"). Mais il y a ici un tout petit détail qui peut facilement conduire à des erreurs.

Header("location:test.PHP") saute avec succès En plus des trois points suivants, il y a également une condition préalable à laquelle il faut prêter attention :

1. Emplacement et signe ":" Il ne doit y avoir aucun espace entre eux, 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é.

Le principe est que votre éditeur est écrit au format UTF-8 sans BOM, et non au format UTF-8. Souviens-toi!

Une fois, j'ai fait un programme de saut, mais j'ai ignoré ce point, et le saut a en fait échoué.

Le code source complet du programme est le suivant, adresse du programme : http://www.***.com/go.php

<?php
error_reporting(7);
$url = urldecode( trim($_REQUEST[&#39;url&#39;]));
if($url)
{
    header("Location: $url");

} else {

    exit(&#39;Error Input,<a href="http://www.***.com/?f=go.php">go back</a>&#39;);
}


Lorsque l'accès l'adresse est : http://www.***.com/go.php?url=http%3A%2F%2Fwww.zbphp.com%2F, le navigateur Firefox est normal. Plus tard, j'ai copié ce programme de saut sur un autre site Web de l'entreprise et j'ai demandé à des amis sur QQ de le tester. En conséquence, de nombreuses personnes ont dit qu'il ne pouvait pas être ouvert : le navigateur basé sur IE indique directement qu'il n'est pas accessible ou. introuvable, et Chrome indique parfois qu'il est réinitialisé ou introuvable. Lors des tests avec Firefox, il sera parfois demandé qu'il soit introuvable, mais il s'affichera normalement après une nouvelle actualisation.

Vérifiez bien le code, il n'y a pas de problème. En plus, Firefox peut sauter, et puis j'ai pensé à quelque chose que j'ai lu dans le passé : Navigateur IESi les octets du contenu de sortie sont trop petits (moins de 512 octets), Ensuite il sera ignoré . Ensuite, le code source a été modifié de l'emplacement de l'en-tête à js html avant que tous les navigateurs ne réussissent le test. L'invite de clic de Firefox impossible de trouver le serveur xxx n'est plus réapparue. de go.php :

<?php
error_reporting(7);
function gheader($url)
{
echo &#39;<html><head><meta http-equiv="Content-Language" content="zh-CN">
<meta HTTP-EQUIV="Content-Type" CONTENT="text/html;charset=gb2312"><meta http-equiv="refresh"
content="0;url=&#39;.$url.&#39;"><title>loading ... </title></head><body><p style="display:none">
<script type="text/javascript">
var cnzz_protocol = (("https:" == document.location.protocol)?"https://":"http://"); 
document.write(unescape("%3Cspan id=\&#39;cnzz_stat_icon_5696423\&#39;%3E%3C/span%3E%3Cscript src=\&#39;" + cnzz_protocol + "s9.cnzz.com/stat.php%3Fid%3D5696423%26show%3Dpic1\&#39; type=\&#39;text/javascript\&#39;%3E%3C/script%3E"));</script></p>
<script>window.location="&#39;.$url.&#39;";</script></body></html>&#39;;
exit();
}

$url = urldecode( trim($_REQUEST[&#39;url&#39;]));
if($url)
{
    gheader($url);

} else {

    exit(&#39;Error Input,<a href="http://www.***.com/?f=go.php">go back</a>&#39;);
}

Pour PHP jump, je pense que le meilleur moyen est d'utiliser JS+HTML META. HTML META peut garantir que les visiteurs peuvent toujours sauter même si JS est désactivé.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn