phpfensi

一个支持断点续传的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
*/

 

分类:

技术点:

相关文章:

  • 2021-09-03
  • 2021-06-26
  • 2021-10-17
  • 2022-01-06
  • 2021-07-27
  • 2021-09-19
  • 2021-11-20
  • 2021-09-10
猜你喜欢
  • 2021-04-22
  • 2021-11-18
  • 2021-11-18
  • 2021-10-05
  • 2021-08-01
  • 2021-07-27
  • 2021-04-05
相关资源
相似解决方案