zoukankan      html  css  js  c++  java
  • 新写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
    */
  • 相关阅读:
    JQ trigger函数无法触发a标签的两种解决方法
    Normalize.css
    wow.js中各种特效对应的类名
    利用伪元素:after清除浮动
    单词超出隐藏显示省略号(单行或多行)并设置是否将单词打断
    利用伪元素和css3实现鼠标移入下划线向两边展开效果
    css3 兼容各个浏览器
    html 初始化
    将博客搬至CSDN
    Linux配置问题
  • 原文地址:https://www.cnblogs.com/phpfensi/p/4333777.html
Copyright © 2011-2022 走看看