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

View this thread on: d.buzz | hive.blog | peakd.com | ecency.com
·@eresbos·
0.000 HBD
php ile dosya indirme işlemini limitlendirme (turkish tutorial)
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](https://res.cloudinary.com/hpiynhbhq/image/upload/v1514855555/gtocghekqoxp9hsqbjaz.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](https://res.cloudinary.com/hpiynhbhq/image/upload/v1514852733/xybbrzuqtu33kn03kjbh.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](https://res.cloudinary.com/hpiynhbhq/image/upload/v1514853228/ajceimwhlmpu6630dya4.png)

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

![indirilecek_dosya.png](https://res.cloudinary.com/hpiynhbhq/image/upload/v1514853253/tes2nxfdsdl3cjlg3m8e.png)

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

![indirme_hizi.png](https://res.cloudinary.com/hpiynhbhq/image/upload/v1514853364/dbqp0whjxfyzwf6rjbrn.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](https://res.cloudinary.com/hpiynhbhq/image/upload/v1514853663/hp1cyubr11usfghexkim.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](https://res.cloudinary.com/hpiynhbhq/image/upload/v1514854168/hjgvznnh8xobx7jpku4d.png)

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

![gömme.png](https://res.cloudinary.com/hpiynhbhq/image/upload/v1514854349/vqg1szyqngcfrkr1duyc.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](https://res.cloudinary.com/hpiynhbhq/image/upload/v1514854524/v6qylorgdvtovabe9azy.png)

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

![dosya okuma.png](https://res.cloudinary.com/hpiynhbhq/image/upload/v1514854679/f9zf2oba20e05yb1wjim.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](https://res.cloudinary.com/hpiynhbhq/image/upload/v1514854845/gdetatljfd1mjdxqzcik.png)

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

![gömme.png](https://res.cloudinary.com/hpiynhbhq/image/upload/v1514854940/e04kubvxm3relyjm6rhu.png)

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

![sleep.png](https://res.cloudinary.com/hpiynhbhq/image/upload/v1514855004/lzocnyw00el7bwzeytof.png)

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

![kapatma.png](https://res.cloudinary.com/hpiynhbhq/image/upload/v1514855090/czfhxgyoru9b0b9bgmve.png)

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

![else.png](https://res.cloudinary.com/hpiynhbhq/image/upload/v1514855167/qmeywlnlqas8dbvufir0.png)

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

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

<br /><hr/><em>Posted on <a href="https://utopian.io/utopian-io/@eresbos/php-ile-dosya-indirme-islemini-limitlendirme-turkish-tutorial">Utopian.io -  Rewarding Open Source Contributors</a></em><hr/>
👍 , , , , , , , , , , , , , , , , , , , , , , , , , , , ,