cvs: phpdoc-nl /features file-upload.xml

[email protected] ("Maciek Sokolewicz")
Newsgroups php.doc.nl
Message-ID <cvstularis1041462502@cvsserver>
tularis		Wed Jan  1 18:08:22 2003 EDT

  Modified files:              
    /phpdoc-nl/features	file-upload.xml 
  Log:
   Updated from english tree, marked old PUT method support as PHP 3 only
tularis-20030101180822.txt (text/plain, 30 KB)
Index: phpdoc-nl/features/file-upload.xml
diff -u phpdoc-nl/features/file-upload.xml:1.9 phpdoc-nl/features/file-upload.xml:1.10
--- phpdoc-nl/features/file-upload.xml:1.9	Sat Aug 17 14:12:21 2002
+++ phpdoc-nl/features/file-upload.xml	Wed Jan  1 18:08:22 2003
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="iso-8859-1"?>
-<!-- EN-Revision: 1.40 Maintainer: n/a Status: ready -->
+<!-- EN-Revision: 1.53 Maintainer: tularis Status: ready -->
  <chapter id="features.file-upload">
   <title>Bestanden uploaden naar server</title>
 
@@ -7,14 +7,22 @@
    <title>Met de POST methode uploaden</title>
 
    <simpara>
-    PHP kan 'file uploads' ontvangen van elke browser welke de
-    RFC-1867 standaard volgt (Zoals Netscape Navigator 3+ en Microsoft
-    Internet Explorer 3 met een patch van Microsoft, of ouder zonder patch).
+    PHP kan 'file uploads' van elke RFC-1867 ondersteunende webbrowser 
+    (Dit zijn o.a. Netscape Navigator 3+ en Microsoft IE 3+).    
     Dit maakt het mogelijk voor mensen om text en binary bestanden te 
-    uploaden. Met PHP's authenticatie en bestandsfuncties heb je volledige
-    controle over wie waar wat mag uploaden en wat er met het bestand gebeurd
-    zo gauw het geupload is.
+    uploaden. Met behulp van allerlei PHP-functies heb je volledige controle
+    over wie er mag uploaden, en over het ge-uploade bestand zelf.
    </simpara>
+   <note>
+       <title>Gerelateerde Configuratie Aantekeningen</title>
+       <para>
+        Zie ook <link linkend="ini.file-uploads">file_uploads</link>, 
+        <link linkend="ini.upload-max-filesize">upload_max_filesize</link>,
+        <link linkend="ini.upload-tmp-dir">upload_tmp_dir</link>, en de
+        <link linkend="ini.post-max-size">post_max_size</link> directief 
+        in &php.ini;
+       </para>
+   </note>
    <para>
     PHP ondersteunt ook de PUT-methode voor bestand uploads. Dit wordt 
     onder andere gebruikt door Netscape Composer en programma's die W3C's 
@@ -23,197 +31,240 @@
    </para>
    <para>
     Een 'bestands upload' scherm kan gemaakt worden met een speciaal form
-    dat er zo uit ziet:
+    die er zo uit ziet:
     <example>
     <title>Bestand Upload Form</title>
-     <programlisting>
-&lt;FORM ENCTYPE=&quot;multipart/form-data&quot; ACTION=&quot;_URL_&quot; METHOD=POST&gt;
-&lt;INPUT TYPE=&quot;hidden&quot; name=&quot;MAX_FILE_SIZE&quot; value=&quot;1000&quot;&gt;
-Send this file: &lt;INPUT NAME=&quot;userfile&quot; TYPE=&quot;file&quot;&gt;
-&lt;INPUT TYPE=&quot;submit&quot; VALUE=&quot;Stuur Bestand&quot;&gt;
-&lt;/FORM&gt;
+     <programlisting role="html">
+<![CDATA[
+ <form enctype="multipart/form-data" action="_URL_" method="post">
+ <input type="hidden" name="MAX_FILE_SIZE" value="1000">
+ Upload dit bestand: <input name="userfile" type="file">
+ <input type="submit" value="Upload!">
+ </form>
+]]>
      </programlisting>
     </example>
-    De URL moet naar een PHP bestand wijzen. Het MAX_FILE_SIZE 'hidden' 
+    
+    De _URL_ moet naar een PHP bestand wijzen. Het MAX_FILE_SIZE 'hidden' 
     veld moet VOOR het 'file input' veld komen en de waarde hiervan wordt
     gebruikt als de maximaal toegestane grootte van het bestand dat 
     geupload wordt. Deze waarde is in bytes.
+    <warning>
+     <para>
+      De MAX_FILE_SIZE is een 'advies' aan de browser. Het is niet moeilijk om
+      deze te omzeilen!! Reken er dus niet op dat het werkt...
+      De PHP-setting voor maximum-size is daarentegen niet te omzeilen.
+     </para>
+    </warning>
    </para>
 
    <para>
-    In PHP 3 worden de volgende variablen gevuld in het script
-    zodra de upload succesvol is afgerond. (aangenomen wordt dat
+    De variabelen voor geuploade bestanden kunnen verschillen,
+    dit kan liggen aan de PHP-versie en de configuratie:
+    De autoglobal <link linkend="reserved.variables.files">$_FILES</link>
+    bestaat sinds PHP 4.1.0, terwijl de <varname>$HTTP_POST_FILES</varname> array 
+    al bestaat sinds PHP 4.0.0.  Deze arrays bevatten alle informatie 
+    over het geuploade bestand. Het gebruik van <varname>$_FILES</varname>
+    wordt aangeraden.  Als <link linkend="ini.register-globals">register_globals</link> 
+    <emphasis>aan</emphasis> staat, zullen gerelaeerde variabelen ook bestaan.
     <link linkend="ini.register-globals">register_globals</link> 
-    aan is gezet in <filename>php3.ini</filename>). Als <link
-    linkend="ini.track-vars">track_vars</link> aanstaat zijn ze (ook) te 
-    vinden in de globale array <varname>$HTTP_POST_VARS</varname>. 
-    Let op: De variablen in het volgende voorbeeld hebben de prefix
-    'userfile' zoals aangegeven is in het bovenstaande voorbeeld:
-
-    <itemizedlist>
-     <listitem>
-      <simpara>
-       <varname>$userfile</varname> - De tijdelijke bestandsnaam
-       waarin het geuploade bestand is opgeslagen op de server.
-      </simpara>
-     </listitem>
-     <listitem>
-      <simpara>
-       <varname>$userfile_name</varname> - De originele naam of
-       het originele pad van het bestand op het systeem van de gebruiker. 
-      </simpara>
-     </listitem>
-     <listitem>
-      <simpara>
-       <varname>$userfile_size</varname> - De grootte van het
-       'ge-uploade' bestand in bytes. 
-      </simpara>
-     </listitem>
-     <listitem>
-      <simpara>
-       <varname>$userfile_type</varname> - Het mime-type van het bestand
-       als de browser deze informatie heeft meegestuurd. Een voorbeeld
-       zou zijn: &quot;image/gif&quot;.
-      </simpara>
-     </listitem>
-    </itemizedlist>
-    Let op: het deel &quot;$userfile&quot; van de bovenstaande variablen
-    is wat het NAME= veld van het INPUT veld met TYPE=file is. In het
-    bovenstaande voorbeeld kozen we ervoor om het &quot;userfile&quot;
-    te noemen.
+    staat standaard <emphasis>uit</emphasis> sinds PHP
+    <ulink url="&url.php.release4.2.0;">4.2.0</ulink>.
    </para>
 
+    <para>
+     De inhoud van de  <link linkend="reserved.variables.files">$_FILES</link> array
+     van het voorgaande voorbeeld is als volgt: (dit gaat uit van <emphasis>userfile</emphasis>,
+     zoals gebruikt in het voorgaande voorbeeld)
+     <variablelist>
+      <varlistentry>
+       <term><varname>$_FILES['userfile']['name']</varname></term>
+       <listitem>
+        <para>
+         De (gegeven) naam van de geuploade file.
+        </para>
+       </listitem>
+      </varlistentry>
+      <varlistentry>
+       <term><varname>$_FILES['userfile']['type']</varname></term>
+       <listitem>
+        <para>
+         De mime-type van het bestand, zoals gegeven door de browser.
+         (Het kan voorkomen dat geen mime-type wordt gegeven, of een verkeerde wordt gegeven)
+         The mime type of the file, if the browser provided this
+         Een voorbeeld hiervan zou kunnen zijn <literal>"image/gif"</literal>.
+         </para>
+       </listitem>
+      </varlistentry>
+      <varlistentry>
+       <term><varname>$_FILES['userfile']['size']</varname></term>
+       <listitem>
+        <para>
+         De bestandsgrootte in bytes.
+        </para>
+       </listitem>
+      </varlistentry>
+      <varlistentry>
+       <term><varname>$_FILES['userfile']['tmp_name']</varname></term>
+       <listitem>
+        <para>
+         De tijdelijke naam van het bestand, dit is ook de plaats waar het bestand
+         tijdelijk is opgeslagen totdat het script er iets mee doet. Dit bestand wordt
+         weggehaald zodra het script eidigt.
+        </para>
+       </listitem>
+      </varlistentry>
+      <varlistentry>
+       <term><varname>$_FILES['userfile']['error']</varname></term>
+       <listitem>
+        <para>
+         De <link linkend="features.file-upload.errors">error code</link>
+         ge-associeerd met deze bestands-upload.  <emphasis>['error']</emphasis>
+         bestaat pas sinds PHP 4.2.0
+        </para>
+       </listitem>
+      </varlistentry>
+     </variablelist>
+    </para>
+    <note>
+     <para>
+      In PHP versies voor 4.1.0 heette deze array nog
+      <varname>$HTTP_POST_FILES</varname>, ook was het geen 
+      <link linkend="language.variables.superglobals">autoglobal</link> 
+      zoals <varname>$_FILES</varname> is.  PHP 3 maakt geen gebruik van
+      <varname>$HTTP_POST_FILES</varname>, noch van <varname>$_FILES</varname>.
+     </para>
+   </note>
    <para>
-    PHP 4 gedraagt zich enigzins anders, in PHP4 word de globale array
-    <varname>$HTTP_POST_FILES</varname> aangemaakt waarin informatie over
-    het ge-uploade bestand wordt opgeslagen. Deze is alleen te gebruiken
-    als <link linkend="ini.track-vars">track_vars</link> is aangezet.
-    In alle versies na PHP 4.0.2 staat deze echter standaard aan.
+    Als <link linkend="ini.register-globals">register_globals</link>
+    <emphasis>aan</emphasis> staat in &php.ini;, zijn er extra variabelen beschikbaar.
+    Bij voorbeeld,
+    <varname>$userfile_name</varname> zal dan gelijk zijn aan 
+    <varname>$_FILES['userfile']['name']</varname>,
+    <varname>$userfile_type</varname> zal gelijk zijn aan 
+    <varname>$_FILES['userfile']['type']</varname>, etc.
+    Sinds PHP 4.2.0 staat <link linkend="ini.register-globals">register_globals</link>
+    standaard <emphasis>uit</emphasis>. Het is dus niet aan te raden om te vertrouwen op
+    het bestaan van deze variabelen.
    </para>
 
    <para>
-    De inhoud van <varname>$HTTP_POST_FILES</varname> is als volgt:
-    (Hier word weer gebruik gemaakt van &quot;userfile&quot; zoals in het
-    bovenstaande voorbeeld.)
+    Ge-uploade bestanden worden standaard in de standaard tijdelijke
+    directory van de server opgeslagen, tenzij er een andere locatie
+    is opgegeven met het
+    <link linkend="ini.upload-tmp-dir">upload_tmp_dir</link> directive in
+    <filename>php.ini</filename>. De standaard tijdelijke directory 
+    kan worden veranderd worden door de 'environment' variable
+    (<envar>TMPDIR</envar>) te veranderen in het 'environment' waar PHP
+    in draait. Dit kan <emphasis>niet</emphasis> in een script mbv de 
+    <function>putenv</function> functie gedaan worden. Deze 'environment'
+    variable kan ook gebruikt worden om zeker te weten dat bepaalde andere
+    bewerkingen op alle ge-uploade bestanden werken.
+    <example>
+         <title>Validating file uploads</title>
+         <para>
+          De volgende voorbeelden werken alleen met PHP versies
+          4.0.2 en hoger. Zie ook:
+          <function>is_uploaded_file</function> en
+          <function>move_uploaded_file</function>.
+         </para>
+         <programlisting role="php">
+    <![CDATA[
+    <?php 
+    // Voor PHP 4.1.0 moet $HTTP_POST_FILES gebruikt worden in plaats van $_FILES.
+    if (is_uploaded_file($_FILES['userfile']['tmp_name'])) {
+        copy($_FILES['userfile']['tmp_name'], "/plaats/om/heen/te/verplaatsen");
+    } else {
+        echo "Mogelijke aanval gespot: " . $_FILES['userfile']['name'];
+    }
+    /* ...of... */
+    move_uploaded_file($_FILES['userfile']['tmp_name'], "/plaats/om/heen/te/verplaatsen");
+    ?>
+    ]]>
+         </programlisting>
+        </example>
+   </para>
+   <simpara>
+    Het script dat het bestand ontvangt moet zo veel mogelijk zijn best doen om
+    het bestand goed te plaatsen. Je kan bijvoorbeeld
+    <varname>$_FILES['userfile']['size']</varname> gebruiken om te grote of
+    te kleine bestanden te verwerpen.
+    Je kan <varname>$_FILES['userfile']['type']</varname> gebruiken om bepaalde typen
+    bestanden niet door te laten.
+    
+    Sinds PHP 4.2.0, kan je ook <varname>$_FILES['userfile']['error']</varname> 
+    gebruiken met behulp van <link linkend="features.file-upload.errors">error codes</link>.
+    
+    Het maakt niet uit wat je verzint, om het bestand te behouden, moet het óf hernoemd zijn,
+    of verplaatst
+   </simpara>
+   <simpara>
+    Als geen van beiden heeft plaatsgevonden, zal het bestand aan het einde van het proces,
+    intern verwijderd worden.
+   </simpara>
+  </sect1>
+/********************/
+  <sect1 id="features.file-upload.errors">
+   <title>File-upload errors uitgelegd</title>
+   <simpara>
+    Sinds PHP 4.2.0, geeft PHP in de $_FILES array ook een <emphasis>['error']</emphasis>
+    vaiabele terug. I andere woorden, de error kan gevonden worden in
+    <varname>$_FILES['userfile']['error']</varname>.
+   </simpara>
+   <para>
     <variablelist>
      <varlistentry>
-      <term><varname>$HTTP_POST_FILES['userfile']['name']</varname></term>
+      <term><varname>UPLOAD_ERR_OK</varname></term>
       <listitem>
        <para>
-        De originele naam van het bestand op het systeem van de gebruiker.
+        Waarde: 0; Er is geen error opgetreden. Het bestand is met success geupload
        </para>
       </listitem>
      </varlistentry>
      <varlistentry>
-      <term><varname>$HTTP_POST_FILES['userfile']['type']</varname></term>
+      <term><varname>UPLOAD_ERR_INI_SIZE</varname></term>
       <listitem>
        <para>
-        Het mime-type van het bestand als de browser deze informatie
-        meegestuurd heeft. Bijvoorbeeld:
-        <literal>&quot;image/gif&quot;</literal>.
-        </para>
+        Waarde: 1; De grootte van het bestand is groter dan de in &php.ini;
+        ingestelde waarde voor <link linkend="ini.upload-max-filesize">upload_max_filesize</link> 
+       </para>
       </listitem>
      </varlistentry>
      <varlistentry>
-      <term><varname>$HTTP_POST_FILES['userfile']['size']</varname></term>
+      <term><varname>UPLOAD_ERR_FORM_SIZE</varname></term>
       <listitem>
        <para>
-        De grootte van het ge-uploade bestand in bytes.
+        Waarde: 2; De grootte van het bestand is groter dan de in html
+        gegeven <emphasis>MAX_FILE_SIZE</emphasis>.
        </para>
       </listitem>
      </varlistentry>
      <varlistentry>
-      <term><varname>$HTTP_POST_FILES['userfile']['tmp_name']</varname></term>
+      <term><varname>UPLOAD_ERR_PARTIAL</varname></term>
       <listitem>
        <para>
-        De tijdelijke bestandsnaam waarin het ge-uploade bestand is 
-        opgeslagen op de server. 
+        Waarde: 3; Het bestand is maar gedeeltelijk geupload.
        </para>
       </listitem>
      </varlistentry>
-    </variablelist>
-   </para>
-
-   <para>
-    Ge-uploade bestanden worden standaard in de standaard tijdelijke
-    directory van de server opgeslagen, tenzij er een andere locatie
-    is opgegeven met het
-    <link linkend="ini.upload-tmp-dir">upload_tmp_dir</link> directive in
-    <filename>php.ini</filename>. De server zijn standaard tijdelijke
-    kan worden veranderd worden door de 'environment' variable
-    <envar>TMPDIR</envar> te veranderen in het 'environment' waar PHP
-    in draait. Dit kun je <emphasis>niet</emphasis> doen in een script
-    met de PHP functie <function>putenv</function>. Deze 'environment'
-    variable kan ook gebruikt worden om te controleren of bewerkingen
-    op ge-uploade bestanden wel juist werken.
-    <example>
-     <title>Validating file uploads</title>
-     <para>
-      De volgende voorbeelden zijn voor PHP 3 versies boven 3.0.16 en
-      voor PHP 4 versies boven 4.0.2. Kijk voor meer informatie bij
-      de functies <function>is_uploaded_file</function> en
-      <function>move_uploaded_file</function>. 
-     </para>
-     <programlisting role="php">
-&lt;?php 
-if (is_uploaded_file($userfile)) {
-    copy($userfile, "/plaats/voor/ge-uploadbestand");
-} else {
-    echo "Mogelijke file-upload aanval: bestandsnaam '$userfile'.";
-}
-/* ...of... */
-move_uploaded_file($userfile, "/plaats/voor/ge-uploadbestand");
-?>
-     </programlisting>
-     <para>
-      Voor eerdere versies van PHP zal je iets als het volgende moeten
-      gebruiken.
-      <note>
+     <varlistentry>
+      <term><varname>UPLOAD_ERR_NO_FILE</varname></term>
+      <listitem>
        <para>
-        Dit zal <emphasis>niet</emphasis> werken in PHP 4 versies ouder
-        dan 4.0.2. Dit voorbeeld is afhankelijk van een bepaalde
-        functionaliteit in PHP welke veranderd is na deze versie.
+        Waarde: 4; Er is helemaal niks geupload.
        </para>
-      </note>
-     </para>
-     <programlisting role="php">
-&lt;?php 
-/* Gebruikerstest voor ge-upload bestand. */ 
-function is_uploaded_file($filename) {
-    if (!$tmp_file = get_cfg_var('upload_tmp_dir')) {
-        $tmp_file = dirname(tempnam('', ''));
-    }
-    $tmp_file .= '/' . basename($filename);
-    /* Gebruiker kan een slash als einde hebben in php.ini... */
-    return (ereg_replace('/+', '/', $tmp_file) == $filename);
-}
-
-if (is_uploaded_file($userfile)) {
-    copy($userfile, "/plaats/voor/ge-uploadbestand");
-} else {
-    echo "Mogelijke bestands-upload aanval: bestandsnaam '$userfile'.";
-}
-?>
-     </programlisting>
-    </example>
+      </listitem>
+     </varlistentry>
+    </variablelist>
    </para>
-   <simpara>
-    Het PHP script welke het ge-uploade bestand ontvangt moet zelf
-    implementeren wat er moet gebeuren met het ge-uploade bestand.
-    Je kunt bijvoorbeeld besluiten om bestanden weg te gooien welke
-    groter of juist kleiner zijn dan de <varname>$file_size</varname> 
-    variable. Je kunt de <varname>$file_type</varname> variable gebruiken
-    om bestanden te verwijderen welke niet voldoen aan een bepaald criteria.
-    Wat je ook doet, je moet het bestand uit de tijdelijke directory 
-    verwijderen of het verplaatsen naar een andere directory.
-   </simpara>
-   <simpara>
-    Het bestand zal worden verwijderd uit de tijdelijke directory aan
-    het einde van het script als het bestand niet verplaatst of hernoemd is.
-   </simpara>
+   <note>
+    <para>
+     Deze zijn PHP constanten geworden in PHP 4.2.0
+    </para>
+   </note>
   </sect1>
- 
-  <sect1 id="features.file-upload.common-pitfalls">
+
+ <sect1 id="features.file-upload.common-pitfalls">
    <title>Standaard valkuilen</title>
    <simpara>
     Het veld MAX_FILE_SIZE kan geen grotere bestandsgrootte opgeven dan
@@ -222,6 +273,21 @@
     Standaard is de maximale grootte 2 Megabytes.
    </simpara>
    <simpara>
+    Als <link linkend="ini.memory-limit">memory_limit</link> is ingesteld,
+    is het mogelijk dat een grotere limit nodig is.
+    Wees er dus absoluut zeker van dat deze groot genoeg is!
+   </simpara>
+<!-- FIXME: max_execution_time INI -->
+   <simpara>
+    Als <link linkend="ini.max-execution-time">max_execution_time</link>
+    te klein is ingesteld, kan het voorkomen dat je script deze waarde snel overstijgt,
+    wees dus zeker van het feit dat deze groot genoeg is, of zet de maximum bestandsgrootte lager.
+   </simpara>
+   <simpara>
+    Als <link linkend="ini.post-max-size">post_max_size</link> te laag is ingesteld, 
+    kunnen er geen grote bestanden worden geupload via de POST methode.
+   </simpara>
+<simpara>
     Als je niet controleert of je op het juiste bestand bewerkingen
     uitvoert, kunnen gebruikers hiervan misbruik maken en gevoelige
     informatie in andere directories benaderen.
@@ -232,15 +298,24 @@
     Zolang CERN httpd dit doet ondersteunt PHP voor deze server
     niet de bestands-upload mogelijkheid.
    </simpara>
+   <simpara>
+    Door de vele verschillen in hoe verschillende besturingssystemen werken,
+    kan PHP niet garanderen dat bestanden met exotische name (bijv. met spaties),
+    juist worden herkend, en bewerkt.
+   </simpara>
   </sect1>
-
-  <sect1 id="feature-fileupload.multiple">
-   <title>Meerdere bestanden uploaden</title>
+  
+  <sect1 id="features.file-upload.multiple">
+   <title>Uploading multiple files</title>
+   <simpara>
+    Multiple files can be uploaded using different
+    <literal>name</literal> for <literal>input</literal>.
+   </simpara>
    <simpara>
-    Het is mogelijk meerdere bestanden tegelijk te uploaden. Deze
-    informatie kun je ge-ordend in arrays verkrijgen. Om dit mogelijk
-    te maken moet je dezelfde syntax gebruiken als bij een HTML form
-    met meerdere selects en/of checkboxes.
+    It is also possible to upload multiple files simultaneously and
+    have the information organized automatically in arrays for you. To
+    do so, you need to use the same array submission syntax in the
+    HTML form as you do with multiple selects and checkboxes:
    </simpara>
    <note>
     <para>
@@ -251,106 +326,149 @@
    <para>
     <example>
      <title>Meerdere bestanden uploaden</title>
-     <programlisting>
-&lt;form action=&quot;file-upload.php&quot; method=&quot;post&quot; enctype=&quot;multipart/form-data&quot;&gt;
-  Send these files:&lt;br&gt;
-  &lt;input name=&quot;userfile[]&quot; type=&quot;file&quot;&gt;&lt;br&gt;
-  &lt;input name=&quot;userfile[]&quot; type=&quot;file&quot;&gt;&lt;br&gt;
-  &lt;input type=&quot;submit&quot; value=&quot;Send files&quot;&gt;
-&lt;/form&gt;
+     <programlisting role="html">
+<![CDATA[
+<form action="file-upload.php" method="post" enctype="multipart/form-data">
+  Send these files:<br>
+  <input name="userfile[]" type="file"><br>
+  <input name="userfile[]" type="file"><br>
+  <input type="submit" value="Verzenden">
+</form>
+]]>
      </programlisting>
     </example>
    </para>
    <simpara>
     Als het bovenstaande form verstuurd wordt, worden de globale arrays
-    <computeroutput>$userfile</computeroutput>,  
-    <computeroutput>$userfile_name</computeroutput> and
-    <computeroutput>$userfile_size</computeroutput> aangemaakt in
-    de globale scope (ook $HTTP_POST_FILES (PHP 4) en $HTTP_POST_VARS (PHP 3)
-    worden aangemaakt.) Deze arrays zijn numeriek geindexeerde arrays met de
+    <varname>$_FILES['userfile']</varname>,
+    <varname>$_FILES['userfile']['name']</varname>, en
+    <varname>$_FILES['userfile']['size']</varname> aangemaakt
+    ($HTTP_POST_FILES voor PHP prior 4.1.0 en eerder).
+    Als <literal>register_globals</literal> aan staat, worden de globals 
+    <varname>$userfile['name']</varname> ook aangemaakt.
+    Deze arrays zijn numeriek geindexeerde arrays met de
     juiste waarden voor de ge-uploade bestanden.
    </simpara>
+   
    <simpara>
-    Bijvoorbeeld, stel dat de bestanden
-    <filename>/home/test/review.html</filename> en
-    <filename>/home/test/xwp.out</filename> ge-upload worden.
-    In dit geval zou <computeroutput>$userfile_name[0]</computeroutput>
-    de waarde <computeroutput>review.html</computeroutput> en 
-    <computeroutput>$userfile_name[1]</computeroutput> de waarde
-    <computeroutput>xwp.out</computeroutput> bevatten. Navolgend
-    zou <computeroutput>$userfile_size[0]</computeroutput> de grootte
-    van het bestand <filename>review.html</filename>'s bevatten,
-    enzovoort.
-   </simpara>
-   <simpara>
-    <computeroutput>$userfile['name'][0]</computeroutput>,
-    <computeroutput>$userfile['tmp_name'][0]</computeroutput>,
-    <computeroutput>$userfile['size'][0]</computeroutput> en
-    <computeroutput>$userfile['type'][0]</computeroutput> zijn ook beschikbaar.
-   </simpara>
+       Bijvoorbeeld, stel dat de bestanden
+       <filename>/home/test/review.html</filename> en
+       <filename>/home/test/xwp.out</filename> ge-upload worden.
+       In dit geval zou <computeroutput>$userfile_name[0]</computeroutput>
+       de waarde <computeroutput>review.html</computeroutput> en 
+       <computeroutput>$userfile_name[1]</computeroutput> de waarde
+       <computeroutput>xwp.out</computeroutput> bevatten. Navolgend
+       zou <computeroutput>$userfile_size[0]</computeroutput> de grootte
+       van het bestand <filename>review.html</filename>'s bevatten,
+       enzovoort.
+      </simpara>
+      <simpara>
+       <varname>$userfile['name'][0]</varname>,
+       <varname>$userfile['tmp_name'][0]</varname>,
+       <varname>$userfile['size'][0]</varname> en
+       <varname>$userfile['type'][0]</varname> zijn ook beschikbaar.
+      </simpara>
   </sect1>
 
   <sect1 id="features.file-upload.put-method">
    <title>PUT methode ondersteuning</title>
-
+   <simpara>
+    De PUT methode ondersteuning is sterk veranderd tussen PHP 3 en PHP 4
+    In PHP 4, wordt aangeraden om mbv de standaard input stream de inhoud
+    van de HTTP PUT te lezen.
+   </simpara>
    <para>
-    PHP ondersteunt ook de HTTP PUT methode welke gebruikt wordt door 
-    o.a. Netscape Composer en W3C Amaya. PUT aanvragen zijn veel simpeler
-    dan een bestand uploaden en zien er ongeveer als volgt uit:
-    <informalexample>
-     <programlisting>
-PUT /pad/bestandsnaam.html HTTP/1.1
+    <example>
+     <title>Opslaan van HTTP PUT bestanden met PHP 4</title>
+     <programlisting role="php">
+<![CDATA[
+<?php
+/* PUT data komt binnen via de stdin stream */
+$putdata = fopen("php://stdin","r");
+
+/* Open een bestand om naar te schrijven */
+$fp = fopen("myputfile.ext","w");
+
+/* Lees de data 1kb per keer, en schrijf
+deze daarna weg */
+while ($data = fread($putdata,1024))
+  fwrite($fp,$data);
+
+/* Sluit alles af */
+fclose($fp);
+fclose($putdata);
+?>
+]]>
      </programlisting>
-    </informalexample>
+    </example>
    </para>
-   <para>
-    Dit betekent normaal gezien dat de server het bestand ook als
-    /pad/filename.html wilt opslaan. Dit is natuurlijk geen goed idee
-    omdat je niet wilt dat anderen bestanden overschrijven in je web tree.
-    Om zo'n 'request' te verwerken vertel je je server eerst met wat voor
-    PHP script je dit request wilt verwerken. Met Apache kun je dit doen
-    met het <emphasis>Script</emphasis> directive. Het kan ongeveer 
-    overal in je configuratie bestand geplaatst worden. Een standaard
-    plaats hiervoor is bijvoorbeeld een &lt;Directory&gt; blok. 
-    Een enkele regel als voorbeeld:
-    <informalexample>
-     <programlisting>
-Script PUT /put.php
-     </programlisting>
-    </informalexample>
+   <note>
+    <para>
+     De uitleg hieronder geld alleen voor PHP 3.
+    </para>
+   </note>
+   <sect1 id="features.file-upload.put-method">
+      <title>PUT methode ondersteuning</title>
+      <para>
+       PHP ondersteunt ook de HTTP PUT methode welke gebruikt wordt door 
+       o.a. Netscape Composer en W3C Amaya. PUT aanvragen zijn veel simpeler
+       dan een bestand uploaden en zien er ongeveer als volgt uit:
+       <informalexample>
+        <programlisting>
+   PUT /pad/bestandsnaam.html HTTP/1.1
+        </programlisting>
+       </informalexample>
    </para>
-   <simpara>
-    Dit vertelt Apache om alle PUT requests waarvoor URIs die overeenkomen
-    met de context waarin deze regel geplaatst is, naar het put.php script
-    te sturen. We gaan er vanuit dat je de juist mime-headers heb gebruikt
-    om PHP met de .php extensie te laten werken en dat PHP actief is.
-   </simpara>
-   <simpara>
-    In je 'put.php' zou je dan iets als volgt neer zetten:
-   </simpara>
    <para>
-    <informalexample><programlisting>
-&lt;? copy($PHP_UPLOADED_FILE_NAME,$DOCUMENT_ROOT.$REQUEST_URI); ?&gt;
-    </programlisting></informalexample>
-   </para>
-   <simpara>
-    Dit kopieert het bestand naar de locatie welke gevraagd werd in 
-    het request. Waarschijnlijk zal je nog enige tests uitvoeren op 
-    het bestand voordat je het bestand daadwerkelijk kopieert. De enige
-    truc hier is dat PHP het bestand opslaat in een tijdelijk bestand
-    zoals bij de
-    <link linkend="features.file-upload.post-method">POST-methode</link>.
-    Zogauw het request is afgehandeld word het tijdelijke bestand verwijderd.
-    Let dus op dat je script het tijdelijke bestand verplaatst of hernoemd.
-    De naam van dit tijdelijke bestand is opgeslagen in de variable
-    <varname>$PHP_PUT_FILENAME</varname> en je kunt de voorgestelde locatie
-    vinden in <varname>$REQUEST_URI</varname> (Dit kan anders zijn bij
-    niet-Apache web servers). Dit is nogmaals een suggestie van de 
-    gebruiker. Je hoeft deze suggestie niet te gebruiken, je kunt
-    bijvoorbeeld alle bestanden in een speciale uploads directory plaatsen.
-   </simpara>
-  </sect1>
-
+       Dit betekent normaal gezien dat de server het bestand ook als
+       /pad/filename.html wilt opslaan. Dit is natuurlijk geen goed idee
+       omdat je niet wilt dat anderen bestanden overschrijven in je web tree.
+       Om zo'n 'request' te verwerken vertel je je server eerst met wat voor
+       PHP script je dit request wilt verwerken. Met Apache kun je dit doen
+       met het <emphasis>Script</emphasis> directive. Het kan ongeveer 
+       overal in je configuratie bestand geplaatst worden. Een standaard
+       plaats hiervoor is bijvoorbeeld een &lt;Directory&gt; blok. 
+       Een enkele regel als voorbeeld:
+       <informalexample>
+        <programlisting>
+   Script PUT /put.php
+        </programlisting>
+       </informalexample>
+      </para>
+      <simpara>
+       Dit vertelt Apache om alle PUT requests waarvoor URIs die overeenkomen
+       met de context waarin deze regel geplaatst is, naar het put.php script
+       te sturen. We gaan er vanuit dat je de juist mime-headers heb gebruikt
+       om PHP met de .php extensie te laten werken en dat PHP actief is.
+      </simpara>
+      <simpara>
+       In je 'put.php' zou je dan iets als volgt neer zetten:
+      </simpara>
+      <para>
+       <informalexample><programlisting>
+<![CDATA[
+<?php copy($PHP_UPLOADED_FILE_NAME,$DOCUMENT_ROOT.$REQUEST_URI); ?>
+]]>
+       </programlisting></informalexample>
+      </para>
+      <simpara>
+       Dit kopieert het bestand naar de locatie welke gevraagd werd in 
+       het request. Waarschijnlijk zal je nog enige tests uitvoeren op 
+       het bestand voordat je het bestand daadwerkelijk kopieert. De enige
+       truc hier is dat PHP het bestand opslaat in een tijdelijk bestand
+       zoals bij de
+       <link linkend="features.file-upload.post-method">POST-methode</link>.
+       Zogauw het request is afgehandeld word het tijdelijke bestand verwijderd.
+       Let dus op dat je script het tijdelijke bestand verplaatst of hernoemd.
+       De naam van dit tijdelijke bestand is opgeslagen in de variable
+       <varname>$PHP_PUT_FILENAME</varname> en je kunt de voorgestelde locatie
+       vinden in <varname>$REQUEST_URI</varname> (Dit kan anders zijn bij
+       niet-Apache web servers). Dit is nogmaals een suggestie van de 
+       gebruiker. Je hoeft deze suggestie niet te gebruiken, je kunt
+       bijvoorbeeld alle bestanden in een speciale uploads directory plaatsen.
+      </simpara>
+     </sect1>
+   
  </chapter>
 
 <!-- Keep this comment at the end of the file
@@ -369,4 +487,7 @@
 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
 -->
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.