Heim  >  Artikel  >  Backend-Entwicklung  >  Lassen Sie uns über die Erweiterung der Header-Nutzung in PHP sprechen

Lassen Sie uns über die Erweiterung der Header-Nutzung in PHP sprechen

伊谢尔伦
伊谢尔伦Original
2017-06-24 14:28:011102Durchsuche

header() wird zum Senden von Rohheadern verwendet. Weitere Informationen zu Headern finden Sie in der HTTP/1.1-Spezifikation Beispiel 1:

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

Beispiel 2: Deaktivieren Sie das Seiten-Caching im IE
<?PHP
Header("Location: http://www.php.cn"); 
exit;//在每个重定向之后都必须加上“exit",避免发生错误后,继续执行。
?>

Damit Betrachter jedes Mal die neuesten Informationen erhalten, anstatt die Informationen im Proxy oder 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
?>
Wenn sich die Webseiten auf dem Server häufig ändern, setzen Sie Expires auf -1, was bedeutet, dass es sofort abläuft. Wenn eine Webseite jeden Tag um 1 Uhr morgens aktualisiert wird, können Sie „Ablaufzeit“ auf 1 Uhr morgens am nächsten Tag festlegen. Wenn der HTTP1.1-Server CacheControl = no-cache angibt, speichert der Browser die Webseite nicht zwischen.

Alte HTTP 1.0-Server können den Cache-Control-Header nicht verwenden. Aus Gründen der Abwärtskompatibilität mit HTTP 1.0-Servern bietet IE daher spezielle Unterstützung für HTTP mithilfe des Pragma:no-cache-Headers. Wenn der Client über eine sichere Verbindung mit dem Server kommuniziert und der Server in der Antwort den Header „Pragma:no-cache“ zurückgibt, speichert Internet Explorer die Antwort nicht zwischen. Hinweis: Pragma:no-cache verhindert das Caching nur, wenn es in einer sicheren Verbindung verwendet wird. Bei Verwendung in einer nicht sicheren Seite ist die Verarbeitungsmethode dieselbe wie Expires:-1. Die Seite wird zwischengespeichert, aber als sofort markiert . Abgelaufen.
http-equiv-Meta-Tag:
Sie können http-equiv-Meta verwenden, um den angegebenen HTTP-Nachrichtenheader auf der HTML-Seite zu markieren. Ältere IE-Versionen unterstützen möglicherweise keine HTML-Meta-Tags, daher ist es am besten, HTTP-Nachrichtenheader zu verwenden, um das Caching zu deaktivieren.
--------------------------------- --- ----------------------------------

Beispiel 3: Lassen Sie den Browser des Benutzers erscheinen Dateiinformationen konnten nicht gefunden werden.

Viele Informationen im Internet besagen Folgendes: Die PHP-Funktion header() kann einen Status-Header an den Browser senden,
z. B. header("Status: 404 Not Found"). Tatsächlich lautet die vom Browser zurückgegebene Antwort jedoch:
Nachdem Sie einige Informationen überprüft haben, lautet die richtige Schreibweise:

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

Der erste Teil ist der Version des HTTP-Protokolls (HTTP-Version); der zweite Teil ist der Statuscode (Status); der dritte Teil ist die Begründungsphrase (Reason-Phrase).
--------------------------------- --- ----------------------------------

header(”http/1.1 404 Not Found”);
Beispiel 4: Benutzern das Herunterladen von Dateien ermöglichen (Versteckte Dateien (Speicherort)



HTML-Tag können einen normalen
Datei-Download
erreichen. Wenn Sie die Datei vertraulich behandeln möchten und anderen den Dateilink nicht mitteilen können, können Sie die Header-Funktion zum Herunterladen der Datei verwenden. Beispiel 4: Eingabe von Inhalten vor der Header-Funktion

<?php
header("Content-type: application/x-gzip"); 
header("Content-Disposition: attachment; filename=文件名/"); 
header("Content-Description: PHP Generated Data"); 
?>
Im Allgemeinen können HTML-Inhalte nicht vor der Header-Funktion ausgegeben werden. Zu den ähnlichen gehören setcookie() und Session-Funktionen. Die Funktion muss Nachrichtenkopfinformationen zum Ausgabestream hinzufügen. Wenn es Anweisungen wie echo gibt, bevor header() ausgeführt wird, wird beim späteren Auftreten von header() der Fehler „Warnung: Header-Informationen können nicht geändert werden – Header wurden bereits gesendet von …“ gemeldet. Das heißt, dass vor diesen Funktionen kein Text, keine Leerzeilen, kein Wagenrücklauf usw. stehen darf und es am besten ist, die Funktion „exit()“ nach der Funktion „header()“ hinzuzufügen. In der folgenden falschen Schreibweise befindet sich beispielsweise eine Leerzeile zwischen den beiden Abschnitten

PHP-Code :

//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;
} 
?>

Das obige ist der detaillierte Inhalt vonLassen Sie uns über die Erweiterung der Header-Nutzung in PHP sprechen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn