<?php
include_once $_SERVER['DOCUMENT_ROOT'] . '/include/shared-manual.inc';
$TOC = array();
$TOC_DEPRECATED = array();
$PARENTS = array();
include_once dirname(__FILE__) ."/toc/features.file-upload.inc";
$setup = array (
  'home' => 
  array (
    0 => 'index.php',
    1 => 'PHP Manual',
  ),
  'head' => 
  array (
    0 => 'UTF-8',
    1 => 'tr',
  ),
  'this' => 
  array (
    0 => 'features.file-upload.post-method.php',
    1 => 'POST y&ouml;ntemi ile karşıya dosya y&uuml;kleme',
    2 => 'POST y&ouml;ntemi ile karşıya dosya y&uuml;kleme',
  ),
  'up' => 
  array (
    0 => 'features.file-upload.php',
    1 => 'Karşıya dosya y&uuml;kleme',
  ),
  'prev' => 
  array (
    0 => 'features.file-upload.php',
    1 => 'Karşıya dosya y&uuml;kleme',
  ),
  'next' => 
  array (
    0 => 'features.file-upload.errors.php',
    1 => 'Hata İletilerinin A&ccedil;ıklamaları',
  ),
  'alternatives' => 
  array (
  ),
  'source' => 
  array (
    'lang' => 'tr',
    'path' => 'features/file-upload.xml',
  ),
  'history' => 
  array (
  ),
);
$setup["toc"] = $TOC;
$setup["toc_deprecated"] = $TOC_DEPRECATED;
$setup["parents"] = $PARENTS;
manual_setup($setup);

contributors($setup);

?>
<div id="features.file-upload.post-method" class="sect1">
   <h2 class="title">POST yöntemi ile karşıya dosya yükleme</h2>
   <p class="simpara">
    Bu özellik metin ve ikil dosyaları yükleme imkanı verir. PHP&#039;nin kimlik
    doğrulama ve dosya işletim işlevleri ile kimin karşıya dosya yükleme
    yetkisi olacağına ve yüklenen dosya ile ne yapılacağı hakkında tam
    denetime sahip olursunuz.
   </p>
   <p class="simpara">
    PHP, herhangi bir RFC 1867 uyumlu tarayıcıdan gelen dosya yüklemelerini
    alabilir.
   </p>

   <blockquote class="note"><p><strong class="note">Bilginize</strong>: 
    <strong>İlgili Yapılandırmalar</strong><br />
    <p class="para">
     Ayrıca <var class="filename">php.ini</var> içindeki
     <a href="ini.core.php#ini.file-uploads" class="link">file_uploads</a>,
     <a href="ini.core.php#ini.upload-max-filesize" class="link">upload_max_filesize</a>,
     <a href="ini.core.php#ini.upload-tmp-dir" class="link">upload_tmp_dir</a>,
     <a href="ini.core.php#ini.post-max-size" class="link">post_max_size</a> ve
     <a href="info.configuration.php#ini.max-input-time" class="link">max_input_time</a> yönergelerine
     bakınız.
    </p>
   </p></blockquote>

   <p class="para">
    PHP ayrıca <span class="productname">Netscape Composer</span> ve W3C&#039;nin
    <span class="productname">Amaya</span> istemcileri tarafından kullanılan
    PUT yöntemiyle dosya yüklemeleri de destekler. Ayrıntılı bilgi için
    <a href="features.file-upload.put-method.php" class="link">PUT Yöntemi
    Desteği</a>&#039;ne bakınız.
   </p>

   <p class="para">
    <div class="example" id="example-1">
     <p><strong>Örnek 1 - Karşıya Dosya Yükleme Formu</strong></p>
     <div class="example-contents"><p>
      Bir dosya yükleme ekranı aşağıdaki gibi özel bir form ile
      oluşturulabilir:
     </p></div>
     <div class="example-contents">
<div class="htmlcode"><pre class="htmlcode">&lt;!-- Veri kodlama türü, enctype, aşağıdaki gibi belirtilmek ZORUNDADIR --&gt;
&lt;form enctype=&quot;multipart/form-data&quot; action=&quot;__URL__&quot; method=&quot;POST&quot;&gt;
    &lt;!-- MAX_FILE_SIZE dosya giriş alanından önce bulunmak zorundadır --&gt;
    &lt;input type=&quot;hidden&quot; name=&quot;MAX_FILE_SIZE&quot; value=&quot;30000&quot; /&gt;
    &lt;!-- input elemanının adı $_FILES dizisinin içindeki ismi belirler --&gt;
    Bu dosyayı gönder: &lt;input name=&quot;kullanici_dosyasi&quot; type=&quot;file&quot; /&gt;
    &lt;input type=&quot;submit&quot; value=&quot;Dosyayı Gönder&quot; /&gt;
&lt;/form&gt;</pre>
</div>
     </div>

     <div class="example-contents"><p>
      Yukarıdaki örnekteki <code class="literal">__URL__</code> bir PHP dosyası ile
      değiştirilmelidir.
     </p></div>
     <div class="example-contents"><p>
      <code class="literal">MAX_FILE_SIZE</code> gizli alanı (bayt cinsinden) dosya
      giriş alanından önce bulunmak zorundadır ve değeri PHP tarafından kabul
      edilecek azami dosya boyutudur. Bu form elemanı azami-büyüklüğü aşan bir
      dosyanın gönderilmesini baştan engelleyeceği için büyük dosyaları boşuna
      beklememek açısından kullanıcılara zaman kazandırır; bu nedenle her
      zaman kullanılmalıdır. Ancak unutmayın: Bu ayarı tarayıcı tarafında
      devre dışı bırakmak oldukça kolaydır, bu nedenle daha büyük boyuttaki
      dosyaların bu özellik tarafından engelleneceğine güvenmeyiniz. Bunula
      birlikte, PHP&#039;nin azami-büyüklük ayarı devre dışı bırakılamaz.
     </p></div>
    </div>
   </p>

   <blockquote class="note"><p><strong class="note">Bilginize</strong>: 
    <p class="para">
     Dosya yükleme formunuzun <code class="literal">enctype=&quot;multipart/form-data&quot;</code>
     özniteliğine sahip olduğundan emin olun, aksi takdirde dosya yükleme
     çalışmaz.
    </p>
   </p></blockquote>

   <p class="para">
    Küresel <var class="varname"><a href="reserved.variables.files.php" class="classname">$_FILES</a></var> karşıdan yüklenen tüm dosyaların
    bilgisini içerir. Örnek formdaki <var class="varname"><a href="reserved.variables.files.php" class="classname">$_FILES</a></var> içeriği aşağıda
    verilmiştir. Yukarıdaki örneğe göre yüklenen dosya adı
    <em>kullanici_dosyasi</em>&#039;dır. Bu herhangi bir isim olabilir.
    <dl>
     
      <dt><var class="varname"><a href="reserved.variables.files.php" class="classname">$_FILES['kullanici_dosyasi']['name']</a></var></dt>
      <dd>
       <p class="para">
        İstemci makinasındaki asıl dosya adıdır.
       </p>
      </dd>
     
     
      <dt><var class="varname"><a href="reserved.variables.files.php" class="classname">$_FILES['kullanici_dosyasi']['type']</a></var></dt>
      <dd>
       <p class="para">
        Eğer tarayıcı bu bilgiyi sağladıysa dosyanın MIME türüdür.
        Örneğin, <code class="literal">&quot;image/gif&quot;</code>. Bu MIME türü PHP tarafında
        denetlenmez; bu bakımdan bu değeri dikkate almayın.
       </p>
      </dd>
     
     
      <dt><var class="varname"><a href="reserved.variables.files.php" class="classname">$_FILES['kullanici_dosyasi']['size']</a></var></dt>
      <dd>
       <p class="para">
        Yüklenen dosyanın bayt cinsinden boyutudur.
       </p>
      </dd>
     
     
      <dt><var class="varname"><a href="reserved.variables.files.php" class="classname">$_FILES['kullanici_dosyasi']['tmp_name']</a></var></dt>
      <dd>
       <p class="para">
        Yüklenen dosyanın sunucuda saklandığı sıradaki geçici dosya adıdır.
       </p>
      </dd>
     
     
      <dt><var class="varname"><a href="reserved.variables.files.php" class="classname">$_FILES['kullanici_dosyasi']['error']</a></var></dt>
      <dd>
       <p class="para">
        Bu dosya yüklemesiyle ilişkili
        <a href="features.file-upload.errors.php" class="link">hata kodu</a>dur.
       </p>
      </dd>
     
     
      <dt><var class="varname"><a href="reserved.variables.files.php" class="classname">$_FILES['kullanici_dosyasi']['full_path']</a></var></dt>
      <dd>
       <p class="para">
        Tam dosya yolu (full_path) tarayıcı tarafından gönderilir. Bu yol
        her zaman gerçek dizin yapısını içermediğinden güvenilmemelidir.
        PHP 8.1.0 ve sonrasında kullanılabilir.
       </p>
      </dd>
     
    </dl>
   </p>

   <p class="para">
    <var class="filename">php.ini</var> içindeki
    <a href="ini.core.php#ini.upload-tmp-dir" class="link">upload_tmp_dir</a> yönergesi ile
    başka bir yer belirtilmediyse, dosyalar, öntanımlı olarak sunucunun
    öntanımlı geçici dizininde saklanır. Sunucunun öntanımlı geçici dizini
    PHP&#039;nin içinde çalıştığı ortamdaki <var class="envar">TMPDIR</var> ortam değişkenine
    başka bir değer vererek değiştirilebilir. Buna PHP betiği içinden
    <span class="function"><a href="function.putenv.php" class="function">putenv()</a></span> işlevi ile değer verirseniz çalışmaz. Bu ortam
    değişkeni diğer işlemlerin yüklenen dosyalar üzerinde çalıştığından emin
    olmak için de kullanılabilir.
    <div class="example" id="example-2">
     <p><strong>Örnek 2 - Dosya yüklemelerinin doğrulanması</strong></p>
     <div class="example-contents"><p>
      Daha fazla bilgi için <span class="function"><a href="function.is-uploaded-file.php" class="function">is_uploaded_file()</a></span> ve
      <span class="function"><a href="function.move-uploaded-file.php" class="function">move_uploaded_file()</a></span> işlev girdilerine de bakınız.
      Aşağıdaki örnek bir formdan gelen dosya yükleme isteğini işleyecektir.
     </p></div>
     <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br />$dizin </span><span style="color: #007700">= </span><span style="color: #DD0000">'/var/siteler/uploads/'</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">$yuklenecek_dosya </span><span style="color: #007700">= </span><span style="color: #0000BB">$dizin </span><span style="color: #007700">. </span><span style="color: #0000BB">basename</span><span style="color: #007700">(</span><span style="color: #0000BB">$_FILES</span><span style="color: #007700">[</span><span style="color: #DD0000">'kulldosyasi'</span><span style="color: #007700">][</span><span style="color: #DD0000">'name'</span><span style="color: #007700">]);<br /><br />echo </span><span style="color: #DD0000">'&lt;pre&gt;'</span><span style="color: #007700">;<br />if (</span><span style="color: #0000BB">move_uploaded_file</span><span style="color: #007700">(</span><span style="color: #0000BB">$_FILES</span><span style="color: #007700">[</span><span style="color: #DD0000">'kulldosyasi'</span><span style="color: #007700">][</span><span style="color: #DD0000">'tmp_name'</span><span style="color: #007700">], </span><span style="color: #0000BB">$yuklenecek_dosya</span><span style="color: #007700">))<br />{<br />    echo </span><span style="color: #DD0000">"Dosya geçerli ve başarıyla yüklendi.\n"</span><span style="color: #007700">;<br />} else {<br />    echo </span><span style="color: #DD0000">"Olası dosya yükleme saldırısı!\n"</span><span style="color: #007700">;<br />}<br /><br />echo </span><span style="color: #DD0000">'Diğer hata ayıklama bilgileri:'</span><span style="color: #007700">;<br /></span><span style="color: #0000BB">print_r</span><span style="color: #007700">(</span><span style="color: #0000BB">$_FILES</span><span style="color: #007700">);<br /><br />print </span><span style="color: #DD0000">"&lt;/pre&gt;"</span><span style="color: #007700">;<br /><br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
     </div>

    </div>
   </p>
   <p class="simpara">
    Yüklenen dosyayı alan PHP betiği yüklenen dosya ile ne yapılacağını
    belirlemek için gerekli mantığı uygulamalıdır. Örneğin,
    <var class="varname"><a href="reserved.variables.files.php" class="classname">$_FILES['kullanici_dosyasi']['size']</a></var> değişkenini çok
    küçük ve büyük dosyaları engellemek için kullanabilirsiniz.
    <var class="varname"><a href="reserved.variables.files.php" class="classname">$_FILES['kullanici_dosyasi']['type']</a></var> değişkenini
    belirli türlere uymayan dosyaları engellemek için kullanabilirsiniz,
    fakat bunu sadece birincil denetimlerde kullanın, çünkü bu değer tamamen
    istemci kontrolündedir ve PHP tarafında denetlenmez. Ayrıca <var class="varname"><a href="reserved.variables.files.php" class="classname">$_FILES['kullanici_dosyasi']['error']</a></var>
    kullanabileceği gibi mantığınızı da
    <a href="features.file-upload.errors.php" class="link">hata kodları</a>na göre
    planlayabilirsiniz. Her şartta dosyayı ya geçici dizinden silmeli ya da
    başka bir yere taşımalısınız.
   </p>
   <p class="simpara">
    Eğer formunuzda yüklemek için bir dosya seçilmediyse, PHP
    <var class="varname"><a href="reserved.variables.files.php" class="classname">$_FILES['kullanici_dosyasi']['size']</a></var> değerini 0 ve
    <var class="varname"><a href="reserved.variables.files.php" class="classname">$_FILES['kullanici_dosyasi']['tmp_name']</a></var> değerini boş
    döndürür.
   </p>
   <p class="simpara">
    İstemin sonunda dosya başka bir yere taşınmadı veya adı değiştirilmediyse
    geçici dizinden silinir.
   </p>
    <div class="example" id="example-3">
     <p><strong>Örnek 3 - Dosya dizisi yükleme</strong></p>
     <div class="example-contents"><p>
      PHP <a href="faq.html.php#faq.html.arrays" class="link">HTML dizisi özelliği</a>ni
      dosyalar için de destekler.
     </p></div>
     <div class="example-contents">
<div class="htmlcode"><pre class="htmlcode">&lt;form action=&quot;&quot; method=&quot;post&quot; enctype=&quot;multipart/form-data&quot;&gt;
&lt;p&gt;Resimler:
&lt;input type=&quot;file&quot; name=&quot;resimler[]&quot; /&gt;
&lt;input type=&quot;file&quot; name=&quot;resimler[]&quot; /&gt;
&lt;input type=&quot;file&quot; name=&quot;resimler[]&quot; /&gt;
&lt;input type=&quot;submit&quot; value=&quot;Gönder&quot; /&gt;
&lt;/p&gt;
&lt;/form&gt;</pre>
</div>
     </div>

     <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br /></span><span style="color: #007700">foreach (</span><span style="color: #0000BB">$_FILES</span><span style="color: #007700">[</span><span style="color: #DD0000">"resimler"</span><span style="color: #007700">][</span><span style="color: #DD0000">"error"</span><span style="color: #007700">] as </span><span style="color: #0000BB">$anahtar </span><span style="color: #007700">=&gt; </span><span style="color: #0000BB">$hata</span><span style="color: #007700">) {<br />    if (</span><span style="color: #0000BB">$hata </span><span style="color: #007700">== </span><span style="color: #0000BB">UPLOAD_ERR_OK</span><span style="color: #007700">) {<br />        </span><span style="color: #0000BB">$tmp_name </span><span style="color: #007700">= </span><span style="color: #0000BB">$_FILES</span><span style="color: #007700">[</span><span style="color: #DD0000">"resimler"</span><span style="color: #007700">][</span><span style="color: #DD0000">"tmp_name"</span><span style="color: #007700">][</span><span style="color: #0000BB">$anahtar</span><span style="color: #007700">];<br />        </span><span style="color: #0000BB">$name </span><span style="color: #007700">= </span><span style="color: #0000BB">$_FILES</span><span style="color: #007700">[</span><span style="color: #DD0000">"resimler"</span><span style="color: #007700">][</span><span style="color: #DD0000">"name"</span><span style="color: #007700">][</span><span style="color: #0000BB">$anahtar</span><span style="color: #007700">];<br />        </span><span style="color: #FF8000">// basename() dosya sisteminin geçiş saldırılarını engelleyebilir;<br />        // dosya adının daha fazla doğrulanması/temizliği uygun olabilir<br />        </span><span style="color: #0000BB">$name </span><span style="color: #007700">= </span><span style="color: #0000BB">basename</span><span style="color: #007700">(</span><span style="color: #0000BB">$_FILES</span><span style="color: #007700">[</span><span style="color: #DD0000">"resimler"</span><span style="color: #007700">][</span><span style="color: #DD0000">"name"</span><span style="color: #007700">][</span><span style="color: #0000BB">$anahtar</span><span style="color: #007700">]);<br />        </span><span style="color: #0000BB">move_uploaded_file</span><span style="color: #007700">(</span><span style="color: #0000BB">$tmp_name</span><span style="color: #007700">, </span><span style="color: #DD0000">"data/</span><span style="color: #0000BB">$name</span><span style="color: #DD0000">"</span><span style="color: #007700">);<br />    }<br />}<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
     </div>

    </div>
   <p class="para">
    Dosya yükleme ilerleme çubuğu
    <a href="session.upload-progress.php" class="link">Dosya Yüklemeyi İzleme</a>
    seçeneği kullanılarak gerçeklenebilir.
   </p>
  </div><?php manual_footer($setup); ?>