PHP实现HTTP断点续传的方法

前端技术 2023/09/07 PHP

本文实例讲述了PHP实现HTTP断点续传的方法。分享给大家供大家参考。具体实现方法如下:

<?php
/**
 * PHP-HTTP断点续传实现
 * @param string $path: 文件所在路径
 * @param string $file: 文件名
 * @return void
 */
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);
}

希望本文所述对大家的php程序设计有所帮助。

本文地址:https://www.stayed.cn/item/19712

转载请注明出处。

本站部分内容来源于网络,如侵犯到您的权益,请 联系我

我的博客

人生若只如初见,何事秋风悲画扇。