Benim web barındırma artık yaklaşık 5 dakika çalışan herhangi bir süreci sonlandırır bir "süreç katil" vardır, bu yüzden benim indir komut o uzun süre çalıştıramazsınız.
Ben kullanıcı başlangıçta yüklemeyi iptal eder, sadece yakalamak için, birkaç saniye için fread-baskı kullanın ve sonra dosyanın geri kalanını dökümünün fpassthru kullanmayı düşündüm.
ob_end_clean();
$file = fopen($this->m_path,'rb'); // read binary
fseek($file, $startByte);
$cnt = 0;
while (!feof($file) && (!connection_aborted()) && ($bytesSent<$bytesToSend) )
{
$cnt++;
if($cnt > 25) // to simulate breaking the loop after a certain time has passed
break;
set_time_limit(0);
$buffer = fread($file, 32*1024);
print($buffer);
//flush();
$bytesSent += strlen($buffer);
}
flush(); // has no effect on fpassthru
// --- insert point for the code below --
if(!feof($file))
{
fpassthru($file);
}
fclose($file);
Sorun fpassthru bütün yükleme sırasında çalışan komut dosyası tutmasıdır. Ben hızlı çıkan komut sonuçları çıktı tamponlama, yorgun kullanarak ettik, ama indir (I 15 kB / s 30 MB bir dosya yolluyorum) yaklaşık 8 dakika sonra kesilmiş olur.
Ben yukarıdaki "insert noktada" aşağıdaki eklerseniz hızlı komut çıkış yapar ve indirme tamamlamak sağlar tek şey:
echo("X"); // or pretty much any string literal
flush();
Her zaman çalışır, ama (beklendiği gibi) dosya dersin bozuk olur.
Ben bunun yerine böyle bir şey takarsanız:
echo fread($file, 16);
flush();
o (fpassthru komut çıkmak için izin vermez) çalışmıyor.
Herşeyi denedim gibi hissediyor. Ben yorgun kapanış ve dosyayı yeniden açmayı, uyku, gömme birden çok kez çağrı. Ben bir dize baskı yaparken aniden işe neden bana küçük hiçbir anlamda kolaylaştırır.
PHP version 5.2.11 Apache 2.2.9
EDIT:
Ben yedek zaman temiz fread-eko ve çıkış ile dosyaları hizmet böylece 40 dakika için zaman aşımı süresini uzatmak için benim web barındırma almak kadar sona erdi. Ben nispeten küçük dosyalara hizmet ve sürdürme onların transferler kesti almak birkaç ziyaretçiler için desteklenir.
Ben de yapılan (ve reddedilen) ben. Htaccess istediği başlıklarını bir yönlendirme tabanlı bir çözüm, ama bu çözüm ben sorunu kullanılan bant genişliğini sayma vardı, çoğu için kısmi indirme izin vermemek için beni zorlardı.