mirror of
https://github.com/php/doc-de.git
synced 2026-03-24 15:22:14 +01:00
357 lines
12 KiB
XML
357 lines
12 KiB
XML
<?xml version="1.0" encoding="utf-8"?>
|
|
<!-- $Revision$ -->
|
|
<!-- EN-Revision: cefe817294283d42d0555951c02b9223a5a5ca4a Maintainer: sammywg Status: ready -->
|
|
<!-- Reviewed: yes -->
|
|
<!-- Rev-Revision: f32912d04f3da53ad720bd782ad5a2483a1d79a0 Reviewer: samesch -->
|
|
<refentry xmlns:xlink="http://www.w3.org/1999/xlink" xmlns="http://docbook.org/ns/docbook" xml:id="function.header">
|
|
<refnamediv>
|
|
<refname>header</refname>
|
|
<refpurpose>Sendet einen HTTP-Header in Rohform</refpurpose>
|
|
</refnamediv>
|
|
|
|
<refsect1 role="description">
|
|
&reftitle.description;
|
|
<methodsynopsis>
|
|
<type>void</type><methodname>header</methodname>
|
|
<methodparam><type>string</type><parameter>header</parameter></methodparam>
|
|
<methodparam choice="opt"><type>bool</type><parameter>replace</parameter><initializer>&true;</initializer></methodparam>
|
|
<methodparam choice="opt"><type>int</type><parameter>response_code</parameter><initializer>0</initializer></methodparam>
|
|
</methodsynopsis>
|
|
<para>
|
|
<function>header</function> wird zum Senden von
|
|
<acronym>HTTP</acronym>-Anfangsinformationen (Headern) im Rohformat
|
|
verwendet. Weitere Informationen über die <acronym>HTTP</acronym>-Header
|
|
finden Sie in der
|
|
<link xlink:href="&url.rfc;2616">HTTP/1.1-Spezifikation</link>.
|
|
</para>
|
|
<para>
|
|
Beachten Sie, dass Sie die Funktion <function>header</function> aufrufen
|
|
müssen, bevor Sie irgendeine andere Art von Ausgabe (seien es normale
|
|
HTML-Tags, Leerzeilen in einer Datei oder von PHP) zum Client schicken. Es
|
|
handelt sich hier um einen typischen Fehler, der zum Beispiel auftritt,
|
|
wenn Sie Code mit Leerzeichen oder Leerzeilen, die ausgegeben werden,
|
|
mittels <function>include</function> oder <function>require</function> oder
|
|
einer anderen Datei-Zugriffsfunktion einlesen, bevor
|
|
<function>header</function> aufgerufen wird. Das gleiche Problem kann auch
|
|
auftreten, wenn Sie eine Datei verwenden, in der HTML und PHP vermischt
|
|
wurden.
|
|
<informalexample>
|
|
<programlisting role="php">
|
|
<![CDATA[
|
|
<html>
|
|
<?php
|
|
/* Dies wird einen Fehler provozieren. Beachten Sie die vorangehende
|
|
* Ausgabe, die vor dem Aufruf von header() erzeugt wird */
|
|
header('Location: http://www.example.com/');
|
|
exit;
|
|
?>
|
|
]]>
|
|
</programlisting>
|
|
</informalexample>
|
|
</para>
|
|
</refsect1>
|
|
|
|
<refsect1 role="parameters">
|
|
&reftitle.parameters;
|
|
<para>
|
|
<variablelist>
|
|
<varlistentry>
|
|
<term><parameter>header</parameter></term>
|
|
<listitem>
|
|
<para>
|
|
Der Header-String.
|
|
</para>
|
|
<para>
|
|
Es gibt zwei Spezialfälle von Header-Aufrufen. Der erste ist ein
|
|
Header, der mit "<literal>HTTP/</literal>" beginnt (ob Groß- oder
|
|
Kleinschreibung ist nicht relevant). Dieser Header wird verwendet, um
|
|
den zu sendenden HTTP-Statuscode anzugeben. Wenn Sie zum Beispiel
|
|
Apache konfiguriert haben, ein PHP-Skript zum Bearbeiten von
|
|
Anforderungen fehlender Dateien (mittels der
|
|
<literal>ErrorDocument</literal>-Direktive) zu verwenden, möchten Sie
|
|
bestimmt sicherstellen, dass Ihr Skript den passenden Statuscode
|
|
generiert.
|
|
</para>
|
|
<para>
|
|
<informalexample>
|
|
<programlisting role="php">
|
|
<![CDATA[
|
|
<?php
|
|
// Dieses Beispiel veranschaulicht den Spezialfall "HTTP/".
|
|
// Bessere Alternativen für typische Anwendungsfälle sind
|
|
// 1. header($_SERVER["SERVER_PROTOCOL"] . " 404 Not Found");
|
|
// (um http-Statusmeldungen für Clients, die noch HTTP/1.0 verwenden,
|
|
// zu überschreiben)
|
|
// 2. http_response_code(404); (um die Standardmeldung zu verwenden)
|
|
header("HTTP/1.1 404 Not Found");
|
|
?>
|
|
]]>
|
|
</programlisting>
|
|
</informalexample>
|
|
</para>
|
|
<para>
|
|
Der zweite Spezialfall ist der "Location:"-Header. Es wird nicht nur
|
|
der Header an den Browser geschickt, sondern auch ein
|
|
<literal>REDIRECT</literal>-Statuscode (302), wenn nicht bereits der
|
|
<literal>201</literal>- oder ein <literal>3xx</literal>-Statuscode
|
|
gesendet wurde.
|
|
</para>
|
|
<para>
|
|
<informalexample>
|
|
<programlisting role="php">
|
|
<![CDATA[
|
|
<?php
|
|
header("Location: http://www.example.com/"); /* Browser umleiten */
|
|
|
|
/* Stellen Sie sicher, dass der nachfolgende Code nicht ausgeführt wird,
|
|
wenn eine Umleitung stattfindet. */
|
|
exit;
|
|
?>
|
|
]]>
|
|
</programlisting>
|
|
</informalexample>
|
|
</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
<varlistentry>
|
|
<term><parameter>replace</parameter></term>
|
|
<listitem>
|
|
<para>
|
|
Der optionale Parameter <parameter>replace</parameter> gibt an, ob der
|
|
Header einen vorhergehenden gleichartigen Header ersetzen soll, oder
|
|
ob ein zweiter Header des selben Typs hinzugefügt werden soll.
|
|
Standardmäßig wird ersetzt; wenn Sie als zweites Argument &false;
|
|
übergeben, können Sie so mehrere Header desselben Typs erzwingen. Zum
|
|
Beispiel:
|
|
</para>
|
|
<para>
|
|
<informalexample>
|
|
<programlisting role="php">
|
|
<![CDATA[
|
|
<?php
|
|
header('WWW-Authenticate: Negotiate');
|
|
header('WWW-Authenticate: NTLM', false);
|
|
?>
|
|
]]>
|
|
</programlisting>
|
|
</informalexample>
|
|
</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
<varlistentry>
|
|
<term><parameter>response_code</parameter></term>
|
|
<listitem>
|
|
<para>
|
|
Forciert einen HTTP-Response-Code des angegebenen Wertes. Dieser
|
|
Parameter hat nur einen Effekt, wenn <parameter>header</parameter>
|
|
nicht leer ist.
|
|
</para>
|
|
</listitem>
|
|
</varlistentry>
|
|
</variablelist>
|
|
</para>
|
|
</refsect1>
|
|
|
|
<refsect1 role="returnvalues">
|
|
&reftitle.returnvalues;
|
|
<para>
|
|
&return.void;
|
|
</para>
|
|
</refsect1>
|
|
|
|
<refsect1 role="errors">
|
|
&reftitle.errors;
|
|
<para>
|
|
Wenn der Header nicht gesendet werden kann, gibt <function>header</function>
|
|
einen Fehler der Stufe <constant>E_WARNING</constant> aus.
|
|
</para>
|
|
</refsect1>
|
|
|
|
<refsect1 role="examples">
|
|
&reftitle.examples;
|
|
<para>
|
|
<example>
|
|
<title>Download-Dialog</title>
|
|
<para>
|
|
Wollen Sie den Benutzer auffordern, die von Ihnen gesendeten Daten, &zb;
|
|
eine generierte PDF-Datei, zu speichern, können Sie den Header
|
|
<link xlink:href="&url.rfc;2183">Content-Disposition</link> verwenden, um
|
|
einen empfohlenen Dateinamen anzubieten und den Browser zu zwingen, den
|
|
Dialog zum Speichern anzuzeigen.
|
|
</para>
|
|
<programlisting role="php">
|
|
<![CDATA[
|
|
<?php
|
|
// Wir werden eine PDF-Datei ausgeben
|
|
header('Content-Type: application/pdf');
|
|
|
|
// Sie wird downloaded.pdf genannt
|
|
header('Content-Disposition: attachment; filename="downloaded.pdf"');
|
|
|
|
// Die ursprüngliche PDF-Datei heißt original.pdf
|
|
readfile('original.pdf');
|
|
?>
|
|
]]>
|
|
</programlisting>
|
|
</example>
|
|
</para>
|
|
<para>
|
|
<example>
|
|
<title>Caching-Direktiven</title>
|
|
<para>
|
|
PHP-Skripte erzeugen oft dynamische Inhalte, die weder vom Browser noch
|
|
von irgendeinem Proxy zwischen Web-Server und Client-Browser gepuffert
|
|
("gecached") werden sollen bzw. dürfen. Bei vielen Proxies und Browsern
|
|
kann das Cachen wie folgt unterbunden werden:
|
|
</para>
|
|
<programlisting role="php">
|
|
<![CDATA[
|
|
<?php
|
|
header("Cache-Control: no-cache, must-revalidate"); // HTTP/1.1
|
|
header("Expires: Sat, 26 Jul 1997 05:00:00 GMT"); // Datum in der Vergangenheit
|
|
?>
|
|
]]>
|
|
</programlisting>
|
|
<para>
|
|
<note>
|
|
<para>
|
|
Es könnte auch sein, dass Ihre Seiten nicht zwischengespeichert werden,
|
|
auch wenn Sie die obigen Header nicht ausgeben. Es gibt eine Reihe von
|
|
Optionen, welche die Benutzer in ihrem Browser einstellen können, um
|
|
das standardmäßige Caching-Verhalten zu verändern. Durch das Senden
|
|
obiger Header sollten Sie jedwede Einstellungen, die die Ausgabe Ihres
|
|
Skriptes zwischenspeichern würden, außer Kraft setzen.
|
|
</para>
|
|
<para>
|
|
Weiterhin können Sie <function>session_cache_limiter</function> und die
|
|
Konfigurationsoption <literal>session.cache_limiter</literal>
|
|
verwenden, um die korrekten Header bezüglich Caching automatisch
|
|
generieren zu lassen, wenn Sessions verwendet werden sollen.
|
|
</para>
|
|
</note>
|
|
</para>
|
|
</example>
|
|
</para>
|
|
<para>
|
|
<example>
|
|
<title>Setzen eines Cookies</title>
|
|
<para>
|
|
Die Funktion <function>setcookie</function> bietet eine einfache
|
|
Möglichkeit, Cookies zu setzen. Um ein Cookie zu setzen, das Attribute
|
|
enthält, die <function>setcookie</function> nicht unterstützt, kann die
|
|
Funktion <function>header</function> verwendet werden.
|
|
</para>
|
|
<para>
|
|
Im folgenden Beispiel wird ein Cookie mit dem Attribut
|
|
<literal>Partitioned</literal> gesetzt.
|
|
</para>
|
|
<programlisting role="php">
|
|
<![CDATA[
|
|
<?php
|
|
header('Set-Cookie: name=value; Secure; Path=/; SameSite=None; Partitioned;');
|
|
?>
|
|
]]>
|
|
</programlisting>
|
|
</example>
|
|
</para>
|
|
</refsect1>
|
|
|
|
<refsect1 role="notes">
|
|
&reftitle.notes;
|
|
¬e.network.header.sapi;
|
|
<note>
|
|
<para>
|
|
Sie können die Limitierung, dass Header vor jeglicher Ausgabe gesendet
|
|
werden müssen, umgehen, indem Sie die Ausgabepufferung verwenden, mit dem
|
|
Overhead, dass alle Ausgaben an den Browser auf dem Server gepuffert
|
|
werden, bis Sie diese senden. Sie können dies tun, indem Sie in Ihrem
|
|
Skript <function>ob_start</function> und <function>ob_end_flush</function>
|
|
verwenden, oder indem Sie die Konfigurationsdirektive
|
|
<literal>output_buffering</literal> in der &php.ini; bzw. in den
|
|
Server-Konfigurationsdateien auf "On" setzen.
|
|
</para>
|
|
</note>
|
|
<note>
|
|
<para>
|
|
Die HTTP-Status-Headerzeile wird immer die erste zum Client gesendete
|
|
sein, egal ob der aktuelle <function>header</function>-Aufruf der erste
|
|
ist oder nicht. Der Status kann mittels <function>header</function>
|
|
jederzeit mit einer neuen Statuszeile überschrieben werden, sofern die
|
|
HTTP-Header noch nicht gesendet wurden.
|
|
</para>
|
|
</note>
|
|
<note>
|
|
<para>
|
|
Die meisten zeitgemäßen Clients akzeptieren relative
|
|
<acronym>URI</acronym>s als Argument für
|
|
<link xlink:href="&spec.http1.1;#section-7.1.2">Location:</link>, aber
|
|
einige ältere Clients benötigen einen absoluten URI inklusive dem Schema,
|
|
Hostnamen und absoluten Pfad. Gewöhnlich können Sie mittels
|
|
<varname>$_SERVER['HTTP_HOST']</varname>,
|
|
<varname>$_SERVER['PHP_SELF']</varname> und <function>dirname</function>
|
|
aus einem relativen Link einen absoluten URI selbst erstellen:
|
|
<informalexample>
|
|
<programlisting role="php">
|
|
<![CDATA[
|
|
<?php
|
|
/* Weiterleitung auf eine andere Seite im aktuell angeforderten Verzeichnis */
|
|
$host = $_SERVER['HTTP_HOST'];
|
|
$uri = rtrim(dirname($_SERVER['PHP_SELF']), '/\\');
|
|
$extra = 'mypage.php';
|
|
header("Location: http://$host$uri/$extra");
|
|
exit;
|
|
?>
|
|
]]>
|
|
</programlisting>
|
|
</informalexample>
|
|
</para>
|
|
</note>
|
|
<note>
|
|
<para>
|
|
Die Session-ID wird nicht mit dem Location-Header übermittelt, selbst wenn
|
|
<link linkend="ini.session.use-trans-sid">session.use_trans_sid</link>
|
|
eingeschaltet ist. Sie muss daher manuell durch Verwendung der Konstante
|
|
<constant>SID</constant> hinzugefügt werden.
|
|
</para>
|
|
</note>
|
|
</refsect1>
|
|
|
|
<refsect1 role="seealso">
|
|
&reftitle.seealso;
|
|
<para>
|
|
<simplelist>
|
|
<member><function>headers_sent</function></member>
|
|
<member><function>setcookie</function></member>
|
|
<member><function>http_response_code</function></member>
|
|
<member><function>header_remove</function></member>
|
|
<member><function>headers_list</function></member>
|
|
<member>
|
|
Den Abschnitt über
|
|
<link linkend="features.http-auth">HTTP-Authentifizierung mit PHP</link>
|
|
</member>
|
|
</simplelist>
|
|
</para>
|
|
</refsect1>
|
|
|
|
</refentry>
|
|
<!-- Keep this comment at the end of the file
|
|
Local variables:
|
|
mode: sgml
|
|
sgml-omittag:t
|
|
sgml-shorttag:t
|
|
sgml-minimize-attributes:nil
|
|
sgml-always-quote-attributes:t
|
|
sgml-indent-step:1
|
|
sgml-indent-data:t
|
|
indent-tabs-mode:nil
|
|
sgml-parent-document:nil
|
|
sgml-default-dtd-file:"~/.phpdoc/manual.ced"
|
|
sgml-exposed-tags:nil
|
|
sgml-local-catalogs:nil
|
|
sgml-local-ecat-files:nil
|
|
End:
|
|
vim600: syn=xml fen fdm=syntax fdl=2 si
|
|
vim: et tw=78 syn=sgml
|
|
vi: ts=1 sw=1
|
|
-->
|