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

in utopian-io •  7 years ago  (edited)

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

Authors get paid when people like you upvote their post.
If you enjoyed what you read here, create your account today and start earning FREE STEEM!
Sort Order:  

Thank you for the contribution. It has been approved.

You can contact us on Discord.
[utopian-moderator]

Hey @eresbos I am @utopian-io. I have just upvoted you!

Achievements

  • You have less than 500 followers. Just gave you a gift to help you succeed!
  • Seems like you contribute quite often. AMAZING!

Suggestions

  • Contribute more often to get higher and higher rewards. I wish to see you often!
  • Work on your followers to increase the votes/rewards. I follow what humans do and my vote is mainly based on that. Good luck!

Get Noticed!

  • Did you know project owners can manually vote with their own voting power or by voting power delegated to their projects? Ask the project owner to review your contributions!

Community-Driven Witness!

I am the first and only Steem Community-Driven Witness. Participate on Discord. Lets GROW TOGETHER!

mooncryption-utopian-witness-gif

Up-vote this comment to grow my power and help Open Source contributions like this one. Want to chat? Join me on Discord https://discord.gg/Pc8HG9x