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
    */
  • 相关阅读:
    C# tcp发送十六进制数据
    WPF中通过AForge实现USB摄像头拍照
    借鉴过的别人的帖子之C#篇
    C# 连续的语音识别
    C# NAudio 录音
    AS3 水波纹
    ARM多核心集群服务器
    RK3399Pro Android Rock-X 人工智能开发系列(2)
    智能化连锁门店解决方案
    RK3399Pro Android Rock-X 人工智能开发系列(1)
  • 原文地址:https://www.cnblogs.com/phpfensi/p/4333777.html
Copyright © 2011-2022 走看看