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