PHP indirme soru

3 Cevap php

Sitemde, kullanıcılar benim sunucu üzerinden kendilerine indirme işlemini giriş dosyalarına bağlantılar ve akarsu yapabilirsiniz. Ben bu gibi bir sistem kullanmak:

header('Cache-control: private');
header('Content-Type: application/octet-stream'); 
header('Content-Length: ' . $r[2]);
header('Content-Disposition: filename=' . $theName);

flush();

$file = fopen($fileName, "r");
while(!feof($file))
{
    print fread($file, 10240);  
    flush();
    sleep(1);
}
fclose($fileName);

Düşünce benim kullanıcıların indirme oldukça yavaş (600kb'a / s) gidin olduğunu. Onlar on kat kendi internet bağlantısı üzerinden maxxing gerekir, böylece bu barındırılan sunucu 1 Gbit port üzerinde.

Bu tür bir şey yapmak için daha iyi bir yolu olup olmadığını merak ediyorum, belki de belki de CURL? Ben cURL ile fazla deneyimim yok ama ben herhangi bir geri bildirim takdir ediyorum.

Teşekkürler.

3 Cevap

Kullan readfile.

Eğer yaklaşım ısrar olsaydı, o zaman floş ve uyku olmadan, bu şekilde çok daha verimli olacaktır:

while(!feof($file)) {
   print fread($file, 10240);  
}

İşte sebebi:

  • flush () kullanarak Eğer işleyen, normal tamponlar önlemek ve
  • uyku (1) kullanarak etkili bir 1 saniye her 10 BYİH duraklayan tarafından aktarım hızlarını azaltmak.

Ben ne senin burada yapmaya çalışıyor .. bu döngü neden ihtiyaç görmüyorum ve özel () .. sadece readfile kullanmak yerine veya bu döngü böyle bir şey gerektiğini size uykuya neden ihtiyaç görmüyorum gerçekten emin değilim, o olurdu çok etkili

Ayrıca nasıl kıvırmak size yardımcı olacak sizce?

O @ Sabeen Malik olduğuna dikkat çeken bir saniyelik uyku () değilse, bunun nedeni veya veri getiriliyor olan web sağlayıcı (mod_throttle veya mod_bandwidth kullanarak örneğin) web sağlayıcınız tarafından dayatılan bir sunucu tarafı kısıtlaması muhtemeldir.