php ile dosya indirme işlemini limitlendirme (turkish tutorial)

Words
220
Reading
1 min
Listen
Play
9y

English
Hello to everyone my name is eresbos,

  • How to create a limit file downloading with php?

Türkçe

Merhaba arkadaşlar ben eresbos.Bugün sizlere php ile dosya indirme işlemlerinde indirme hızı limiti nasıl konulur onu göstereceğim.

  • Kodlarımız ;
<?php

$yerel_dosya = "deneme.zip";
$indirilecek_dosya = "indirilendosya.zip";

$indirme_hizi = 30;

if(file_exists($yerel_dosya) && is_file($yerel_dosya)) {

    header("Content-Type: application/octet-stream");
    header("Content-Length: ".filesize($yerel_dosya));
    header("Content-Disposition: attachment; filename=" .$indirilecek_dosya);

    flush();

    $dosya = fopen($yerel_dosya, "r");
    while(!feof($dosya)) {

        print fread($dosya, round($indirme_hizi * 1024) );
        flush();
        sleep(1);

    }


    fclose($dosya);

}else {

    echo 'Dosya mevcut degil';

}
?>

kodlar.png

1- Projemiz için bir tane dosyaya ihtiyacımız var ben 4.36 mb boyutunda deneme.zip olarak oluşturdum ve localhosta attım.Sizde istediğiniz boyutta ve istediğiniz isimde dosya oluşturup localhosta atabilirsiniz.

dosya.png

2- Değişkenlerimizi tanımlayalım;

  • $yerel_dosya = "deneme.zip" değişkeni localhostta bulunan dosyamızı tanıtmaya yarıyor.

yerel_dosya.png

  • $indirilecek_dosya = "indirilendosya.zip" dosyamızın indirme işlemi tamamlandığınca alacağı ismi tanıtmamızı sağlıyor.

indirilecek_dosya.png

  • $indirme_hizi = 30; indirme limitimizi belirlememizi sağlıyor.Yani saniyede maksimum 30 kilobyte indirmemizi sağlayacak.

indirme_hizi.png

3- Dosya kontrolümüzü yapıyoruz.'Eğer dosyamız varsa ve bu klasör değilse' şeklinde koşulumuzu yazıyoruz.

if(file_exists($yerel_dosya) && is_file($yerel_dosya)) {

dosya kontrolu.png

4- İndirme işlemini gerçekleştirmek için;

  • header("Content-Type: application/octet-stream"); burada indirilecek dosyamızın tipini zip olarak belirliyoruz.
  • header("Content-Length: ".filesize($yerel_dosya)); burada indirelecek dosyamızın boyutunu belirliyoruz.
  • header("Content-Disposition: attachment; filename=" .$indirilecek_dosya); burada indirme işlemimizi başlatmak ve indirirken hangi ismi kullanacağımızı belirlemek için yeni bir header yazıyoruz.
    header("Content-Type: application/octet-stream");
    header("Content-Length: ".filesize($yerel_dosya));
    header("Content-Disposition: attachment; filename=" .$indirilecek_dosya);

headerlar.png

5- flush(); tarayıcıya gömme işlemimizi yapıyoruz.

gömme.png

6- $dosya = fopen($yerel_dosya, "r"); dosyamızı açıp parça parça okutma işlemini gerçekleştiriyoruz.

dosya açma.png

7- while(!feof($dosya)) { while döngümüzü kuruyoruz, dosyanın sonuna kadar okunup okunmadığını kontrol ediyoruz.

dosya okuma.png

8- print fread($dosya, round($indirme_hizi * 1024) ); dosyamızı okuttuktan sonra 1024 ile çarpıp kilobyte değerini ekrana yazdırıyoruz.

xxx.png

9- Tekrar flush(); methoduyla tarayıcımıza gömüyoruz.

gömme.png

10- sleep(1); sleep ile 1 saniye bekleme süresi koyuyoruz.

sleep.png

11- fclose($dosya); burada indirme işlemini tamamladıktan sonra fclose ile açtığımız dosyayı kapatıyoruz.

kapatma.png

12- }else { eğer üçüncü adımda yazdığımız koşul sağlanmıyorsa,

else.png

13- echo 'Dosya mevcut degil'; ekrana dosya mevcut değil sonucunu bastırıyoruz.

Github link : https://github.com/php/php-src



Posted on Utopian.io - Rewarding Open Source Contributors

php ile dosya indirme işlemini limitlendirme (turkish tutorial) | Ecency