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

[email protected] ("Dimitris Glezos") Tue, 27 May 2003 00:49:06 -0000
Newsgroups php.doc.el
Message-ID <cvssubbie1053996546@cvsserver>
subbie		Mon May 26 20:49:06 2003 EDT

  Added files:                 
    /phpdoc-el/features	file-upload.xml 
  Log:
  added file-upload.xml
subbie-20030526204906.txt (text/plain, 27.4 KB)
Index: phpdoc-el/features/file-upload.xml
+++ phpdoc-el/features/file-upload.xml
<?xml version="1.0" encoding="iso-8859-7"?>
<!-- $Revision: 1.1 $ -->
<!-- EN-Revision: 1.59 Maintainer: subbie Status: ready -->
 <chapter id="features.file-upload">
  <title>×åéñßæïíôáò upload áñ÷åßùí</title>

  <sect1 id="features.file-upload.post-method">
   <title>Upload ìå ôçí POST ìÝèïäï</title>

   <simpara>
    Ç PHP åßíáé éêáíÞ ãéá íá ëáìâÜíåé upload áñ÷åßùí áðü ïðïéïäÞðïôå RFC-1867
    óõìâáôü browser (áõôü óõìðåñéëáìâÜíåé ôïõò Netscape Navigator 3 Þ ìåãáëýôåñï,
    Microsoft Internet Explorer 3 ìå Ýíá patch áðü ôç Microsoft, Þ
    ìåãáëýôåñï ÷ùñßò êÜðïéï patch).  Áõôü ôï ÷áñáêôçñéóôéêü åðéôñÝðåé óôïõò áíèñþðïõò íá êÜíïõí upload ôüóï êåéìÝíïõ,
    üóï êáé binary áñ÷åßá.  Ìå ôéò óõíáñôÞóåéò áíáãíþñéóçò êáé ÷åéñéóìïý áñ÷åßùí ôçò
    PHP, Ý÷åôå ðëÞñç Ýëåã÷ï óôï ðïéüò åðéôñÝðåôáé íá êÜíåé upload êáé
    ôé èá ãßíåé ìå ôï áñ÷åßï áðü ôç óôéãìÞ ðïõ Ý÷åé ãßíåé upload êáé ìåôÜ.
   </simpara>
   <note>
    <title>Ó÷åôéêÝò Óçìåéþóåéò Ñõèìßóåùí</title>
    <para>
     Äåßôå åðßóçò ôá <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>, êáé
     <link linkend="ini.post-max-size">post_max_size</link> directives 
     óôï &php.ini;
    </para>
   </note>
   <para>
    Óçìåéþóôå ðùò ç PHP åðßóçò õðïóôçñßæåé upload áñ÷åßùí ìå ôçí PUT ìÝèïäï üðùò ÷ñçóéìïðïéïýíôáé áõôÜ
    áðü ôïõò Netscape Composer êáé W3C's Amaya clients.  Äåßôå ôï êåöÜëáéï <link
    linkend="features.file-upload.put-method">ÕðïóôÞñéîç ôçò PUT
    Ìåèüäïõ</link> ãéá ðåñéóóüôåñåò ðëçñïöïñßåò.
   </para>
   <para>
    Ìéá ïèüíç ãéá upload áñ÷åßïõ ìðïñåß íá öôéá÷ôåß äçìéïõñãþíôáò ìéá åéäéêÞ öüñìá ç ïðïßá
    ìïéÜæåé êÜðùò Ýôóé:
    <example>
     <title>Öüñìá ãéá Upload Áñ÷åßïõ</title>
     <programlisting role="html">
<![CDATA[
<form enctype="multipart/form-data" action="_URL_" method="post">
<input type="hidden" name="MAX_FILE_SIZE" value="30000">
Send this file: <input name="userfile" type="file">
<input type="submit" value="Send File">
</form>
]]>
     </programlisting>
    </example>
    Ôï _URL_ ðñÝðåé íá äåß÷íåé óå êÜðïéï PHP áñ÷åßï.  Ôï MAX_FILE_SIZE êñõöü
    ðåäßï (hidden) ðñÝðåé íá ðñïçãåßôáé ôïõ input ðåäßïõ ãéá ôï áñ÷åßï êáé ç ôéìÞ ôïõ åßíáé ôï
    ìÝãéóôï ìÝãåèïò áñ÷åßïõ ðïõ åðéôñÝðåôáé.  Ç ôéìÞ åßíáé óå byte.
    <warning>
     <para>
      Ôï MAX_FILE_SIZE åßíáé åíçìåñùôéêü ãéá ôïí browser. Åßíáé åýêïëï íá
      ðáñáêáìöèåß áõôÞ ç ìÝãéóôç ôéìÞ. ¸ôóé ìçí óôçñßæåóôå üôé ï browser
      õðáêïýåé ôçí åðéèõìßá óáò! Ïé PHP-ñõèìßóåéò üìùò, ãéá ôï ìÝãéóôï ìÝãåèïò (maximum-size),
      äåí ìðïñïýí íá îåãåëáóôïýí. Êáëýôåñá íá ðñïóèÝôåôå ôï MAX_FILE_SIZE ïýôùò Þ Üëëùò
      ãéáôß ðñïóôáôåýåé ôïõò ÷ñÞóôåò áðü ôïí êüðï íá ðåñéìÝíïõí ãéá Ýíá ìåãÜëï áñ÷åßï íá
      ìåôáöåñèåß ìüíï êáé ìüíï ãéá íá ìÜèïõí ðùò Þôáí ðïëý ìåãÜëï ìåôÜ.
     </para>
    </warning>
   </para>

   <para>
    Ïé ìåôáâëçôÝò ðïõ ïñßæïíôáé ãéá áñ÷åßá ðïõ Ý÷ïõí ãßíåé upload áëëÜæïõí áíÜëïãá ìå
    ôçí Ýêäïóç ôçò PHP êáé ôéò ñõèìßóåéò. Ç autoglobal ìåôáâëçôÞ
    <link linkend="reserved.variables.files">$_FILES</link>
    õðÜñ÷åé áðü ôçí PHP 4.1.0.  Ôï <varname>$HTTP_POST_FILES</varname> array 
    õðÜñ÷åé áðü ôçí PHP 4.0.0.  Áõôïß ïé ðßíáêåò èá ðåñéÝ÷ïõí üëåò
    ôéò ðëçñïöïñßåò ôùí áñ÷åßùí ðïõ Ý÷ïõí ãßíåé upload. Ç ÷ñÞóç ôçò <varname>$_FILES</varname>
    ðñïôéìÜôáé.  Áí ôï PHP directive 
    <link linkend="ini.register-globals">register_globals</link> åßíáé
    <emphasis>åíåñãïðïéçìÝíï</emphasis>, ôá ó÷åôéêÜ ïíüìáôá ôùí ìåôáâëçôþí èá õðÜñ÷ïõí åðßóçò.
    Ôï <link linkend="ini.register-globals">register_globals</link> 
    Ý÷åé ùò ðñïåðéëïãÞ íá åßíáé <emphasis>áðåíåñãïðïéçìÝíï</emphasis> áðü ôçí PHP
    <ulink url="&url.php.release4.2.0;">4.2.0</ulink>.
   </para>
   <para>
    Ôá ðåñéå÷üìåíá ôçò <link linkend="reserved.variables.files">$_FILES</link>
    áðü ôï ðáñÜäåéãìá ìáò åßíáé ùò áêïëïýèùò. Óçìåéþóôå ðùò áõôü õðïèÝôåé ôç ÷ñÞóç
    ôïõ ïíüìáôïò áñ÷åßïõ íá åßíáé <emphasis>userfile</emphasis>, üðùò ÷ñçóéìïðïéåßôáé óôï 
    ðáñÜäåéãìá ðáñáðÜíù.
    <variablelist>
     <varlistentry>
      <term><varname>$_FILES['userfile']['name']</varname></term>
      <listitem>
       <para>
        Ôï áñ÷éêü üíïìá ôïõ áñ÷åßïõ óôï ìç÷Üíçìá ôïõ client.
       </para>
      </listitem>
     </varlistentry>
     <varlistentry>
      <term><varname>$_FILES['userfile']['type']</varname></term>
      <listitem>
       <para>
        Ôï mime type ôïõ áñ÷åßïõ, áí ï browser Ý÷åé äþóåé áõôÞ ôç
        ðëçñïöïñßá.  ¸íá ðáñÜäåéãìá èá Þôáí
        <literal>"image/gif"</literal>.
        </para>
      </listitem>
     </varlistentry>
     <varlistentry>
      <term><varname>$_FILES['userfile']['size']</varname></term>
      <listitem>
       <para>
        Ôï ìÝãåèïò, óå byte, ôïõ áñ÷åßïõ ðïõ Ý÷åé ãßíåé upload.
       </para>
      </listitem>
     </varlistentry>
     <varlistentry>
      <term><varname>$_FILES['userfile']['tmp_name']</varname></term>
      <listitem>
       <para>
        Ôï ðñïóùñéíü üíïìá ôïõ áñ÷åßïõ óôï ïðïßï Ý÷åé áðïèçêåõôåß ôï áñ÷åßï ðïõ Ý÷åé ãßíåé upload
	óôïí server.
       </para>
      </listitem>
     </varlistentry>
     <varlistentry>
      <term><varname>$_FILES['userfile']['error']</varname></term>
      <listitem>
       <para>
        Ï <link linkend="features.file-upload.errors">êùäéêüò óöÜëìáôïò</link>
        ðïõ ó÷åôßæåôáé ìå áõôü ôï upload áñ÷åßïõ.  Ôï <emphasis>['error']</emphasis>
        Ý÷åé ðñïóôåèåß óôçí PHP 4.2.0
       </para>
      </listitem>
     </varlistentry>
    </variablelist>
   </para>
   <note>
    <para>
     Óôéò åêäüóåéò ôçò PHP ðñéí ôçí 4.1.0 áõôü Ý÷åé üíïìá
     <varname>$HTTP_POST_FILES</varname> êáé äåí åßíáé ìéá
     <link linkend="language.variables.superglobals">autoglobal</link> 
     ìåôáâëçôÞ üðùò åßíáé ç <varname>$_FILES</varname>.  Ç PHP 3 äåí Ý÷åé
     õðïóôÞñéîç ãéá ôçí <varname>$HTTP_POST_FILES</varname>.
    </para>
   </note>
   <para>
    ¼ôáí ôï <link linkend="ini.register-globals">register_globals</link>
    åßíáé <emphasis>åíåñãïðïéçìÝíï</emphasis> óôï &php.ini;, åðéðëÝïí 
    ìåôáâëçôÝò åßíáé äéáèÝóéìåò.  Ãéá ðáñÜäåéãìá, ç
    <varname>$userfile_name</varname> èá éóïýôáé ìå ôçí
    <varname>$_FILES['userfile']['name']</varname>, ç
    <varname>$userfile_type</varname> èá éóïýôáé ìå ôçí
    <varname>$_FILES['userfile']['type']</varname>, êëð. ¸÷åôå õð' üøéí óáò
    ðùò áðü ôçí PHP 4.2.0, ôï register_globals åßíáé ðñïåðéëåãìÝíá áðåíåñãïðïéçìÝíï.  ÐñïôéìÜôáé
    íá ìçí óôçñßæåóôå óå áõôü ôï directive.
   </para>
   <para>
    Ôá áñ÷åßá ðñïåðéëåãìÝíá èá áðïèçêåýïíôáé óôïí ðñïóùñéíü
    êáôÜëïãï ôïõ server, åêôüò êáé áí êÜðïéá Üëëç ôïðïèåóßá äïèåß ìå ôï <link
    linkend="ini.upload-tmp-dir">upload_tmp_dir</link> directive óôï
    &php.ini;. Ï ðñïåðéëåãìÝíïò êáôÜëïãïò ìðïñåß íá
    áëëá÷èåß ïñßæïíôáò ôçí ìåôáâëçôÞ ðåñéâÜëëïíôïò
    <envar>TMPDIR</envar> óôï ðåñéâÜëëïí óôï ïðïßï åêôåëåßôáé ç PHP.
    Ïñßæïíôáò ôï ìå ôçí <function>putenv</function> ìÝóá áðü Ýíá PHP
    script äåí èá äïõëÝøåé. ÁõôÞ ç ìåôáâëçôÞ ðåñéâÜëëïíôïò ìðïñåß åðéðëÝïí íá ÷ñçóéìïðïéçèåß
    ãéá íá óéãïõñåõôåßôå ðùò êáé Üëëåò åíÝñãåéåò åðéôåëïýíôáé óôá áñ÷åßá ðïõ Ý÷ïõí ãßíåé upload,
    åðéðëåüí.
    <example>
     <title>Åðéêýñùóç upload áñ÷åßùí</title>
     <para>
      Äåßôå åðßóçò ôéò êáôá÷ùñÞóåéò óõíáñôÞóåùí ãéá ôéò <function>is_uploaded_file</function> 
      êáé <function>move_uploaded_file</function> ãéá ðåñéóóüôåñåò ðëçñïöïñßåò. Ôï
      ðáñáêÜôù ðáñÜäåéãìá èá åðåîåñãáóôåß Ýíá upload áñ÷åßïõ ðïõ ðñïÝñ÷åôáé áðü ìéá öüñìá.
     </para>
     <programlisting role="php">
<![CDATA[
<?php
// In PHP earlier then 4.1.0, $HTTP_POST_FILES should be used instead of $_FILES.
// In PHP earlier then 4.0.3, use copy() and is_uploaded_file() instead of move_uploaded_file

$uploaddir = '/var/www/uploads/';

print "<pre>";
if (move_uploaded_file($_FILES['userfile']['tmp_name'], $uploaddir . $_FILES['userfile']['name'])) {
    print "File is valid, and was successfully uploaded.  Here's some more debugging info:\n";
    print_r($_FILES);
} else {
    print "Possible file upload attack!  Here's some debugging info:\n";
    print_r($_FILES);
}

?>
]]>
     </programlisting>
    </example>
   </para>
   <simpara>
    Ôï PHP script ôï ïðïßï ëáìâÜíåé ôï áñ÷åßï ðñÝðåé íá åêôåëÝóåé
    ïðïéáäÞðïôå ëïãéêÞ åßíáé áðáñáßôçôç ãéá íá áðïöáóßóåé ôé èá ãßíåé
    ìå ôá áñ÷åßá.  Ìðïñåßôå ãéá ðáñÜäåéãìá íá ÷ñçóéìïðïéÞóåôå ôçí÷ñçóéìïðïé
    <varname>$_FILES['userfile']['size']</varname> ìåôáâëçôÞ
    ãéá íá ðåôÜîåôå ïðïéáäÞðïôå áñ÷åßá åßíáé åßôå ðïëý ìéêñÜ åßôå ðïëý ìåãÜëá.  Ìðïñåßôå
    íá ÷ñçóéìïðïéÞóåôå ôçí
    <varname>$_FILES['userfile']['type']</varname> ìåôáâëçôÞ
    ãéá íá ðåôÜîåôå ïðïéáäÞðïôå áñ÷åßá äåí ôáéñéÜæïõí óå ïñéóìÝíá êñéôÞñéá ôïõ ôýðïõ ôïõ áñ÷åßïõ.
    Áðü ôçí PHP 4.2.0, ìðïñåßôå íá ÷ñçóéìïðïéåßôå ôçí <varname>$_FILES['userfile']['error']</varname> 
    êáé íá ðñïãñáììáôßæåôå ôç ëïãéêÞ óáò óýìöùíá ìå ôïõò <link
    linkend="features.file-upload.errors">êùäéêïýò óöáëìÜôùí</link>.
    ÏðïéáäÞðïôå ç ëïãéêÞ, èá ðñÝðåé åßôå íá äéáãñÜøåôå ôï áñ÷åßï áðü ôïí
    ðñïóùñéíü êáôÜëïãï Þ íá ôï ìåôáêéíÞóåôå êÜðïõ áëëïý.
   </simpara>
   <simpara>
    Ôï áñ÷åßï èá äéáãñáöåß áðü ôïí ðñïóùñéíü êáôÜëïãï óôï ôÝëïò
    ôïõ request áí äåí Ý÷åé ìåôáêéíçèåß Þ äéáãñáöåß.
   </simpara>
  </sect1>

  <sect1 id="features.file-upload.errors">
   <title>ÅðåîÞãçóç ÌçíõìÜôùí ÓöáëìÜôùí</title>
   <simpara>
    Áðü ôçí PHP 4.2.0, ç PHP åðéóôñÝöåé Ýíá áíÜëïãï êùäéêü óöÜëìáôïò ìáæß ìå ôï
    array ôïõ áñ÷åßïõ.  Ï êùäéêüò óöÜëìáôïò ìðïñåß íá âñåèåß óôï
    <emphasis>['error']</emphasis> ôìÞìá ôïõ array ôïõ áñ÷åßïõ ðïõ äçìéïõñãåßôáé
    êáôÜ ôï upload ôïõ áñ÷åßïõ áðü ôçí PHP.  Ìå Üëëá ëüãéá, ôï óöÜëìá ìðïñåß íá
    âñåèåß óôï <varname>$_FILES['userfile']['error']</varname>.
   </simpara>
   <para>
    <variablelist>
     <varlistentry>
      <term><varname>UPLOAD_ERR_OK</varname></term>
      <listitem>
       <para>
        ÔéìÞ: 0; Äåí õðÜñ÷åé óöÜëìá, ôï áñ÷åßï Ý÷åé ãßíåé upload ìå åðéôõ÷ßá.
       </para>
      </listitem>
     </varlistentry>
     <varlistentry>
      <term><varname>UPLOAD_ERR_INI_SIZE</varname></term>
      <listitem>
       <para>
        ÔéìÞ: 1; Ôï áñ÷åßï ðïõ Ý÷åé ãßíåé upload õðåñâáßíåé ôï
        <link linkend="ini.upload-max-filesize">upload_max_filesize</link> 
        directive óôï &php.ini;.
       </para>
      </listitem>
     </varlistentry>
     <varlistentry>
      <term><varname>UPLOAD_ERR_FORM_SIZE</varname></term>
      <listitem>
       <para>
        ÔéìÞ: 2; Ôï áñ÷åßï ðïõ Ý÷åé ãßíåé upload õðåñâáßíåé ôï <emphasis>MAX_FILE_SIZE</emphasis> 
        directive ðïõ Ý÷åé ïñéóôåß óôçí html öüñìá.
       </para>
      </listitem>
     </varlistentry>
     <varlistentry>
      <term><varname>UPLOAD_ERR_PARTIAL</varname></term>
      <listitem>
       <para>
        ÔéìÞ: 3; Ôï áñ÷åßï ðïõ ãéíüôáí upload äåí ïëïêëÞñùóå ôçí áðïóôïëÞ ôïõ.
       </para>
      </listitem>
     </varlistentry>
     <varlistentry>
      <term><varname>UPLOAD_ERR_NO_FILE</varname></term>
      <listitem>
       <para>
        ÔéìÞ: 4; Äåí Ý÷åé ãßíåé êáíÝíá áñ÷åßï upload.
       </para>
      </listitem>
     </varlistentry>
    </variablelist>
   </para>
   <note>
    <para>
     ÁõôÝò ïé ìåôáâëçôÝò Ýãéíáí óôáèåñÝò ôçò PHP óôçí PHP 4.3.0.
    </para>
   </note>
  </sect1>

  <sect1 id="features.file-upload.common-pitfalls">
   <title>Óõ÷íÝò Ðáãßäåò</title>
   <simpara>
    Ôï <literal>MAX_FILE_SIZE</literal> äåí ìðïñåß íá ïñßóåé ìÝãåèïò áñ÷åßïõ
    ìåãáëýôåñï áðü ôï ìÝãåèïò áñ÷åßïõ ðïõ Ý÷åé ïñéóôåß óôçí <link
    linkend="ini.upload-max-filesize">upload_max_filesize</link> ini-ñýèìéóç.
    Ôï ðñïåðéëåãìÝíï åßíáé 2 Megabyte.
   </simpara>
   <simpara>
    Áí ôï üñéï ìíÞìçò åßíáé ïñéóìÝíï, ìåãáëýôåñï <link
    linkend="ini.memory-limit">memory_limit</link> ìðïñåß íá ÷ñåéáóôåß. Óéãïõñåõôåßôå
    ðùò Ý÷åôå ïñßóåé ôï <link linkend="ini.memory-limit">memory_limit</link>
    áñêåôÜ ìåãÜëï.
   </simpara>
   <simpara>
    Áí ôï <link linkend="ini.max-execution-time">max_execution_time</link>
    ïñéóôåß íá åßáíé ðïëý ìéêñü, ç åêôÝëåóç ôïõ script ìðïñåß íá õðåñâåß ôçí ôéìÞ. Óéãïõñåõôåßôå
    ðùò Ý÷åôå ïñßóåé ôï <literal>max_execution_time</literal> áñêåôÜ ìåãÜëï.
   </simpara>
   <note>
    <simpara>
     Ôï <link linkend="ini.max-execution-time">max_execution_time</link> åðçñåÜæåé ìüíï
     ôïí ÷ñüíï åêôÝëåóçò ôïõ ßäéïõ ôïõ script.  ÏðïéïóäÞðïôå ÷ñüíïò îïäåýåôáé
     óå åíÝñãåéåò ðïõ óõìâáßíïõí Ýîù áðü ôçí åêôÝëåóç ôïõ script
     üðùò êëÞóåéò óõóôÞìáôïò ÷ñçóéìïðïéþíôáò ôéò <function>system</function>, 
     <function>sleep</function> óõíáñôÞóåéò, åñùôÞóåéò âÜóåùí äåäïìÝíùí, ÷ñüíï ðïõ îïäåýåôáé áðü
     ôçí äéáäéêáóßá ôïõ upload ôïõ áñ÷åßïõ, êëð. äåí óõìðåñéëáìâÜíåôáé üôáí ïñßæåôáé ï ìÝãéóôïò 
     ÷ñüíïò ðïõ åêôåëåßôáé ôï script.
    </simpara>
   </note>    
   <simpara>
    Áí ôï <link linkend="ini.post-max-size">post_max_size</link> ïñéóôåßõ ðïëý
    ìéêñü, ìåãÜëá áñ÷åßá äåí ìðïñïýí íá ãßíïõí upload.  Óéãïõñåõôåßôå ðùò Ý÷åôå ïñßóåé ôï
    <literal>post_max_size</literal> áñêåôÜ ìåãÜëï.
   </simpara>
   <simpara>
    Áí äåí åðéêõñþíåôå óå ðïéÜ áñ÷åßá åðåíåñãåßôå, õðÜñ÷åé ðéèáíüôçôá êÜðïéïò ÷ñÞóôçò íá ìðïñÝóåé íá ðñïóðåëÜóåé
    åõáßóèçôåò ðëçñïöïñßåò óå Üëëïõò êáôáëüãïõò.
   </simpara>
   <simpara>
    Óçìåéþóôå ðùò ï httpd ôïõ CERN äåß÷íåé íá áöáéñåß ïôéäÞðïôå
    áñ÷ßæåé óôï ðñþôï whitespace óôï content-type mime header
    ðïõ ëáìâÜíåé áðü ôïí client.  ¼óï èá Ý÷ïõí Ýôóé ôá ðñÜãìáôá, ôï CERN httpd
    äåí èá õðïóôçñßæåé upload áñ÷åßùí.
   </simpara>
   <simpara>
    Ëüãù ôïõ ìåãÜëïõ ìåãÝèïõò ôùí listing styles óôïõò êáôáëüãïõò, äåí åããõïýìáóôå
    ðùò áñ÷åßá ìå åîùôéêÜ ïíüìáôá (üðùò ôï íá ðåñéÝ÷ïõí êåíÜ) èá ÷åéñßæïíôáé óùóôÜ.
   </simpara>
  </sect1>
  
  <sect1 id="features.file-upload.multiple">
   <title>Upload ðïëëáðëþí áñ÷åßùí</title>
   <simpara>
    ÐïëëáðëÜ áñ÷åßá ìðïñïýí íá ãßíïõí upload ÷ñçóéìïðïéþíôáò äéáöïñåôéêÜ
    <literal>name</literal> ãéá <literal>input</literal> (ïíüìáôá ãéá åßóïäï).
   </simpara>
   <simpara>
    Åßíáé åðßóçò äõíáôüí íá êÜíåôå upload ðïëëÜ áñ÷åßá ôáõôü÷ñïíá êáé
    íá Ý÷åôå ôçí ðëçñïöïñßá ïñãáíùìÝíç áõôüìáôá óå arrays ãéá óáò. Ãéá
    íá ôï êÜíåôå áõôü,  ðñÝðåé íá ÷ñçóéìïðïéÞóåôå ôçí ßäéá óýíôáîç õðïâïëÞò ôïõ array óôçí
    HTML öüñìá óáò, üðùò êÜíåôå ìå ðïëëáðëÜ select êáé checkbox:
   </simpara>
   <note>
    <para>
     ÕðïóôÞñéîç ãéá ðïëëáðëÜ upload áñ÷åßùí ðñïóôÝèçêå óôçí 3.0.10.
    </para>
   </note>
   <para>
    <example>
     <title>ÊÜíïíôáò Upload ðïëëáðëÜ áñ÷åßá</title>
     <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="Send files">
</form>
]]>
     </programlisting>
    </example>
   </para>
   <simpara>
    ¼ôáí ç ðáñáðÜíù öüñìá õðïâëçèåß, ôá array
    <varname>$_FILES['userfile']</varname>,
    <varname>$_FILES['userfile']['name']</varname>, êáé
    <varname>$_FILES['userfile']['size']</varname> èá
    áñ÷éêïðïéçèïýí (üðùò åðßóçò óôï $HTTP_POST_FILES ãéá PHP åêäüóåéò
    ðñéí ôçí 4.1.0).
    ¼ôáí ôï
    <literal>register_globals</literal> åßíáé åíåñãïðïéçìÝíï, ôá globals ãéá áñ÷åßá ðïõ Ý÷ïõí ãßíåé
    upload èá áñ÷éêïðïéçèïýí åðßóçò. ÊáèÝíá áðü áõôÜ èá åßáíé Ýíá áñéèìçìÝíá
    indexed array ôùí áíÜëïãùí ôéìþí ãéá ôá áñ÷åßá ðïõ Ý÷ïõí õðïâëçèåß.
   </simpara>
   <simpara>
    Ãéá ðáñÜäåéãìá, õðïèÝóôå ðùò ôá áñ÷åßá ìå ïíüìáôá
    <filename>/home/test/review.html</filename> êáé
    <filename>/home/test/xwp.out</filename> õðïâÜëëïíôáé.  Óå áõôÞ ôçí
    ðåñßðôùóç, ôï <varname>$_FILES['userfile']['name'][0]</varname>
    èá ðåñéÝ÷åé ôçí ôéìÞ <filename>review.html</filename>, êáé ôï
    <varname>$_FILES['userfile']['name'][1]</varname> èá
    ðåñéÝ÷åé ôçí ôéìÞ <filename>xwp.out</filename>. Ðáñüìïéá, ôï
    <varname>$_FILES['userfile']['size'][0]</varname> èá
    ðåñéÝ÷åé ôï ìÝãåèïò ôïõ <filename>review.html</filename>, ê.ï.ê.
   </simpara>
   <simpara>
    Ôá <varname>$_FILES['userfile']['name'][0]</varname>,
    <varname>$_FILES['userfile']['tmp_name'][0]</varname>,
    <varname>$_FILES['userfile']['size'][0]</varname>, êáé
    <varname>$_FILES['userfile']['type'][0]</varname> åðßóçò
    ïñßæïíôáé.
   </simpara>
  </sect1>

  <sect1 id="features.file-upload.put-method">
   <title>ÕðïóôÞñéîç ôçò PUT ìåèüäïõ</title>
   <simpara>
    Ç õðïóôÞñéîç ãéá ôçí PUT ìÝèïäï Ý÷åé áëëÜîåé ìåôáîý ôçò PHP 3 êáé ôçò PHP 4.
    Óôçí PHP 4, ðñÝðåé íá ÷ñçóéìïðïéåßôå ôï standard input stream ãéá íá äéáâÜóåôå
    ôá ðåñéå÷üìåíá åíüò HTTP PUT.
   </simpara>
   <para>
    <example>
     <title>Áðïèçêåýïíôáò HTTP PUT áñ÷åßá ìå ôçí PHP 4</title>
     <programlisting role="php">
<![CDATA[
<?php
/* PUT data comes in on the stdin stream */
$putdata = fopen("php://stdin","r");

/* Open a file for writting */
$fp = fopen("myputfile.ext","w");

/* Read the data 1kb at a time
   and write to the file */
while ($data = fread($putdata,1024))
  fwrite($fp,$data);

/* Close the streams */
fclose($fp);
fclose($putdata);
?>
]]>
     </programlisting>
    </example>
   </para>
   <note>
    <para>
     ¼ëç ç ôåêìçñßùóç ðïõ áêïëïõèåß éó÷ýåé ãéá ôçí PHP 3 ìüíï.
    </para>
   </note>
   <para>
    Ç PHP ðñïóöÝñåé õðïóôÞñéîç ãéá ôçí HTTP PUT ìÝèïäï ðïõ ÷ñçóéìïðïéåßôáé áðü client
    óáí ôïõò Netscape Composer êáé W3C Amaya.  Ïé PUT request åßíáé áñêåôÜ áðëïýóôåñåò
    áðü Ýíá upload áñ÷åßïõ êáé ìïéÜæïõí êÜðùò Ýôóé:
    <informalexample>
     <programlisting>
PUT /path/filename.html HTTP/1.1
     </programlisting>
    </informalexample>
   </para>
   <para>
    Áõôü êáíïíéêÜ óçìáßíåé ðùò ï remote client èá Þèåëå íá áðïèçêåýóåé
    ôá ðåñéå÷üìåíá ðïõ áêïëïõèïýí: /path/filename.html óôï web tree óáò.
    Ðñïöáíþò äåí åßíáé êáé ôüóï êáëÞ éäÝá ï Apache Þ ç PHP íá áöÞíïõí áõôüìáôá
    ïðïéïíäÞðïôå íá êÜíåé overwrite áñ÷åßá óôï web tree óáò.  ¸ôóé, ãéá íá ÷åéñéóôåßôå
    Ýíá ôÝôïéï request ðñÝðåé ðñþôá íá ðåßôå óôïí web server óáò ðùò
    èÝëåôå Ýíá óõãêåêñéìÝíï PHP script íá ÷åéñéóôåß ôï request.  Óôïí Apache ôï êÜíåôå
    áõôü ìå ôï <emphasis>Script</emphasis> directive.  Ìðïñåß íá ôïðïèåôçèåß
    ó÷åäüí ïðïõäÞðïôå ìÝóá óôï áñ÷åßï ñõèìßóåùí ôïõ Apache. ¸íá
    óõíçèéóìÝíï ìÝñïò åßíáé ìÝóá óå Ýíá &lt;Directory&gt; ìðëïê Þ ðéèáíþò ìÝóá óå
    Ýíá &lt;Virtualhost&gt; ìðëïê.  Ìéá ãñáììÞ óáí êáé áõôÞ èá êÜíåé ôï êüëðï:
    <informalexample>
     <programlisting>
Script PUT /put.php
     </programlisting>
    </informalexample>
   </para>
   <simpara>
    Áõôü ëÝåé óôïí Apache íá óôÝëíåé üëá ôá PUT request ãéá URI ðïõ ôáéñéÜæïõí óôï
    ðåñéå÷üìåíï óôï ïðïßï ôïðïèåôÞóáôå áõôÞ ôç ãñáììÞ óôï put.php script óáò.  Áõôü
    õðïèÝôåé, öõóéêÜ, ðùò Ý÷åôå ôçí PHP óõíäåäåìÝíç ãéá ôçí .php
    åðÝêôáóç êáé ðùò ç PHP åßíáé åíåñãïðïéçìÝíç.
   </simpara>
   <simpara>
    ÌÝóá óôï put.php áñ÷åßï óáò èá èÝëåôå íá êÜíåôå êÜôé ôÝôïéï:
   </simpara>
   <para>
    <informalexample><programlisting role="php">
<![CDATA[
<?php copy($PHP_UPLOADED_FILE_NAME,$DOCUMENT_ROOT.$REQUEST_URI); ?>
]]>
    </programlisting></informalexample>
   </para>
   <simpara>
    Áõôü èá áíôéãñÜøåé ôï áñ÷åßï óôçí ôïðïèåóßá ðïõ æçôÞèçêå áðü ôïí remote
    client.  Èá èÝëåôå ðéèáíþò íá êÜíåôå êÜðïéïõò Ýëåã÷ïõò Þ/êáé
    íá áíáãíùñßóåôå ôùí ÷ñÞóôç ðñéí íá åêôåëÝóåé áõôÞ ôçí áíôéãñáöÞ ôïõ áñ÷åßïõ.  Ôï ìüíï
    êüëðï åäþ åßíáé ðùò üôáí ç PHP äåé Ýíá request ìÝóù PUT ìåèüäïõ áðïèçêåýåé
    ôï áñ÷åßï ðïõ Ý÷åé ãßíåé upload óå Ýíá ðñïóùñéíü áñ÷åßï üðùò åêßíá ðïõ ÷åéñßæåôáé
    ç <link
    linkend="features.file-upload.post-method">POST-ìÝèïäïò</link>.
    ¼ôáí ôï request ôåëåéþóåé, áõôü ôï ðñïóùñéíü áñ÷åßï äéáãñÜöåôáé.  ¸ôóé, ôï
    PHP script óáò ðïõ ÷åéñßæåôáé ôï PUT ðñÝðåé íá áíôéãÜøåé ôï áñ÷åßï áõôü êÜðïõ áëëïý. Ôï
    üíïìá ôïõ ðñïóùñéíïý áõôïý áñ÷åßïõ åßíáé ìÝóá óôçí $PHP_PUT_FILENAME
    ìåôáâëçôÞ, êáé ìðïñåßôå íá äåßôå ôï ðñïôåéíüìåíï üíïìá ðñïïñéóìïý óôï
    $REQUEST_URI (ìðïñåß íá äéáöÝñåé óå web server åêôüò ôïõ Apache).  Áõôü ôï
    üíïìá áñ÷åßïõ ðñïïñéóìïý åßíáé áõôü ðïõ ï remote client ïñßæåé.
    Äåí ÷ñåéÜæåôáé íá áêïýóåôå ôïí client.  Èá ìðïñïýóáôå, ãéá ðáñÜäåéãìá,
    íá áíôéãñÜöåôå üëá ôá áñ÷åßá ðïõ ãßíïíôáé upload óå Ýíá åéäéêü êáôÜëïãï ãéá ôá upload.
   </simpara>
  </sect1>

 </chapter>

<!-- 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
-->