FedY@
Новичок
Download + докачка = "битому" файлу
Есть функция - она качает только видео файлы на данный момент... если скачиваем через простой ИЕ файлы больше 600 мб обрываются... а если работать с докачивальщиком - то файлы получаются битые! Битые не в размере, а в том что фильм например не запускается или например идёт не 1час40мин, а 30мин ... в чём проблема?
Есть функция - она качает только видео файлы на данный момент... если скачиваем через простой ИЕ файлы больше 600 мб обрываются... а если работать с докачивальщиком - то файлы получаются битые! Битые не в размере, а в том что фильм например не запускается или например идёт не 1час40мин, а 30мин ... в чём проблема?
PHP:
function send_file_to_download($path,$name = NULL)
{
$filename = basename($path);
$ext = substr($filename, strlen($filename)-3);
switch($ext){
case "mp2":
case "mpa":
case "mpe":
case "mpeg":
case "mpg":
case "mpv2":
case "mp2":
$mime_type="video/mpeg";
break;
case "mov":
case "qt":
$mime_type="video/quicktime";
break;
case "lsf":
case "lsx":
$mime_type="video/x-la-asf";
break;
case "asf":
case "asr":
case "asx":
$mime_type="video/x-ms-asf";
break;
case "avi":
$mime_type="video/x-msvideo";
break;
default:
$mime_type="application/octet-stream";
}
$fp = fopen($path,'rb');
if (!$fp) {return FALSE;}
ob_end_clean();
ob_implicit_flush(1);
$s = $size = get_ftpfile_size($path);
$start = 0;
if (isset($_SERVER['HTTP_RANGE']))
{
header('HTTP/1.1 206 Partial Content');
preg_match('~^bytes=(\d+)?\-(\d+)?$~',$_SERVER['HTTP_RANGE'],$m);
if (isset($m[1])) {$start = $m[1]; fseek($fp,$m[1]); $s -= $m[1];}
if (isset($m[2])) {$s -= $m[2];}
}
header('Content-Disposition: attachment; filename='.($name !== NULL?$name:basename($path)));
header('Last-Modified: '.date('D, d M Y H:i:s T',filemtime($path)));
header('Accept-Ranges: bytes');
header('Content-Length: '.$s);
header('Content-Range: bytes '.$start.'-'.$s.'/'.$size);
header('Content-type: '.$mime_type);
$g = 0;
while (!feof($fp) and $fp)
{
$buf = fread($fp,1024*2);
$g += strlen($buf);
if ($g > $s) {$v = $g-$s; echo substr($buf,0,-1*$v); break;}
else {echo $buf;}
}
}