PHP ile Dosya İndirme

Merhaba,
Php ile dosya indirme işleminden bahsedeceğim. Bir iş için lazım oldu.

Senaryomuz şöyle olsun.

Kullanıcılarımıza kendi sayfalarından bir dosya upload işlemi yaptırdığımızı varsayalım. Bu upload işleminde de .zip ya da .rar dosyaları yükleyebilsinler.

Daha sonra admin kişisi ise kullanıcıların yükledikleri dosyaları indirebilsin. İçeriklerine bakabilsin. Tabi dilersek kullanıcılarda bakabilirler.

Öncelikle html formumuz şöyle olsun.

 <form action=''  method='post' class = 'dosyaIndirForm'>

   <input type='hidden' name='dosyaIndir' value='1'>
   <input type='hidden' name='dosyaId' value='<?php echo $dosyaId; ?>'>

   <button type='submit'>İndir</button>

</form>

Yukarıdaki input alanlarından da anlaşılabileceği üzere, iki tane hidden değerimiz var.

Php kısmında ise şöyle bir şey yapsak işimiz çözülür diyorum.

// Sayfanın en başına ekliyoruz. 
ob_start();

if ( isset($_POST["dosyaId"]) && isset($_POST["dosyaIndir"] ) ) {

   // Post edilen dosya id değerini alıyoruz. 
   $dosyaId= intval(htmlspecialchars(strip_tags(trim($_POST["dosyaId"]))));

   // Böyle bir dosya var mı? Kontrol edelim. 
   // Daima en son yüklediği dosyayı alacağız. Siz kendiniz burayı değiştirebilirsiniz. 
   $varmi= $db->prepare("SELECT * FROM uploads WHERE dosya_id = ? ORDER BY id DESC LIMIT 1");
   $varmi->execute([$dosyaId]);

   // Satır sayısı
   $dosyaRows = $varmi->rowCount();

   // Böyle bir satır var ise
   if ( $dosyaRows ) {

    // O satırın bilgilerini alalım. 
    $satir = $varmi->fetch(PDO::FETCH_ASSOC);

    // Dosya yolunu alalım.
    $dosya_yolu = trim($satir["dosya_yolu"]);
    
    // Dosya bizim sistemimizde ( uploads dizininde mesela ) mevcut ise
    if ( file_exists ( $dosya_yolu ) ) {

       header($_SERVER['SERVER_PROTOCOL'].' 200 OK');
       header("Content-Type: application/zip");
       header("Content-Transfer-Encoding: Binary");
       header("Content-Length: ".filesize($satir["dosya_yolu"]));
       header("Content-Disposition: attachment; filename=\"".basename($dosya_yolu)."\"");
       readfile($dosya_yolu);
       exit;
 
    }else {
 
      // Böyle bir dosya mevcut değil
      die("Dosya yok");

    }

}

 

Ben bu şekilde hem .rar hem de .zip uzantalı olarak upload edilmiş dosyaları indirebildim.

Belki size de bir faydası olur.

 

Evet, hepsi bu kadar.

Kolay gelsin..

 

3452 Görüntülenme

Yorum Yap