1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281
|
<?xml version="1.0" encoding="iso-8859-1"?>
<reference id="ref.http">
<title>HTTP-Funktionen</title>
<titleabbrev>HTTP</titleabbrev>
<!-- Anmerkung des bersetzers:
entspricht en/functions/http.xml 1.13 -->
<partintro>
<simpara>
Diese Funktionen ermglichen die Manipulation der an den Browser
geschickten Informationen bis hinunter auf HTTP-Protokoll-Ebene.
</simpara>
</partintro>
<refentry id="function.header">
<refnamediv>
<refname>header</refname>
<refpurpose>Sendet einen HTTP-Header</refpurpose>
</refnamediv>
<refsect1>
<title>Beschreibung:</title>
<methodsynopsis>
<type>int</type><methodname>header</methodname>
<methodparam><type>string</type><parameter>string</parameter></methodparam>
</methodsynopsis>
<para>
Die <function>header</function>-Funktion wird zu Beginn einer
<acronym>HTML</acronym>-Datei benutzt um
<acronym>HTTP</acronym>-Anfangsinformationen zu senden. Siehe
<ulink url="&spec.http1.1;">HTTP 1.1 Spezifikationen</ulink> fr
weitere Informationen. <emphasis>Hinweis:</emphasis> Beachten
sie, dass die <function>header</function>-Funktion aufgerufen
werden muss, bevor irgendeine Ausgabe durch normale HTML-Tags
oder PHP erzeugt wird. Es ist ein hufig anzutreffender Fehler,
per <function>include</function> Programm-Code einzubinden (bzw.
per auto_prepend) oder Leerzeichen oder -zeilen vor dem Code
stehen zu haben, die bereits Ausgaben bewirken (auch wenn diese
leer sind) bevor <function>header</function> aufgerufen wird.
</para>
<para>
Es gibt zwei Spezialflle von Header-Aufrufen. Der Erste ist der
"Location"-Header. Es wird nicht nur der Header an den
Browser geschickt, der Apache erhlt auch noch den Status-Code
REDIRECT. Aus Sicht des Skript-Schreibers ist das nicht wichtig,
aber fr alle, die die Internas von Apache verstehen wollen, ist
dies von Belang.
<informalexample>
<programlisting role="php">
header ("Location: http://www.php.net"); /* Umleitung des Browsers
zur PHP-Web-Seite. */
exit; /* Sicher stellen, das nicht trotz Umleitung nachfolgender
Code ausgefhrt wird. */
</programlisting>
</informalexample>
</para>
<para>
Der zweite Spezialfall ist ein Header der mit der Zeichenfolge
"HTTP/" beginnt (Gro-/Kleinschreibung ist egal). Falls
sie z.B. die Dokument-Fehler-Anweisung 404 des Apache auf ein
PHP-Skript zeigen lassen, ist es gut, wenn dieses Skript einen
404-Fehler erzeugt. In diesem Skript sollten sie also zuerst
stehen haben:
<informalexample>
<programlisting role="php">
header ("HTTP/1.0 404 Not Found");
</programlisting>
</informalexample>
</para>
<para>
PHP-Skripte erzeugen oft dynamisches HTML, das weder vom Browser noch
von irgendeinem Proxy zwischen Web-Server und Client-Browser gepuffert
("gecached") werden soll bzw. darf. Bei vielen Proxies und Browsern
kann das Cachen unterbunden werden und zwar mit:
<informalexample>
<programlisting role="php">
header ("Expires: Mon, 26 Jul 1997 05:00:00 GMT"); // Datum der
Vergangenheit
header ("Last-Modified: " . gmdate ("D, d M Y H:i:s") . " GMT");
// immer gendert
header ("Cache-Control: no-cache, must-revalidate"); // HTTP/1.1
header ("Pragma: no-cache"); // HTTP/1.0
</programlisting>
</informalexample>
</para>
<para>
Siehe auch: <function>headers_sent</function>.
</para>
</refsect1>
</refentry>
<refentry id="function.headers-sent">
<refnamediv>
<refname>headers_sent</refname>
<refpurpose>
Gibt &true; zurck, wenn die Header schon gesendet sind
</refpurpose>
</refnamediv>
<refsect1>
<title>Beschreibung:</title>
<methodsynopsis>
<type>boolean</type><methodname>headers_sent</methodname>
<methodparam><parameter>void</parameter></methodparam>
</methodsynopsis>
<para>
Diese Funktion gibt &true; zurck, wenn die HTTP-Header bereits
abgeschickt worden sind, ansonsten wird &false; zurck gegeben.
</para>
<para>
Siehe auch: <function>header</function>.
</para>
</refsect1>
</refentry>
<refentry id="function.setcookie">
<refnamediv>
<refname>setcookie</refname>
<refpurpose>Sendet ein Cookie</refpurpose>
</refnamediv>
<refsect1>
<title>Beschreibung:</title>
<methodsynopsis>
<type>int</type><methodname>setcookie</methodname>
<methodparam><type>string</type><parameter>name</parameter></methodparam>
<methodparam><type>string</type><parameter>value</parameter></methodparam>
<methodparam><type>int</type><parameter>expire</parameter></methodparam>
<methodparam><type>string</type><parameter>path</parameter></methodparam>
<methodparam><type>string</type><parameter>domain</parameter></methodparam>
<methodparam><type>int</type><parameter>secure</parameter></methodparam>
<methodparam choice="opt"><type>string</type><parameter>value</parameter></methodparam>
<methodparam choice="opt"><type>int</type><parameter>expire</parameter></methodparam>
<methodparam choice="opt"><type>string</type><parameter>path</parameter></methodparam>
<methodparam choice="opt"><type>string</type><parameter>domain</parameter></methodparam>
<methodparam choice="opt"><type>int</type><parameter>secure</parameter></methodparam>
</methodsynopsis>
<para>
<function>setcookie</function> definiert ein mit den
Header-Informationen zu bertragendes Cookie. Cookies mssen
<emphasis>vor</emphasis> irgendwelchen anderen Headern gesendet
werden (dies ist eine Einschrnkung der Cookies, nicht von PHP).
Sie mssen deshalb solche Funktionsaufrufe vor irgendwelchen
<literal><html></literal>- oder
<literal><head></literal>-Tags im Skript einsetzen.
</para>
<para>
Alle Argumente - ausser <parameter>name</parameter> - sind
optional. Ist nur der Name angegeben wird das Cookie mit diesem
Namen auf dem Client gelscht. Sie knnen beliebige Argumente
auch durch einen Leerstring (<emphasis>""</emphasis>)
ersetzen, um diese Argumente zu bergehen.
Der <parameter>expire</parameter>-Parameter und das
<parameter>secure</parameter>-Argument sind Integer-Werte und
knnen nicht mit einem Leerstring bersprungen werden. Setzen
sie statt dessen &null; (<emphasis>0</emphasis>). Der
<parameter>expire</parameter>-Parameter ist ein normaler
UNIX-Zeitwert als Integer-Zahl, wie er von der
<function>time</function> oder
<function>mktime</function>-Funktion zurck gegeben wird. Das
<parameter>secure</parameter>-Argument bedeutet, dass das Cookie
nur ber eine sichere HTTP-Verbindung geschickt werden soll.
</para>
<para>
Anwendungsbereiche:
</para>
<itemizedlist>
<listitem>
<simpara>
Cookies werden nicht sichtbar, bevor nicht eine Seite geladen
wird, in der das Cookie sichtbar sein soll.
</simpara>
</listitem>
<listitem>
<simpara>
Cookies mssen mit den selben Parametern gelscht werden, mit
denen sie gesetzt wurden.
</simpara>
</listitem>
</itemizedlist>
<simpara>
In PHP3 werden mehrfache Aufrufe von <function>setcookie</function>
im selben Skript in umgekehrter Reihenfolge abgearbeitet. Sollten
sie also ein Cookie lschen wollen bevor sie ein anderes setzen,
sollten sie das Setzen vor dem Lschen vornehmen. In PHP4 werden
mehrfache Aufrufe von <function>setcookie</function> in der
Reihenfolge ihres Aufrufs behandelt.
</simpara>
<para>
Einige Beispiele, wie Cookies gesetzt / gesendet werden:
<example>
<title><function>setcookie</function>-Beispiele:</title>
<programlisting role="php">
setcookie ("TestCookie", "Test Value");
setcookie ("TestCookie", $value, time()+3600); /* verfllt in 1 Stunde */
setcookie ("TestCookie", $value, time()+3600, "/~rasmus/", ".utoronto.ca",1);
</programlisting>
</example>
</para>
<para>
Beispiele, wie die vorhergehenden Cookies wieder gelscht werden:
<example>
<title><function>setcookie</function>-Beispiele:</title>
<programlisting role="php">
setcookie ("TestCookie");
// Setzen des Ablauf-Zeitpunktes auf 1 Stunde vorher
setcookie ("TestCookie", "", time() - 3600);
setcookie ("TestCookie", "", time() - 3600, "/~rasmus/", ".utoronto.ca",1);
</programlisting>
</example>
Beim Lschen eines Cookies sollten sie sicher stellen, dass die
Verfallszeit in der Vergangenheit liegt, damit ihr Browser
"zufrieden" ist.
</para>
<para>
Beachten sie, dass der Wertebereich des Cookies automatisch
URL-konform codiert (urlencoded) wird, sobald sie das Cookie
senden, und wenn es gelesen wird, wird es automatisch URL-konform
decodiert und einer Variablen zugewiesen, die den selben Namen
wie das Cookie trgt. Um die Inhalte unserer Test-Cookies zu
sehen, brauchen sie nur eines der folgenden Beispiel zu benutzen:
<informalexample>
<programlisting role="php">
echo $TestCookie;
echo $HTTP_COOKIE_VARS["TestCookie"];
</programlisting>
</informalexample>
</para>
<para>
Sie knnen auch ein Array an Cookies setzen, in dem sie die
Array-Schreibweise benutzen. Dadurch werden so viele Cookies
gesetzt, wie ihr Array Elemente hat. Sobald das Cookie aber von
ihrem Skript gelesen wird, werden alle Werte in ein einziges
Array mit dem Cookie-Namen eingelesen:
<informalexample>
<programlisting role="php">
setcookie ("cookie[three]", "cookiethree");
setcookie ("cookie[two]", "cookietwo");
setcookie ("cookie[one]", "cookieone");
if (isset ($cookie)) {
while (list ($name, $value) = each ($cookie)) {
echo "$name == $value<br>\n";
}
}
</programlisting>
</informalexample>
</para>
<para>
Weitere Informationen zu Cookies und deren Spezifikationen
erhalten sie bei Netscape unter <ulink
url="&spec.cookies;">&spec.cookies;</ulink>.
</para>
<simpara>
Microsofts Internet-Explorer 4 mit Servive-Pack 1 geht nicht
korrekt mit Cookies um, die den Pfad-Parameter beinhalten.
</simpara>
<simpara>
Netscape Communicator 4.05 und Microsoft Internet Explorer 3.x
scheinen mit Cookies Probleme zu haben, wenn die Argumente fr
Pfad und Zeit nicht angegeben sind.
</simpara>
</refsect1>
</refentry>
</reference>
<!-- 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:"../../manual.ced"
sgml-exposed-tags:nil
sgml-local-catalogs:nil
sgml-local-ecat-files:nil
End:
-->
|