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

From: Date: Thu, 13 Dec 2001 22:27:45 +0000
Subject: cvs: phpdoc /tr/features file-upload.xml
Groups: php.doc 
Request: Send a blank email to phpdoc+get-969339712@lists.php.net to get a copy of this message
tpug Thu Dec 13 17:27:45 2001 EDT Added files: /phpdoc/tr/features file-upload.xml Log: complete translation by Mesut

Index: phpdoc/tr/features/file-upload.xml +++ phpdoc/tr/features/file-upload.xml <?xml version="1.0" encoding="iso-8859-1"?> <!-- $Revision: 1.1 $ --> <chapter id="features.file-upload"> <title>Dosya yükleme yönetimi</title> <sect1 id="features.file-upload.post-method"> <title>POST metodu ile dosya yükleme</title> <simpara> PHP, RFC-1867 uyumlu tüm taray&inodot;c&inodot;lardan (Netscape Navigator 3 ve daha üst sürümler, Mücrosoft'un yay&inodot;nlad&inodot;&gbreve;&inodot; bir yama ile Microsoft Internet Explorer 3, veya di&gbreve;er üst sürümleri) dosya yüklemek için yeteneklidir. Bu özellik kullan&inodot;c&inodot;lar&inodot;n binary veya metinsel dosya yükleyebilmelerini sa&gbreve;lamaktad&inodot;r. PHP'nin yetkilendirme ve dosya i&scedil;leme özellikleri ile, dosyalar&inodot; kimin yükleybilece&gbreve;i ve yüklendikten sonra ne yap&inodot;laca&gbreve;&inodot; konusunda tam kontrol sahibisinizdir. </simpara> <para> PHP, Netscape Composer ve W3C'nin Amaya üyeleri taraf&inodot;ndan kullan&inodot;lan PUT yöntemi ile de dosya yükleme i&scedil;lemini destekler. PUT Yöntemi hakk&inodot;nda detayl&inodot; bilgi için<link linkend="features.file-upload.put-method">t&inodot;klay&inodot;n&inodot;z.</link> </para> <para> Dosya yükleme ekran&inodot;, a&scedil;a&gbreve;&inodot;daki gibi özel bir form haz&inodot;rlamakla olu&scedil;turulur: <example> <title>Dosya Yükleme Formu</title> <programlisting role="html"> <![CDATA[ <form enctype="multipart/form-data" action="_URL_" method="post"> <input type="hidden" name="MAX_FILE_SIZE" value="1000"> Bu dosyay&inodot; gönder: <input name="userfile" type="file"> <input type="submit" value="Gönder"> </form> ]]> </programlisting> </example> _URL_ bir PHP dosyas&inodot;n&inodot; i&scedil;aret etmelidir. MAX_FILE_SIZE gizli alan&inodot;, form içinde dosya alan&inodot;ndan üstte olmal&inodot;d&inodot;r ve ta&scedil;&inodot;&gbreve;&inodot;d&inodot; de&gbreve;er, kabul edilebilir enfazla dosya boyunu gösterir. De&gbreve;er byte cinsindendir. <warning> <para> MAX_FILE_SIZE sadece taray&inodot;c&inodot;ya, bu boyutu a&scedil;mamas&inodot;n&inodot; söyler. Bunu a&scedil;mak çok kolayd&inodot;r. Bu yüzden buna pek fazla güvenmeyin. PHP'nin ayarlar&inodot;ndaki maximum-size ise a&scedil;&inodot;lamaz. </para> </warning> </para> <para> PHP'de , <filename>php.ini</filename> içindeki <link linkend="ini.register-globals">register_globals</link>'&inodot;n on oldu&gbreve;u varsay&inodot;l&inodot;rsa, ba&scedil;ar&inodot;l&inodot; bir dosya yükleme an&inodot;nda a&scedil;a&gbreve;&inodot;daki de&gbreve;i&scedil;kenler tan&inodot;mlan&inodot;r. E&gbreve;er <link linkend="ini.track-vars">track_vars</link> on ise, bu de&gbreve;i&scedil;kenler PHP'nin <varname>$HTTP_POST_VARS</varname> dizinleri olarak da al&inodot;nabilir. A&scedil;a&gbreve;&inodot;daki de&gbreve;i&scedil;ken adlar&inodot;, yukar&inodot;daki örnekteki 'userfile' alan ad&inodot;n&inodot;n kullan&inodot;ld&inodot;&gbreve;&inodot; varsay&inodot;larak verilmi&scedil;tir: <itemizedlist> <listitem> <simpara> <varname>$userfile</varname> - Dosyan&inodot;n, sunucuda saklanan geçici ad&inodot;. </simpara> </listitem> <listitem> <simpara> <varname>$userfile_name</varname> - Dosyay&inodot; gönderen ki&scedil;inin bilgisayar&inodot;ndaki dosyan&inodot;n orijinal ad&inodot; veya sistem yolu. </simpara> </listitem> <listitem> <simpara> <varname>$userfile_size</varname> - Gönderilen dosyan&inodot;n byte cinsinden boyutu. </simpara> </listitem> <listitem> <simpara> <varname>$userfile_type</varname> - Taray&inodot;c&inodot;n&inodot;n bu bilgiyi vermesine ba&gbreve;l&inodot; olarak, dosyan&inodot;n mime tipi. Örne&gbreve;in "image/gif". </simpara> </listitem> </itemizedlist> Yukar&inodot;daki de&gbreve;i&scedil;kenlerin "$userfile" bölümü, yükleme formundaki INPUT TYPE=file alan&inodot;na verdi&gbreve;iniz isimdir. Yukar&inodot;daki yükleme formunda biz "userfile" ismini kulland&inodot;k. </para> <para> PHP 4'de durum bir parça farkl&inodot;. Yüklenen dosya bilgileri <varname>$HTTP_POST_FILES</varname> dizinlerine yüklenmi&scedil;tir. Bu PHP 3'de oldu&gbreve;u gibi, e&gbreve;er <link linkend="ini.track-vars">track_vars</link> on olarak tan&inodot;mlanm&inodot;&scedil; ise geçerlidir. Fakat PHP 4.0.2 ve üst sürümlerinde <link linkend="ini.track-vars">track_vars</link> on olarak tan&inodot;ml&inodot; gelir. </para> <para> <varname>$HTTP_POST_FILES</varname>'&inodot;n içeri&gbreve;i a&scedil;a&gbreve;&inodot;daki gibidir. Bu örnekte de, formdaki dosya yükleme alan&inodot;n&inodot;n ad&inodot;n&inodot;n "userfile" oldu&gbreve;u varsay&inodot;lm&inodot;&scedil;t&inodot;r: <variablelist> <varlistentry> <term><varname>$HTTP_POST_FILES['userfile']['name']</varname></term> <listitem> <para> Dosyan&inodot;n, dosyay&inodot; gönderenin bilgisayar&inodot;ndaki orijinal ad&inodot;. </para> </listitem> </varlistentry> <varlistentry> <term><varname>$HTTP_POST_FILES['userfile']['type']</varname></term> <listitem> <para> Taray&inodot;c&inodot;n&inodot;n bu bilgiyi vermesine ba&gbreve;l&inodot; olarak, dosyan&inodot;n mime tipi. Örne&gbreve;in <literal>"image/gif"</literal>. </para> </listitem> </varlistentry> <varlistentry> <term><varname>$HTTP_POST_FILES['userfile']['size']</varname></term> <listitem> <para> Gönderilen dosyan&inodot;n byte cinsinden boyutu. </para> </listitem> </varlistentry> <varlistentry> <term><varname>$HTTP_POST_FILES['userfile']['tmp_name']</varname></term> <listitem> <para> Dosyan&inodot;n, sunucuda saklanan geçici ad&inodot;. </para> </listitem> </varlistentry> </variablelist> </para> <para> <filename>php.ini</filename> içindeki <link linkend="ini.upload-tmp-dir">upload_tmp_dir</link> tan&inodot;mlamas&inodot;na farkl&inodot; bir yer tan&inodot;mlanmad&inodot;kça, dosyalar, sunucuda tan&inodot;ml&inodot; olan geçici klasör de saklan&inodot;r. Sunucunun tan&inodot;ml&inodot; geçici klasörü, <envar>TMPDIR</envar> de&gbreve;i&scedil;keni tan&inodot;mlanarak de&gbreve;i&scedil;tirilebilir. Bu tan&inodot;mlamay&inodot;, PHP dosyas&inodot; içinde <function>putenv</function> fonksiyonunu kullanarak tan&inodot;mlamak geçerli olmayacakt&inodot;r. Bu de&gbreve;i&scedil;keni, gönderilen dosya üzerindeki ba&scedil;ka i&scedil;lemlerin çal&inodot;&scedil;&inodot;rl&inodot;&gbreve;&inodot;ndan emin olmak içinde kullanabilirsiniz. <example> <title>Dosya Yükleme Kontrolü</title> <para> A&scedil;a&gbreve;&inodot;daki örnek, PHP 3'ün, 3.0.16'den ve PHP 4'ün 4.0.2'den yüksek sürümleri içindir. Fonksiyon özellikleri için <function>is_uploaded_file</function> ve <function>move_uploaded_file</function> sayfalar&inodot;na bak&inodot;n&inodot;z. </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'nin daha önceki sürümleri için, a&scedil;a&gbreve;&inodot;daki gibi bir seye ihtiyac&inodot;n&inodot;z var. <note> <para> Bu örnek PHP'nin 4.0.2'den sonraki sürümlerinde <emphasis>çal&inodot;&scedil;maz</emphasis>. </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> Gönderilen dosyay&inodot; alan PHP dosyan&inodot;z, gönderilen dosyan&inodot;n ne yap&inodot;laca&gbreve;&inodot;na karar vermek için programlanmal&inodot;d&inodot;r. Örne&gbreve;in, dosya boyutu çok büyük veya çok küçük olan dosyalar&inodot; kabul etmemek için <varname>$file_size</varname> de&gbreve;i&scedil;kenini kullanabilirsiniz. <varname>$file_type</varname> de&gbreve;i&scedil;kenini, belirledi&gbreve;iniz kriterlerdeki dosya tipine uymayan dosyalar&inodot; kabul etmemek için kullanabilirsiniz. &Idot;stemedi&gbreve;iniz bu dosyalar&inodot;, geçici klasörden silebilir veya farkl&inodot; bir klasöre ta&scedil;&inodot;yabilirsiniz. </simpara> <simpara> &Idot;&scedil;lem sonunda, dosya ta&scedil;&inodot;nmad&inodot; veya ad&inodot; de&gbreve;i&scedil;tirilmedi ise, geçici klasörden silinir. </simpara> </sect1> <sect1 id="features.file-upload.common-pitfalls"> <title>Genel Tehlikeler</title> <simpara> Formdaki <literal>MAX_FILE_SIZE</literal> alan&inodot;, PHP'nin ini tan&inodot;mlar&inodot;ndaki <link linkend="ini.upload-max-filesize">upload_max_filesize</link> da tan&inodot;mlanm&inodot;&scedil; de&gbreve;erden daha büyük bir de&gbreve;er tan&inodot;yamaz. Tan&inodot;ml&inodot; gelen 2 Megabyte t&inodot;r. </simpara> <simpara> &Idot;&scedil;lem yapt&inodot;&gbreve;&inodot;n&inodot;z dosyay&inodot; kontrol etmemek, kullan&inodot;c&inodot;lar&inodot;n di&gbreve;er klasörlerdeki hassas bilgilerinize eri&scedil;ebilmesi demektir. </simpara> <simpara> Lütfen CERN httpd'nin istemciden gelen content-type mime ba&scedil;l&inodot;&gbreve;&inodot;nda ilk bo&scedil;luktan sonraki her &scedil;eyi silme e&gbreve;iliminde oldu&gbreve;unu not edin. Bu durum devam ettikçe, CERN httpd dosya yükleme özelli&gbreve;ini desteklemeyecektir. </simpara> </sect1> <sect1 id="features.file-upload.multiple"> <title>Çoklu Dosya Yükleme</title> <simpara> Ayn&inodot; anda birden fazla dosya yüklemek ve dosya bilgilerini otomatik olarak organize olmu&scedil; bir dizin olarak almak mümkündür. Bunu yapmak için, HTML formlarda kulland&inodot;&gbreve;&inodot;n&inodot;z Checkbox alanlar&inodot;nda oldu&gbreve;u gibi, ayn&inodot; dizin gönderimi yapmal&inodot;s&inodot;n&inodot;z: </simpara> <note> <para> Çoklu dosya yükleme deste&gbreve;i 3.0.10 sürümünde eklenmi&scedil;tir. </para> </note> <para> <example> <title>Çoklu Dosya Yükleme</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> Yukar&inodot;daki form gönderildi&gbreve;inde, dizinler <varname>$userfile</varname>, <varname>$userfile_name</varname>, ve <varname>$userfile_size</varname> will be formed in the global scope (as well as in $HTTP_POST_FILES ($HTTP_POST_VARS in PHP 3)). Bunlar&inodot;n her biri, gönderilen dosyalar&inodot;n de&gbreve;erlerini içeren numaraland&inodot;r&inodot;lm&inodot;&scedil; dizin olacakt&inodot;r. </simpara> <simpara> Örne&gbreve;in, gönderilen dosya adlar&inodot;n&inodot;n &scedil;öyle oldu&gbreve;unu varsayal&inodot;m: <filename>/home/test/review.html</filename> ve <filename>/home/test/xwp.out</filename>. Bu durumda, <varname>$userfile_name[0]</varname>, <filename>review.html</filename> de&gbreve;erini içerir, ve <varname>$userfile_name[1]</varname> de <filename>xwp.out</filename> de&gbreve;erini içerir. Bir benzeri de, <varname>$userfile_size[0]</varname>, <filename>review.html</filename>'in dosya boyutunu içerir. Di&gbreve;erleri de ayn&inodot;d&inodot;r. </simpara> <simpara> <varname>$userfile['name'][0]</varname>, <varname>$userfile['tmp_name'][0]</varname>, <varname>$userfile['size'][0]</varname>, ve <varname>$userfile['type'][0]</varname> de tan&inodot;mlanm&inodot;&scedil;t&inodot;r. </simpara> </sect1> <sect1 id="features.file-upload.put-method"> <title>PUT Yönetmi Deste&gbreve;i</title> <para> PHP Netscape Composer ve W3C Amaya gibi programlar&inodot;n kulland&inodot;&gbreve;&inodot; HTTP PUT yöntemini de destekler. PUT i&scedil;lemi, bir dosya yükleme i&scedil;leminden daha basittir ve a&scedil;a&gbreve;&inodot;daki gibidir: <informalexample> <programlisting> PUT /path/filename.html HTTP/1.1 </programlisting> </informalexample> </para> <para> Bu &scedil;u demektir: dosyay&inodot; yükleyen, dosyay&inodot;, web düzeniniz içindeki /path/filename.html içine kaydetmek istemektedir. Tüm kulan&inodot;c&inodot;lar&inodot;n, web dizini içindeki herhangi bir dosyan&inodot;n üzerine yazmak Apache ve PHP için kesinlikle iyi bir fikir de&gbreve;ildir. Bu tür bir i&scedil;lemi kontrol alt&inodot;na almak için, web sunucunuza böyle bir i&scedil;lem için belirli bir PHP dosyas&inodot;n&inodot; kullanmas&inodot;n&inodot; söylemelisiniz. Apache'de bu i&scedil;lem <emphasis>Script</emphasis> direktifi ile yap&inodot;lmaktad&inodot;r. Bu direktif, Apache'nin konfigursasyon dosyas&inodot;nda herhangi bir yere konulabilir. Genellikle &lt;Directory&gt; blo&gbreve;unun veya &lt;Virtualhost&gt; blo&gbreve;unun içine konur. Bunun gibi bir sat&inodot;r i&scedil;inizi görecektir: <informalexample> <programlisting> Script PUT /put.php </programlisting> </informalexample> </para> <simpara> Bu sat&inodot;r, Apache'ye, tüm PUT istemlerini, ekledi&gbreve;imiz sat&inodot;rda bulunan put.php dosyas&inodot;na göndermesini söyler. Bu örnek, .php uzant&inodot;s&inodot;n&inodot;n çal&inodot;&scedil;&inodot;r oldu&gbreve;u ve PHP nin aktif oldu&gbreve;u varsay&inodot;larak verilmi&scedil;tir. </simpara> <simpara> put.php dosyan&inodot;zda, &scedil;öyle bir&scedil;ey yapabilirsiniz: </simpara> <para> <informalexample><programlisting role="php"> <![CDATA[ <?php copy($PHP_UPLOADED_FILE_NAME,$DOCUMENT_ROOT.$REQUEST_URI); ?> ]]> </programlisting></informalexample> </para> <simpara> Bu i&scedil;lem, dosyay&inodot;, i&scedil;elemi yapan ki&scedil;inin istedi&gbreve;i klasöre kopyalar. Bu kopyalama i&scedil;lemini gerçekle&scedil;tirmeden önce, baz&inodot; kontroler ve/veya giri&scedil; kontrolleri yapmak isteyebilirsiniz. &Idot;stek sonland&inodot;&gbreve;&inodot;nda, bu geçici dosya silinir. Dolay&inodot;s&inodot; ile i&scedil;lemi gerçekle&scedil;tiren dosyan&inodot;z, bu dosyay&inodot; ba&scedil;ka bir yere kopyalamal&inodot;d&inodot;r. Bu geçici klasördeki dosya ad&inodot; $PHP_PUT_FILENAME de&gbreve;i&scedil;kenindedir ve iste&gbreve;i gönderenin belirledi&gbreve;i dosya ad&inodot;n&inodot; $REQUEST_URI (Apache d&inodot;&scedil;&inodot;ndaki web sunucularda de&gbreve;i&scedil;ebilir) de&gbreve;i&scedil;keninde görebilirsiniz. Bu belirtilen dosya ad&inodot;, dosyay&inodot; gönderenin belirledi&gbreve;i dosya ad&inodot;d&inodot;r. Bu iste&gbreve;i gerçekle&scedil;tirmek zorunda de&gbreve;ilsinizdir. Örne&gbreve;in tüm dosyalar&inodot;, belirledi&gbreve;iniz bir klasöre kopyalabilirsiniz. </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 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 (#969339712) next »