Maison  >  Article  >  développement back-end  >  Parlons de l'expansion de l'utilisation des en-têtes en php

Parlons de l'expansion de l'utilisation des en-têtes en php

伊谢尔伦
伊谢尔伦original
2017-06-24 14:28:011102parcourir

header() est utilisé pour envoyer des rawheaders. Voir la spécification HTTP/1.1 pour plus d'informations sur les en-têtes. Exemple 1 :

------------------------------------------------ - -----------------------------------------------

Exemple 2 : Désactivez la mise en cache des pages dans IE
<?PHP
Header("Location: http://www.php.cn"); 
exit;//在每个重定向之后都必须加上“exit",避免发生错误后,继续执行。
?>

Afin que les spectateurs puissent obtenir les dernières informations à chaque fois, au lieu des informations contenues dans le proxy ou le cache :

CacheControl = no-cache Pragma=no-cache Expires = -1

<?PHP
header( &#39;Expires: Fri, 4 Dec 2009 09:00:00 GMT&#39; );
header( &#39;Last-Modified: &#39; . gmdate( &#39;D, d M Y H:i:s&#39; ) . &#39; GMT&#39; );
header( &#39;Cache-Control: no-store, no-cache, must-revalidate&#39; );
header( &#39;Cache-Control: post-check=0, pre-check=0&#39;, false );
header( &#39;Pragma: no-cache&#39; ); //兼容http1.0和https
?>
Si les pages Web du serveur changent fréquemment, définissez Expires sur -1, ce qui signifie qu'il expirera immédiatement. Si une page Web est mise à jour à 1 heure du matin tous les jours, vous pouvez définir l'expiration à 1 heure du matin le lendemain. Lorsque le serveur HTTP1.1 spécifie CacheControl = no-cache, le navigateur ne mettra pas la page Web en cache.

Les anciens serveurs HTTP 1.0 ne peuvent pas utiliser l'en-tête Cache-Control. Ainsi, pour une compatibilité ascendante avec les serveurs HTTP 1.0, IE fournit une prise en charge spéciale pour HTTP à l'aide de l'en-tête Pragma:no-cache. Si le client communique avec le serveur via une connexion sécurisée et que le serveur renvoie l'en-tête Pragma:no-cache dans la réponse, Internet Explorer ne met pas la réponse en cache. Remarque : Pragma:no-cache empêche la mise en cache uniquement lorsqu'il est utilisé dans une connexion sécurisée. Si elle est utilisée dans une page non sécurisée, la méthode de traitement est la même que Expires :-1. La page sera mise en cache mais marquée comme immédiate. . Expiré.
Balise méta http-equiv :
Vous pouvez utiliser la méta http-equiv pour marquer l'en-tête du message http spécifié dans la page html. Les anciennes versions d'IE peuvent ne pas prendre en charge les balises méta HTML. Il est donc préférable d'utiliser les en-têtes de message http pour désactiver la mise en cache.
-------------------------------------------------------------- --- ----------------------------------

Exemple 3 : Laisser le navigateur de l'utilisateur apparaît Impossible de trouver les informations sur le fichier.

De nombreuses informations sur Internet disent ceci : la fonction header() de PHP peut envoyer un en-tête Status au navigateur,
tel que header("Status: 404 Not Found"). Mais en fait la réponse renvoyée par le navigateur est :
Après avoir vérifié quelques informations, la bonne façon de l'écrire est :

HTTP/1.x 200 OK
Date: Thu, 03 Aug 2006 07:49:11 GMT
Server: Apache/2.0.55 (Win32) PHP/5.0.5
X-Powered-By: PHP/5.0.5
Status: 404 Not Found
Content-Length: 0
Keep-Alive: timeout=15, max=98
Connection: Keep-Alive
Content-Type: text/html

La première partie est la version du protocole HTTP ( HTTP-Version) ; la deuxième partie est le code d'état (Status) ; la troisième partie est la phrase de raison (Reason-Phrase).
-------------------------------------------------------------- --- ----------------------------------

header(”http/1.1 404 Not Found”);
Exemple 4 : Autoriser les utilisateurs à télécharger des fichiers (fichiers cachés (emplacement)



balise html peut réaliser un
téléchargement de fichiers
ordinaire. Si vous souhaitez garder le fichier confidentiel et que vous ne pouvez pas communiquer le lien du fichier à d'autres personnes, vous pouvez utiliser la fonction d'en-tête pour télécharger le fichier. Exemple 4 : Saisissez le contenu avant la fonction d'en-tête

<?php
header("Content-type: application/x-gzip"); 
header("Content-Disposition: attachment; filename=文件名/"); 
header("Content-Description: PHP Generated Data"); 
?>
De manière générale, le contenu HTML ne peut pas être généré avant la fonction d'en-tête. Les fonctions similaires incluent setcookie() et les fonctions de session. La fonction doit ajouter des informations d'en-tête de message au flux de sortie. S'il y a des instructions telles que echo avant l'exécution de header(), lorsque header() est rencontré plus tard, une erreur "Avertissement : Impossible de modifier les informations d'en-tête - en-têtes déjà envoyés par..." sera signalée. C'est-à-dire qu'il ne peut y avoir de texte, de lignes vides, de retours chariot, etc. devant ces fonctions, et il est préférable d'ajouter la fonction exit() après la fonction header(). Par exemple, dans l'écriture incorrecte suivante, il y a une ligne vide entre les deux sections

code php  :

//some code here
<?php
//这里应该是一个空行
header(”http/1.1 403 Forbidden”);
exit();
?>

原因是:PHP脚本开始执行 时,它可以同时发送http消息头部(标题)信息和主体信息. http消息头部(来自 header() 或 SetCookie() 函数)并不会立即发送,相反,它被保存到一个列表中. 这样就可以允许你修改标题信息,包括缺省的标题(例如 Content-Type 标题).但是,一旦脚本发送了任何非标题的输出(例如,使用 HTML 或 print() 调用),那么PHP就必须先发送完所有的Header,然后终止 HTTP header.而后继续发送主体数据.从这时开始,任何添加或修改Header信息的试图都是不允许的,并会发送上述的错误消息之一。
解决办法:
修改php.ini打开缓存(output_buffering),或者在程序中使用缓存函数ob_start(),ob_end_flush()等。原理是:output_buffering被启用时,在脚本发送输出时,PHP并不发送HTTP header。相反,它将此输出通过管道(pipe)输入到动态增加的缓存中(只能在PHP 4.0中使用,它具有中央化的输出机制)。你仍然可以修改/添加header,或者设置cookie,因为header实际上并没有发送。当全部脚本终止时,PHP将自动发送HTTP header到浏览器,然后再发送输出缓冲中的内容。
=================================================================
PHP 手册实例应用
1:您可以使用heder命令,强制使浏览器使用新鲜的内容(无缓存) 。
也可以给网址增加了一个唯一的编号,使其每次都读取新的内容,避免缓存。
example:

<?php
print "<img src="cs.jpg" mce_src="cs.jpg">";   //通常读取的是缓存文件
?>
<?
print "<img src="cs.jpg?".time()."" mce_src="cs.jpg?".time()."">";   //增加了唯一的编号,使浏览器重新请求
w//print "<img src="cs.jpg?".rand(100,999)."" mce_src="cs.jpg?".rand(100,999)."">"; 
?>

2: 下面是个很好的函数,将图片传送给浏览器显示。

<?php
function PE_img_by_path($PE_imgpath = "")
{
    if (file_exists($PE_imgpath)) {
        $PE_imgarray = pathinfo($PE_imgpath);
        $iconcontent = file_get_contents($PE_imgpath);
        header("Content-type: image/" . $PE_imgarray["extension"]);
        header(&#39;Content-length: &#39; . strlen($iconcontent));
        echo $iconcontent;
        die(0);
    }
    return false;
} 
?>

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