Dosyaları Parçalama PHP hızlı / basit yöntem, size olamaz ya, mod-xsendfile
cURL gibi biraz daha profesyonel bir şey yararlanmak istemiyorsanız {[(2 )]} ya da bazı dedicated script.
$filename = $filePath.$filename;
$chunksize = 5 * (1024 * 1024); //5 MB (= 5 242 880 bytes) per one chunk of file.
if(file_exists($filename))
{
set_time_limit(300);
$size = intval(sprintf("%u", filesize($filename)));
header('Content-Type: application/octet-stream');
header('Content-Transfer-Encoding: binary');
header('Content-Length: '.$size);
header('Content-Disposition: attachment;filename="'.basename($filename).'"');
if($size > $chunksize)
{
$handle = fopen($filename, 'rb');
while (!feof($handle))
{
print(@fread($handle, $chunksize));
ob_flush();
flush();
}
fclose($handle);
}
else readfile($path);
exit;
}
else echo 'File "'.$filename.'" does not exist!';
Taşıdık richnetapps.com / NeedBee. readfile()
bile 1G
, bu indirilen dosya boyutu beş kat daha fazla olduğu için ayarlanmış izin verilen maksimum bellek sınırı ile, öldüğü 200 MB dosyaları üzerinde test edilmiştir.
BTW: Ben dosyaları >2GB
Ayrıca bu test, ama PHP sadece 2GB
dosyanın ilk yazmak başardı ve ardından bağlantıyı kırdı. Dosya ile ilgili fonksiyonlar (fopen, fread, fseek) sonuçta bir sınıra yani, INT kullanır 2GB
. Yukarıda sözü edilen çözümler (örneğin, mod-xsendfile
), bu durumda, tek seçenek olarak görünmektedir.
EDIT: Make yourself 100% dosya kaydedilir ki utf-8
. Bunu atlarsanız, indirilen dosyalar bozuk olacaktır. Bu çözümler kullandığı print
, tarayıcıya bir dosya yığın itmek, çünkü bu, bir. Em>