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
    */
  • 相关阅读:
    🍖名称空间与作用域
    🍖文件打开模式 "t"
    🍖函数参数
    【转】LINQ中的Aggregate语法
    【转】c#中string.trimstart() 和string.trimend() 的用法
    1094 和为k的连续区间(暴力)
    1095 Anigram单词
    1031 骨牌覆盖 (斐波拉契数列)
    最长公共子序列(模板 LCSL)
    1092 回文字符串(LCSL_DP)
  • 原文地址:https://www.cnblogs.com/phpfensi/p/4333777.html
Copyright © 2011-2022 走看看