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. ¸íá
óõíçèéóìÝíï ìÝñïò åßíáé ìÝóá óå Ýíá <Directory> ìðëïê Þ ðéèáíþò ìÝóá óå
Ýíá <Virtualhost> ìðëïê. Ìéá ãñáììÞ óáí êáé áõôÞ èá êÜíåé ôï êüëðï:
<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
-->