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

in #utopian-io4 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

Sort:  

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