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

From: Date: Sat, 26 Jan 2002 11:36:56 +0000
Subject: cvs: phpdoc /he/features file-upload.xml
Groups: php.doc 
Request: Send a blank email to phpdoc+get-969341630@lists.php.net to get a copy of this message
raful Sat Jan 26 06:36:56 2002 EDT Added files: /phpdoc/he/features file-upload.xml Log: first edition, you know...

Index: phpdoc/he/features/file-upload.xml +++ phpdoc/he/features/file-upload.xml <?xml version="1.0" encoding="iso-8859-8-i"?> <!-- $Revision: 1.28 $ --> <chapter id="features.file-upload"> <title>èéôåì áäòìàú ÷áöéí</title> <sect1 id="features.file-upload.post-method"> <title>POST method uploads</title> <simpara> PHP éëåìä ìèôì á÷áìú ÷áöéí ùîåòìéí îëì ãôãôï úåàí RFC-1867 (ùëåìì àú netscape navigator 3 åîòìä, microsoft internet explorer 3 òí úåñó (patch) ùì îé÷øåñåôè, àå âéøñàåú çãùåú éåúø ììà äúåñó). äôéö'ø äæä îàôùø ìàðùéí ìäòìåú âí ÷áöé è÷ñè åâí ÷áöéí áéðàøééí. òí äàéîåú ùì PHP åôåð÷öéåú äèéôåì á÷áöéí, ðéúðú ùìéèä îìàä òì îé ùîåøùä ìäòìåú àú ä÷åáõ, åîä ìòùåú òí ä÷åáõ ìàçø ùäåòìä. </simpara> <para> PHP âí úåîëú áùéèú äòìàú ä÷áöéí PUT ù-netscape composer åä÷ìééðè ùì W3C, Amaya, îùúîùéí áä. òåã ôøèéí òì <link linkend="features.file-upload.put-method">úîéëä áùéèú PUT</link>. </para> <para> îñê äòìàú ÷åáõ éëåì ìäéáðåú òì éãé éöéøú èåôñ îéåçã ùðøàä áòøê ëëä: <example> <title>èåôñ äòìàú ÷åáõ</title> <programlisting role="html"> <![CDATA[ <form enctype="multipart/form-data" action="_URL_" method="post"> <input type="hidden" name="MAX_FILE_SIZE" value="1000"> Send this file: <input name="userfile" type="file"> <input type="submit" value="Send File"> </form> ]]> </programlisting> </example> ä-_URL_ öøéê ìäöáéò òì ÷åáõ PHP. äùãä äçáåé MAX_FILE_SIZE çééá ìáåà ìôðé ùãä ä÷ìè ùì ä÷åáõ åòøëå äåà âåãì ä÷åáõ äî÷ñéîìé äàôùøé. äâåãì äåà áéçéãåú îñåí áééè (byte). <warning> <para> äâãøú ä-MAX_FILE_SIZE äéà áâãø ééòåõ ìãôãôï. ÷ì áéåúø ìäòøéí òì äî÷ñéîåí äæä. ëãàé ìà ìáðåú òì æä ùäãôãôï îöééú ìîùàìúê! òì äâãøú ä-PHP òáåø äâåãì äî÷ñéîìé, îöã ùðé, ìà ðéúï ìòáåã. The MAX_FILE_SIZE is advisory to the browser. It is easy to circumvent this maximum. So don't count on it that the browser obeys you wish! The PHP-settings for maximum-size, however, cannot be fooled. </para> </warning> </para> <para> á-PHP, äîùúðéí äáàéí éäéå îåâãøéí áñ÷øéôè äéòã ìàçø äòìàú ÷áöéí ùäöìéçä, áäðçä ù<link linkend="ini.register-globals">register_globals</link> îåôòì á-<filename>php.ini</filename>. àí <link linkend="ini.track-vars">track_vars</link> îåôòì, äí éäéå æîéðéí á-PHP âí áîòøú äâìåáìé <varname>$HTTP_POST_VARS</varname>. éù ìùéí ìá ùùîåú äîùúðéí äáàéí îúééçñéí ì÷åáõ ùäåòìä áùãä áùí 'userfile', ëîå áãåâîä ùìîòìä: <itemizedlist> <listitem> <simpara> <varname>$userfile</varname> - ùí ä÷åáõ äæîðé ùáå àåçñï ä÷åáõ ùäåòìä ìùøú. </simpara> </listitem> <listitem> <simpara> <varname>$userfile_name</varname> - äùí àå äðúéá äî÷åøé ùì ä÷åáõ òì äîçùá ùì æä ùäòìä àú ä÷åáõ </simpara> </listitem> <listitem> <simpara> <varname>$userfile_size</varname> - äâåãì ùì ä÷åáõ áéçéãåú ùì áééè (byte) </simpara> </listitem> <listitem> <simpara> <varname>$userfile_type</varname> - ä-mime type ùì ä÷åáõ, áîéãä åäãôãôï ñéô÷ àú äðúåï äæä. ãåâîä: "image/gif". </simpara> </listitem> </itemizedlist> éù ìùéí ìá ùäçì÷ "$userfile" áùí äîùúðä äåà äùí ùì ùãä ä÷ìè ùì ä-TYPE=file áèåôñ äòìàú ä÷åáõ. áèåôñ äòìàú ä÷åáõ ìãåâîä ùìîòìä, áçøðå ì÷øåà ìîùðä áùí "userfile". </para> <para> á-PHP 4, ääúðäâåú ùåðä áî÷öú, áëê ùäîòøê äâìåáìé <varname>$HTTP_POST_FILES</varname> ãåàâ ìäëéì îéãò òì ä÷åáõ ùäåòìä. æä æîéï ø÷ àí <link linkend="ini.track-vars">track_vars</link> îåôòì, àáì <link linkend="ini.track-vars">track_vars</link> úîéã îåôòì áâéøñàåú PHP ùáàå àçøé 4.0.2. </para> <para> äúëåìä ùì <varname>$HTTP_POST_FILES</varname> îôåøèú ëàï. éù ìùéí ìá ùäðçú äéñåã äéà ùùí ä÷åáõ ùîåòìä äåà 'userfile', ëîå áãåâîä ìîòìä: <variablelist> <varlistentry> <term><varname>$HTTP_POST_FILES['userfile']['name']</varname></term> <listitem> <para> äùí äî÷åøé ùì ä÷åáõ òì îçùá äì÷åç. </para> </listitem> </varlistentry> <varlistentry> <term><varname>$HTTP_POST_FILES['userfile']['type']</varname></term> <listitem> <para> ä-mime type ùì ä÷åáõ, àí äãôãôï ñéô÷ àú äîéãò äæä. ãåâîä: <literal>"image/gif"</literal>. </para> </listitem> </varlistentry> <varlistentry> <term><varname>$HTTP_POST_FILES['userfile']['size']</varname></term> <listitem> <para> äâåãì, áéçéãåú áééè (byte), ùì ä÷åáõ ùäåòìä. </para> </listitem> </varlistentry> <varlistentry> <term><varname>$HTTP_POST_FILES['userfile']['tmp_name']</varname></term> <listitem> <para> The temporary filename of the file in which the uploaded file was stored on the server. ùí ä÷åáõ äæîðé ùáå ðùîø ä÷åáõ òì äùøú. </para> </listitem> </varlistentry> </variablelist> </para> <para> ëáøéøú îçãì, ä÷áöéí éùîøå áñôøééä äæîðéú ùäéà áøéøú äîçãì ùì äùøú, àìà àí äåâãø àçøú á<link linkend="ini.upload-tmp-dir">upload_tmp_dir</link> ùðîöàú á<filename>php.ini</filename>. ðéúï ìùðåú àú ñôøééú áøéøú äîçãì ùì äùøú òì éãé äâãøú îùúðä äñáéáä <envar>TMPDIR</envar> áñáéáä áä PHP øöä. äâãøä áàîöòåú <function>putenv</function> îúåê ñ÷øéôè ùì PHP ìà úòáåã. ëîå ëï, îùúðä äñáéáä äæä éëåì ìäéåú ùéîåùé ëùøåöéí ìååãà ùôòåìåú àçøåú îáåöòåú òì ÷áöéí ùäåòìå. <example> <title>åéãåé äòìàú ÷áöéí</title> <para> äãåâîàåú äáàåú äï òáåø âéøñàåú ùì PHP äîàåçøåú î-3.0.16, åâéøñàåú äîàåçøåú î-PHP áâéøñä 4.0.2. àôùø ìáãå÷ âí àú äôåðöéåú <function>is_uploaded_file</function> å-<function>move_uploaded_file</function>. </para> <programlisting role="php"> <![CDATA[ <?php if (is_uploaded_file($userfile)) { copy($userfile, "/place/to/put/uploaded/file"); } else { echo "Possible file upload attack: filename '$userfile'."; } /* ...or... */ move_uploaded_file($userfile, "/place/to/put/uploaded/file"); ?> ]]> </programlisting> <para> òáåø âéøñàåú ÷åãîåú ùì PHP, öøéê ìòùåú îùäå ëîå áãåâîä. <note> <para> æä <emphasis>ìà</emphasis> éòáåã áâéøñàåú ùì PHP ùâãåìåú î-4.0.2. æä úìåé áúô÷åãéåú äôðéîéú ùì PHP ùùåðúä àçøé äâéøñä äæå. </para> </note> </para> <programlisting role="php"> <![CDATA[ <?php /* Userland test for uploaded file. */ function is_uploaded_file($filename) { if (!$tmp_file = get_cfg_var('upload_tmp_dir')) { $tmp_file = dirname(tempnam('', '')); } $tmp_file .= '/' . basename($filename); /* User might have trailing slash in php.ini... */ return (ereg_replace('/+', '/', $tmp_file) == $filename); } if (is_uploaded_file($userfile)) { copy($userfile, "/place/to/put/uploaded/file"); } else { echo "Possible file upload attack: filename '$userfile'."; } ?> ]]> </programlisting> </example> </para> <simpara> ñ÷øéôè ä-PHP ùî÷áì àú ä÷åáõ äîåòìä öøéê ìééùí ëì ìåâé÷ä äëøçéú ëãé ì÷áåò îä öøéê ìòùåú òí ä÷åáõ ùäåòìä. ðéúï, ìãåâîä, ìäùúîù áîùúðä <varname>$file_size</varname> ëãé ìîçå÷ ëì ÷åáõ, ÷èï àå âãåì îéãé. àôùø ìäùúîù áîùúðä <varname>$file_type</varname> ëãé ìæøå÷ ëì ÷åáõ ùìà úåàí ì÷øéèøéåï ùì ñåâ îñåééí. úäéä äìåâé÷ä àùø úäéä, öøéê ìîçå÷ àú ä÷åáõ îäñôøééä äæîðéú, àå ìäòáéø àåúå ìî÷åí àçø. </simpara> <simpara> ä÷åáõ éîç÷ îäñôøééä äæîðéú áñåó äá÷ùä àí äåà ìà äåòáø, àå ùùîå ìà ùåðä. </simpara> </sect1> <sect1 id="features.file-upload.common-pitfalls"> <title>îìëåãåú ðôåöåú</title> <simpara> äîàôééï <literal>MAX_FILE_SIZE</literal> ìà éëåì ìäâãéø âåãì ÷åáõ äâãåì îâåãì ä÷åáõ ùäåâãø áäâãøú ä-ini - <link linkend="ini.upload-max-filesize">upload_max_filesize</link>. áøéøú äîçãì äéà 2 îâä-áééè. </simpara> <simpara> ììà åéãåé ä÷áöéí ùîåòìéí ìùøú, îùúîùéí éëåìéí ìçãåø ìîéãò øâéù áñôøéåú àçøåú. </simpara> <simpara> Please note that the CERN httpd seems to strip off everything starting at the first whitespace in the content-type mime header it gets from the client. As long as this is the case, CERN httpd will not support the file upload feature. </simpara> </sect1> <sect1 id="features.file-upload.multiple"> <title>äòìàú ÷áöéí îøåáéí</title> <simpara> ðéúï ìäòìåú ëîä ÷áöéí áå-æîðéú, åùäîéãò òìéäí éàñó áîòøëéí áùáéìê. ëãé ìòùåú àú æä, éù ìäùúîù áàåúå úçáéø ùìéçú îòøê áèåôñ ä-HTML ëîå ùòåùéí òí úéáåú áçéøä åö'÷áå÷ñéí: </simpara> <note> <para> úîéëä áäòìàú ÷áöéí îøåáéí ðåñôä áâéøñä 3.0.10. </para> </note> <para> <example> <title>äòìàú ÷áöéí îøåáéí</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> ëùäèåôñ ùìîòìä ðùìç, äîòøëéí <varname>$userfile</varname>, <varname>$userfile_name</varname> å-<varname>$userfile_size</varname> éååöøå áúçåí äâìåáìé (îîù ëîå á-$HTTP_POST_FILES ($HTTP_POST_VARS á-PHP 3)). ëì àçã îäð"ì éàðã÷ñ, áöåøä îñôøéú, îòøê ùì äòøëéí äîúàéîéí, ìôé ä÷áöéí ùðùìçå. </simpara> <simpara> ìãåâîä, áäðçä ùä÷áöéí <filename>/home/test/review.html</filename> å-<filename>/home/test/xwp.out</filename> ðùìçå. áî÷øä äæä, <varname>$userfile_name[0]</varname> éëéì àú äòøê <filename>review.html</filename>, å-<varname>$userfile_name[1]</varname> éëéì àú äòøê <filename>xwp.out</filename>. áàåúå äàåôï, <varname>$userfile_size[0]</varname> éëéì àú âåãì ä÷åáõ <filename>review.html</filename> åëéåöà áæä. </simpara> <simpara> <varname>$userfile['name'][0]</varname>, <varname>$userfile['tmp_name'][0]</varname>, <varname>$userfile['size'][0]</varname> å-<varname>$userfile['type'][0]</varname> âí äí ÷áåòéí. </simpara> </sect1> <sect1 id="features.file-upload.put-method"> <title>úîéëä áùéèú PUT</title> <para> PHP îñô÷ú úîéëä áùéèú HTTP PUT ùáä îùúîùéí netscape composer å-W3C Amaya. á÷ùú PUT ôùåèåú éåúø îäòìàú ÷áöéí, åäï ðøàåú áòøê ëëä: <informalexample> <programlisting> PUT /path/filename.html HTTP/1.1 </programlisting> </informalexample> </para> <para> áãøê ëìì æä éöééï ùäì÷åç øåöä ìùîåø àú äúåëï ùáà àçøé, ëîå: /path/filename.html áòõ äøùú ùìê. îåáï îàìéå ùæä ìà øòéåï èåá òáåø Apache àå PHP ìàùø ìëåìí áàåôï àåèåîèé ìëúåá òì ÷áöéí ÷ééîéí áòõ äøùú ùìê. ëãé ìèôì áá÷ùåú ëàìä, öøéê ìäâéã ìùøú ùáøöåðê ìäôðåú á÷ùåú ëàìä ìñ÷øéôè PHP. òì Apache äãáø ðòùä òì éãé ñôøééú <emphasis>Script</emphasis>. àôùø ìùéí àú æä ëîòè áëì î÷åí á÷åáõ ä÷åðôéâåøöéä ùì Apache. î÷åí ðôåõ äåà áúåê äáìå÷ &lt;Directory&gt;àå àåìé áúåê äáìå÷ &lt;Virtualhost&gt;. ùåøä ëæå úòùä àú äèøé÷: <informalexample> <programlisting> Script PUT /put.php </programlisting> </informalexample> </para> <simpara> æä àåîø ì-Apache ìùìåç àú ëì á÷ùåú PUT ì-URI ùúåàí àú äîé÷åí áå ùîúí àú äùåøä ùîöééðú àú îé÷åí äñ÷øéôè put.php. æä áäðçä, ëîåáï, ù-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> æä éòúé÷ àú ä÷åáõ ìîé÷åí äîáå÷ù òì éãé äì÷åç. áèç éúòåøø áê äøöåï ìáöò ëîä áãé÷åú å/àå ìàîú àú äîùúîù ìôðé áéöåò äòú÷ú ä÷åáõ. äèøé÷ äéçéã ëàï äåà ùëù-PHP øåàä áá÷ùä áùéèú PUT, äéà îàçñðú àú ä÷åáõ ùäåòìä á÷åáõ æîðé îîù ëîå àìä ùèåôìå îìáã <link linkend="features.file-upload.post-method">ùéèú POST</link>. ëùäá÷ùä îñúééîú, ä÷åáõ äæîðé äæä ðîç÷. ìëï, ñ÷øéôè ä-PHP ùîèôì á-PUT öøéê ìäòúé÷ àú ä÷åáõ ìîé÷åí ëìùäå. ùí ä÷åáõ ùì ä÷åáõ äæîðé ðîöà áúåê äîùúðä $PHP_PUT_FILENAME, åðéúï ìøàåú àú ùí ä÷åáõ äîåöò áúåê $REQUEST_URI (éëåì ìäùúðåú òì ùøúéí ùàéðí Apache). ùí ä÷åáõ äîåöò äåà ùí ùîâãéø äì÷åç. äì÷åç ùåìç á÷ùä åìà ô÷åãä. ìëï àôùø, ìãåâîä, ìäòúé÷ àú ëì ä÷áöéí ùäåòìå ìñôøééú äòìàåú îéåçãú. </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 -->
« previous php.doc (#969341630) next »