新写PHP HTTP断点续传类文件代码

一个支持断点续传的PHP文件下载类文件,调用方法简单,类代码简洁,可记忆上次的下载的节点,实现累积下载,类名称download,类代码如下:

function download($path,$file) {
$real = $path.‘/‘.$file;
if(!file_exists($real)) {
    return false;
}
$size = filesize($real);
$size2 = $size-1;
$range = 0;
if(isset($_SERVER[‘HTTP_RANGE‘])) {
   header(‘HTTP /1.1 206 Partial Content‘);
   $range = str_replace(‘=‘,‘-‘,$_SERVER[‘HTTP_RANGE‘]);
   $range = explode(‘-‘,$range);
   $range = trim($range[1]);
   header(‘Content-Length:‘.$size);
   header(‘Content-Range: bytes ‘.$range.‘-‘.$size2.‘/‘.$size);
} else {
   header(‘Content-Length:‘.$size);
   header(‘Content-Range: bytes 0-‘.$size2.‘/‘.$size);
}
header(‘Accenpt-Ranges: bytes‘);
header(‘application/octet-stream‘);
header("Cache-control: public");
header("Pragma: public");
//解决在IE中下载时中文乱码问题
$ua = $_SERVER[‘HTTP_USER_AGENT‘];
if(preg_match(‘/MSIE/‘,$ua)) {
    $ie_filename = str_replace(‘+‘,‘%20‘,urlencode($file));
    header(‘Content-Dispositon:attachment;filename=‘.$ie_filename);
} else {
    header(‘Content-Dispositon:attachment;filename=‘.$file);
}
$fp = fopen($real,‘rb+‘);
fseek($fp,$range);
  while(!feof($fp)) {
     set_time_limit(0);
     print(fread($fp,1024));
     flush();
     ob_flush();
  }
  fclose($fp);
}

/**
  * 参数说明:
  * @param string $path: 文件路径
  * @param string $file: 文件名称
  * @return void
*/

 

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。