Heim  >  Artikel  >  Backend-Entwicklung  >  Ausführliche Erläuterung der Gründe, warum der Seitensprung zur Header-Position fehlschlägt

Ausführliche Erläuterung der Gründe, warum der Seitensprung zur Header-Position fehlschlägt

伊谢尔伦
伊谢尔伦Original
2018-05-18 10:47:209120Durchsuche

http-Header-Informationen
Header-Informationen haben viele Funktionen, die wichtigsten sind die folgenden:
1. Springen
Wenn der Browser den Header akzeptiert Nach „Location: xxxx“ in den Informationen wird automatisch zur URL-Adresse gesprungen, auf die xxxx verweist. Dies ähnelt dem Schreiben eines Sprungs mit js. Dieser Sprung ist jedoch nur dem Browser bekannt und Benutzer können ihn nicht sehen, unabhängig davon, ob etwas im Inhalt enthalten ist.
Beispiel: header("Location: http://www.php.cn/");
2. Geben Sie den Inhalt der Webseite an
Die gleiche XML-Datei, wenn die Header-Informationen. Wenn Sie Folgendes angeben: Inhaltstyp: application/xml, analysiert der Browser diese entsprechend dem XML-Dateiformat. Wenn die Header-Informationen jedoch lauten: Content-type: text/xml, interpretiert der Browser sie als gespeicherten Text. (Browser analysieren Dateien nicht nach Erweiterungen)
Beispiel: header('Content-type: application/pdf');
3. Anhang
Ich weiß nicht, ob Sie Mir ist aufgefallen, dass der Browser manchmal beim Herunterladen von etwas von einigen Websites nach dem Klicken auf den Download-Link den Anhang als Webseite öffnet und alle angezeigten Inhalte verstümmelte Zeichen sind. Dieses Problem hängt auch mit den Header-Informationen zusammen. Manchmal entscheidet der Browser anhand des Inhaltstyps, ob er geöffnet oder gespeichert werden soll, und trifft daher manchmal ein falsches Urteil (hauptsächlich, weil der Website-Designer vergisst, den Inhaltstyp zu schreiben). Tatsächlich gibt es eine andere Möglichkeit anzugeben, dass der Inhalt ein Anhang ist und gespeichert werden muss: Content-Disposition: attachment="xxxxx"
Beispiel: header('Content-Disposition: attachment; filename ="downloaded.pdf "');
//Datei öffnen und ausgeben
readfile('original.pdf');
HTTP-Protokollstatuscode
1×× Reserviert
2× × Zeigt an, dass die Anfrage erfolgreich war Empfangen
3×× Der Kunde muss die Anfrage weiter verfeinern, um die Anfrage abzuschließen
4×× Clientfehler
5×× Serverfehler

Syntax:

header(string,replace,http_response_code)

Parameter
Zeichenfolge: erforderlich. Gibt die zu sendende Header--Zeichenfolge an.
ersetzen: optional. Gibt an, ob dieser Header den vorherigen Header ersetzt oder einen zweiten Header hinzufügt. Der Standardwert ist wahr (Ersetzung). false (mehrere Header desselben Typs zulassen).
http_response_code: Optional. Erzwingt den HTTP-Antwortcode auf den angegebenen Wert. (Verfügbar in PHP 4 und höher)
Beispiel 1:
Webseite umleiten

   <?php 
      header("Location: http://www.php.cn/");
      exit;
   ?>

Beispiel 2:
Erzwingen Sie, dass Benutzer bei jedem Besuch die neuesten Informationen erhalten page , anstatt den Cache zu verwenden, der auf der Clientseite vorhanden ist.

   <?php  
       //告诉浏览器此页面的过期时间(用格林威治时间表示),只要是已经过去的日期即可。  
       header("Expires:Mon,26 Jul 1970 05:00:00 GMT");  
       //告诉浏览器此页面的最后更新日期(用格林威治时间表示)也就是当天,目的就是强迫浏览器获取最新资料  
       header("Last-Modified:".gmdate("D,d M Y H:i:s")."GMT");  
       //告诉客户端浏览器不使用缓存  
       header("Cache-Control:    no-cache,    must-revalidate");  
       //参数(与以前的服务器兼容),即兼容HTTP1.0协议  
       header("Pragma:    no-cache"); 
  ?>

Beispiel 3:
Statuswert an den Browser ausgeben, hauptsächlich für die Zugriffskontrolle verwendet

   <?php  
       header(&#39;HTTP/1.1 401 Unauthorized&#39;);  
       header(&#39;status: 401 Unauthorized&#39;);  
   ?>

Beispiel 4:
Um einen Benutzer daran zu hindern, auf die Seite zuzugreifen , können Sie den Status auf 404 setzen, wie unten gezeigt, sodass der Browser anzeigt, dass die Seite nicht existiert

   <?php  
       header(&#39;HTTP/1.1    404    Not Found&#39;);  
       header("status:    404    Not Found"); //这种写法错误
   ?>

Beispiel 5:
Der Speicherort der versteckten Datei
HTML-Tag 964063332538fb740a260abbbb0bad425db79b134e9f6b82c0b36e0489ee08ed kann einen normalen Dateidownload realisieren. 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.

header("Content-type: audio/mpeg");
header("Content-Disposition: attachment; filename=filenale");
header("Content-Description: PHP3 Generated Data");

Beispiel 6:
Inhalt vor der Header-Funktion eingeben
Im Allgemeinen können HTML-Inhalte nicht vor der Header-Funktion ausgegeben werden. Ebenso gibt es setcookie() und session-Funktionen müssen 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 :

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

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

Das obige ist der detaillierte Inhalt vonAusführliche Erläuterung der Gründe, warum der Seitensprung zur Header-Position fehlschlägt. 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

In Verbindung stehende Artikel

Mehr sehen