manuzhai                Sun Mar 24 19:30:34 2002 EDT

  Modified files:              
    /phpdoc/nl/functions        http.xml 
  Log:
  First version of HTTP module.
  
Index: phpdoc/nl/functions/http.xml
diff -u /dev/null phpdoc/nl/functions/http.xml:1.3
--- /dev/null   Sun Mar 24 19:30:34 2002
+++ phpdoc/nl/functions/http.xml        Sun Mar 24 19:30:33 2002
@@ -0,0 +1,419 @@
+<?xml version="1.0" encoding="iso-8859-1"?>
+<!-- $Revision: 1.3 $ -->
+ <reference id="ref.http">
+  <title>HTTP functies</title>
+  <titleabbrev>HTTP</titleabbrev>
+
+  <partintro>
+   <simpara>
+    Met deze functies kun je de output die teruggezonden wordt naar de
+       remote browser manipuleren op het HTTP protocol niveau.
+   </simpara>
+  </partintro>
+
+  <refentry id="function.header">
+   <refnamediv>
+    <refname>header</refname>
+    <refpurpose>Stuur een raw HTTP header</refpurpose>
+   </refnamediv>
+   <refsect1>
+    <title>Beschrijving</title>
+     <methodsynopsis>
+      <type>int</type><methodname>header</methodname>
+      <methodparam><type>string</type><parameter>string</parameter></methodparam>
+      <methodparam 
+choice="opt"><type>bool</type><parameter>replace</parameter></methodparam>
+     </methodsynopsis>
+    <para>
+     <function>header</function> wordt gebruikt om raw
+     <acronym>HTTP</acronym> headers te versturen. Zie de <ulink
+     url="&spec.http1.1;">HTTP/1.1 specificatie</ulink> voor meer
+     informatie over <acronym>HTTP</acronym> headers.
+    </para>
+    <para>
+     De optionele <parameter>replace</parameter> parameter geeft aan
+        of de header een vorige gelijkaardige header moet vervangen, of
+        een tweede header van hetzelfde type toe moet voegen. Standaard
+        zal hij vervangen, maar als je &false; meegeeft als tweede
+        argument kun je meerdere headeers van het zelfde type forceren.
+        Bij voorbeeld:
+     <informalexample>
+      <programlisting role="php">
+<![CDATA[
+header('WWW-Authenticate: Negotiate');
+header('WWW-Authenticate: NTLM',false);
+]]>
+      </programlisting>
+     </informalexample>
+    </para>
+    <para>
+        Er zijn twee speciale header calls. De eerste is een header die
+        begint met de string "<literal>HTTP/</literal>" (case is onbelangrijk),
+        die wordt gebruikt om uit te zoeken welke HTTP status moet
+        worden verzonden. Bijvoorbeeld, als je Apache hebt geconfigureerd om
+        een PHP script te gebruiken om requests voor ontbrekende bestanden
+        af te handelen (door de <literal>ErrorDocument</literal> directive te
+        gebruiken), wil je er misschien voor zorgen dat je script
+        de goede status code genereert.
+     <informalexample>
+      <programlisting role="php">
+<![CDATA[
+<?php
+  header("HTTP/1.0 404 Not Found");
+?>
+]]>
+      </programlisting>
+     </informalexample>
+     <note>
+      <para>
+          Als je de return status op deze manier wil instellen moet je
+          zorgen dat dit de eerste header is die je verstuurt. Vergeet niet
+          dat <function>setcookie</function> <function>header</function> 
+          intern gebruikt en dat de sessie functies misschien proberen
+          om een cookie neer te zetten, zodat deze interfereren met het
+          instellen van een return status via 
+          <literal>header("HTTP ...")</literal>.
+      </para>
+     </note>
+     <note>
+      <para>
+          In PHP 3 werkt dit alleen als PHP is gecompileerd als een
+          Apache module. Je kunt echter hetzelfde effect verkrijgen
+          door middel van het gebruiken van de 
+       <literal>Status</literal> header.
+       <informalexample>
+        <programlisting role="php">
+<![CDATA[
+header("Status: 404 Not Found");
+]]>
+        </programlisting>
+       </informalexample>
+      </para>
+     </note>
+    </para>
+    <para>
+        De tweede speciale case is de "Location:" header. Deze header wordt
+        niet alleen teruggestuurd naar de browser, maar hij geeft ook een 
+     <literal>REDIRECT</literal> (302) status code aan de browser tenzij 
+     een <literal>3xx</literal> status code al eerder werd ingesteld.
+     <informalexample>
+      <programlisting role="php">
+<![CDATA[
+header("Location: http://www.php.net/";); /* Stuur de browser naar de PHP web site */
+exit;                 /* Zorg dat de code hieronder niet wordt uitgevoerd */
+]]>
+      </programlisting>
+     </informalexample>
+    </para>
+    <note>
+     <para>
+      HTTP/1.1 heeft een absolute <acronym>URI</acronym> als argument voor
+      <ulink url="&spec.http1.1;-sec14.html#sec14.30">Location:</ulink>,
+         inclusief het schema, de hostname en absoluut pad, maar sommige
+         clients accepteren relatieve URIs. Je kunt normaal
+      <literal>$_SERVER['HTTP_HOST']</literal>, 
+<literal>$_SERVER['PHP_SELF']</literal>
+      en <function>dirname</function> gebruiken om zelf een
+         absolute URI te maken van een relatieve:
+      <informalexample>
+       <programlisting>
+<![CDATA[
+header("Location: http://".$_SERVER['HTTP_HOST']
+                      .dirname($_SERVER['PHP_SELF'])
+                      ."/".$relative_url);
+]]>
+       </programlisting>
+      </informalexample>
+     </para>
+    </note>
+    <para>
+        PHP scripts genereren vaak dynamische content die niet mag worden
+        gecached door de client browser of een proxy cache tussen de server
+        en de client browser. Je kunt veel proxies en clients kunnen forceren
+        het cachen uit te zetten met
+          <informalexample>
+      <programlisting role="php">
+<![CDATA[
+header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");    // Datum in het verleden
+header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT"); 
+                                                     // Altijd veranderd
+header("Cache-Control: no-store, no-cache, must-revalidate");  // HTTP/1.1
+header("Cache-Control: post-check=0, pre-check=0", false);
+header("Pragma: no-cache");                          // HTTP/1.0
+]]>
+      </programlisting>
+     </informalexample>
+     <note>
+      <para>
+          Het zou kunnen dat je pagina's zelfs niet worden gecached als je 
+          niet alle headers hierboven meestuurt. Er zijn een aantal opties
+          die gebruikers zelf kunnen instellen voor hun browser die ervoor
+          zorgen dat hun standaard caching gedrag verandert. Door de bovenstaande
+          headers mee te sturen kun je alle instellingen die anders zorgen dat
+          de output van je script wordt gecached overschrijven.
+      </para>
+      <para>
+          Bovendien kunnen de <function>session_cache_limiter</function>
+          en de <literal>session.cache_limiter</literal> configuratie
+          worden gebruikt om automatisch de correcte caching-gerelateerde
+          headers mee te sturen wanneer er sessies worden gebruikt.
+      </para>
+     </note>
+    </para>
+    <para>
+        Onthoud dat <function>header</function> moet worden aangeroepen
+        voor er output is verzonden, door normale HTML tags, lege regels in een
+        file, of vanuit PHP. Het is een veel voorkomende fout
+        om met <function>include</function>,
+     <function>require</function>, functies, of een andere file toegang
+     functie output te verzenden voordat <function>header</function>
+        wordt aangeroepen. Hetzelfde probleem bestaat wanneer
+        er een enkele PHP/HTML file wordt gebruikt.
+     <informalexample>
+      <programlisting role="php">
+<![CDATA[
+<?php require("user_logging.inc") ?>
+
+
+<?php header ("Content-type: audio/x-pn-realaudio"); ?>
+// Werkt niet, zie de lege regels hierboven
+]]>
+      </programlisting>
+     </informalexample>
+     <note>
+      <para>
+          In PHP 4 kun je output buffering gebruiken om dit probleem te voorkomen,
+          waarbij het begin van al je output naar de browser wordt gebuffered
+          op de server tot je het verzendt. Je kunt dit doen door 
+       <function>ob_start</function> en <function>ob_end_flush</function>
+       aan te roepen in je script, of door de <literal>output_buffering</literal>
+          instelling in je <filename>php.ini</filename> of je server configuratie
+          files in te stellen.
+      </para>
+     </note>
+    </para>    
+    <para>
+        Als je wil dat de gebruiker wordt gevraagd de data die je zendt
+        op te slaan, zoals een gegenereerd PDF bestand, kun je de 
+     <ulink url="&url.rfc2183;">Content-Disposition</ulink> header gebruiken
+        om een standaard filenaam mee te geven en de browser te forceren de
+        opslaan dialoog te laten zien.
+     <informalexample>
+      <programlisting role="php">
+<![CDATA[
+<?php
+header("Content-type: application/pdf");
+header("Content-Disposition: attachment; filename=downloaded.pdf");
+
+/* ... output pdf file ... */
+]]>
+      </programlisting>
+     </informalexample>
+     <note>
+      <para>
+          Er is een bug in Microsoft Internet Explorer 4.01 die ervoor
+          zorgt dat dit niet werkt. Er is niks aan te doen. Er is ook een
+          bug in Microsoft Internet Explorer 5.5 dat hiermee
+          problemen veroorzaakt. Deze kan worden opgelost door up te graden
+          naar Service Pack 2 of later.
+      </para>
+     </note>
+    </para>
+    <para>
+        Zie ook: <function>headers_sent</function>,
+     <function>setcookie</function>, en de sectie over 
+     <link linkend="features.http-auth">HTTP authenticatie</link>.
+    </para>
+   </refsect1>
+  </refentry>
+
+  <refentry id="function.headers-sent">
+   <refnamediv>
+    <refname>headers_sent</refname>
+    <refpurpose>Geeft &true; terug als de headers verzonden zijn</refpurpose>
+   </refnamediv>
+   <refsect1>
+    <title>Beschrijving</title>
+     <methodsynopsis>
+      <type>bool</type><methodname>headers_sent</methodname>
+      <void/>
+     </methodsynopsis>
+    <para>
+        Deze functie geeft &true; terug als de HTTP headers al zijn verzonden,
+        anders &false;
+    </para>
+    <para>
+     Zie ook: <function>header</function>
+    </para>
+   </refsect1>
+  </refentry>
+
+  <refentry id="function.setcookie">
+   <refnamediv>
+    <refname>setcookie</refname>
+    <refpurpose>Verstuur een cookie</refpurpose>
+   </refnamediv>
+   <refsect1>
+    <title>Beschrijving</title>
+     <methodsynopsis>
+      <type>int</type><methodname>setcookie</methodname>
+      <methodparam><type>string</type><parameter>name</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> defineert een cookie dat wordt
+        meegezonden met de rest van de header informatie. Cookies
+        moeten worden verzonden <emphasis>voordat</emphasis> 
+        enige andere headers worden verzonden (dit is een restrictie
+        van cookies, niet van PHP). Daarom moet je deze functie aanroepen
+        voor enige <literal>&lt;html></literal> of
+     <literal>&lt;head></literal> tags.
+    </para>
+    <para>
+        Alle argumenten behalve de <parameter>name</parameter> parameter
+        zijn optioneel. Als alleen het name argument aanwezig is, wordt
+        het cookie met die naam verwijderd van de remote client. Je mag
+        een willekeurig argument ook vervangen door een lege string
+     (<emphasis>&quot;&quot;</emphasis>) om dat argument over te slaan.
+        De <parameter>expire</parameter> en <parameter>secure</parameter>
+        argumenten zijn integers en kunnen niet worden overgeslagen
+        met een lege string. Gebruik in plaats daarvan een nul
+     (<emphasis>0</emphasis>). De <parameter>expire</parameter> parameter
+        is een normaal Unix tijds integer zoals wordt teruggegeven door de
+        <function>time</function> of <function>mktime</function> functies.
+        De <parameter>secure</parameter> geeft aan dat het cookie alleen
+        mag worden verzonden over een veilige HTTPS verbinding.
+    </para>
+    <para>
+     Veel voorkomende fouten:
+     <itemizedlist>
+      <listitem>
+       <simpara>
+           Cookies worden niet zichtbaar tot de volgende keer dat een pagina 
+               waarop het cookie zichtbaar is wordt geladen.
+       </simpara>
+      </listitem>
+      <listitem>
+       <simpara>
+           Cookies moeten worden verwijderd met dezelfde parameters als waarmee
+               ze werden ingesteld.
+       </simpara>
+      </listitem>
+     </itemizedlist>
+    </para>
+    <simpara>
+        In PHP 3 worden meerdere aanroepen van <function>setcookie</function>
+        in hetzelfde script verwerkt in omgekeerde volgorde. Als je probeert
+        een cookie te verwijderen voordat je een nieuwe neerzet, moet je het
+        toevoegen doen voor het verwijderen. In PHP 4 worden meerdere
+        aanroepen van <function>setcookie</function> verwerkt in de volgorde
+        waarop ze worden aangeroepen.
+    </simpara>
+    <para>
+        Een paar voorbeelden volgen over hoe je cookies moet verzenden:
+     <example>
+      <title><function>setcookie</function> stuur voorbeelden</title>
+      <programlisting role="php">
+<![CDATA[
+setcookie ("TestCookie", $value);
+setcookie ("TestCookie", $value,time()+3600);  /* expire in 1 hour */
+setcookie ("TestCookie", $value,time()+3600, "/~rasmus/", ".utoronto.ca", 1);
+]]>
+      </programlisting>
+     </example>
+    </para>
+    <para>
+        Wanneer je een cookie verwijdert moet je zorgen dat de expiratie
+        datum in het verleden is, om het verwijder mechanisme in je browser
+        te activeren. Er volgen voorbeelden hoe je in het vorige voorbeeld
+        verzonden cookies kunt verwijderen:
+     <example>
+      <title><function>setcookie</function> verwijder voorbeelden</title>
+      <programlisting role="php">
+<![CDATA[
+// set the expiration date to one hour ago
+setcookie ("TestCookie", "", time() - 3600);
+setcookie ("TestCookie", "", time() - 3600, "/~rasmus/", ".utoronto.ca", 1);
+]]>
+      </programlisting>
+     </example>
+    </para>
+    <para>
+        Let er op dat het waarde deel van het cookie automatisch wordt
+        ge-urlencoded wanneer je het cookie verzendt, en wanneer het wordt
+        ontvangen, wordt het automatisch gedecodeerd en toegewezen aan
+        een variabele met dezelfde naam als de cookie naam. Om de inhoud
+        van ons test cookie in een script te zien, kun je simpelweg een
+        van de volgende voorbeelden gebruiken:
+     <informalexample>
+      <programlisting role="php">
+<![CDATA[
+echo $TestCookie;
+echo $HTTP_COOKIE_VARS["TestCookie"];
+]]>
+      </programlisting>
+     </informalexample>
+    </para>
+    <para>
+        Je kunt ook array cookies zetten door array notatie in de cookie
+        naam te gebruiken. Dit heeft het effect dat er evenveel cookies
+        worden neergezet als je array elements hebt, maar als het cookie
+        wordt ontvangen door je script worden de waarden allemaal geplaatst
+        in een array met de naam van het cookie:
+     <informalexample>
+      <programlisting role="php">
+<![CDATA[
+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>
+        Voor meer informatie over cookies, zie Netscape's cookie
+     specificatie op <ulink
+     url="&spec.cookies;">&spec.cookies;</ulink>.
+    </para>
+    <simpara>
+     Microsoft Internet Explorer 4 met Service Pack 1 werkt niet
+        goed met cookies die hun path parameter hebben ingesteld.
+    </simpara>
+    <simpara>
+     Netscape Communicator 4.05 en Microsoft Internet Explorer 3.x
+        lijken cookies incorrect af te handelen wanneer het pad en de
+        tijd niet zijn ingesteld.
+    </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:
+vim600: syn=xml fen fdm=syntax fdl=2 si
+vim: et tw=78 syn=sgml
+vi: ts=1 sw=1
+-->
+


Reply via email to