2009-05-24 13 views
7

Normalde, ben sadece onları dosyayı indirmesine olanak tanıyan böyle bir şey kullanın:Bir indirme işleminin duraklatılmasına/devam ettirilmesine nasıl izin verebilirim? Bir kullanıcı tam yerini açıklamadan bir dosya indirmek için izin istediğinizde

header("Pragma: public"); 
header("Expires: 0"); 
header("Cache-Control: must-revalidate, post-check=0, pre-check=0"); 
header("Content-Type: application/octet-stream"); 
header("Content-Disposition: attachment; filename=\"" . $filename) . "\";"); 
header("Content-Transfer-Encoding: binary"); 
header("Content-Length: " . filesize($filename)); 
readfile("$filename"); 

Ama modern bir tarayıcı kullanıyorsanız veya diğer indirme istemci ve onlar indirme duraklatma ve bunu devam ettirmek için denemek böylece indir kırma ve temelde olmak için dosyayı gerektiren baştan başlıkları ve dosya içeriğini yeniden gönderecektir komut dosyası (onlar hala doğrulanmış ya da her neyse varsayarak) baştan redownloaded.

nasıl duraklatılmış telafi etmek benim programı etkinleştirebilirsiniz (ve sonuç olarak, devam) indirmeleri? Menzilli Eğer vb sonra dosyadaki doğru konuma etmeye

+0

için yapılan yorumlar altında php bazı örnek kod bulabilirsiniz

gerçekten bu işlevselliği ihtiyacınız var mı? Korumalı indirmeleriniz kullanıcı yüklemelerinden mi geliyor? Öyleyse, yükleme boyutunda sınırınız nedir? Onun 50MB veya daha az ise, bu işlevselliğe sahip olmamanın tamam olduğunu söyleyebilirim. Ya da tüm dosyaları iseniz, oluşturmak ve ortalama büyüklüğü onun muhtemelen gerekli değildir, aynı derecede küçüktür. hepsi çok büyük dosyalar iseniz Öte yandan, daha sonra sel dosyasının indirilmesini koruyan bir sel gibi dağıtmaya böyle bir şey yaptığını düşünebilir. Kullanıcıların torrent dosyalarını paylaşabildiği kadar güvenli değil - sadece düşünecek bir şey. –

+0

Bu andan itibaren, sadece belirli bir projede kullanmak için değil, bilgiyi nasıl arayacağımı soruyorum. Geçmişteki projelerde bu işlevselliği istedim ve muhtemelen gelecekte olacağım. Sadece cevabı bulmak için acelem yokken sormam gerektiğini düşündüm. –

cevap

10

Kullanım php yerleşik açmak için fopen dosya ve daha sonra (istek başlığında aralığına göre) doğru yere fseek ve fpassthru yerine kullanarak readfile ile kısmi dosya döndürür. Sen fread

+0

Henüz bu kodu test etmedim, ama tam da aradığım şey buydu, ben de bunu yanıt olarak kabul ediyorum. –

5

Sen, Range gibi istek başlıklarını okumak gerekir. Normalde bir web sunucusu bunu sizin için sıradan bir dosyada yapardı. Biraz karmaşık ama burada başlamak olabilir bir şey: kesiminde

http://forums.asp.net/t/1218116.aspx

http://www.notes411.com/dominosource/tips.nsf/0/480C4E3BE825F69D802571BC007D5AC9!opendocument

kodudur ikinci bağlantı için 12

+0

Bunlar harika bağlantılardır ... ancak bu örneklerde kodu anlamıyorum. Herhangi bir PHP merkezli öğretici veya benzerlerini biliyor musunuz? Google şu anda her zamanki yararlı bir özveri olmuyor ... –