分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > 前端开发

php断点续传之文件上传与文件下载

发布时间:2023-11-01 15:52责任编辑:赖小花关键词:文件上传

下载:

<?php/** php下载类,支持断点续传* ??Date: ??2013-06-30* ??Author: fdipzone* ??Ver: ???1.0** ??Func:* ??public ?download: 下载文件* ??public ?setSpeed: 设置下载速度* ??private getRange: 获取header中Range*/class FileDownload{ // class start ???private $_speed = 512; ??// 下载速度 ???/** 下载 ???* @param String ?$file ??要下载的文件路径 ???* @param String ?$name ??文件名称,为空则与下载的文件名称一样 ???* @param boolean $reload 是否开启断点续传 ???*/ ???public function download($file, $name=‘‘, $reload=false){ ???????if(file_exists($file)){ ???????????if($name==‘‘){ ???????????????$name = basename($file); ???????????} ???????????$fp = fopen($file, ‘rb‘); ???????????$file_size = filesize($file); ???????????$ranges = $this->getRange($file_size); ???????????header(‘cache-control:public‘); ???????????header(‘content-type:application/octet-stream‘); ???????????header(‘content-disposition:attachment; filename=‘.$name); ???????????if($reload && $ranges!=null){ // 使用续传 ???????????????header(‘HTTP/1.1 206 Partial Content‘); ???????????????header(‘Accept-Ranges:bytes‘); ???????????????????????????????// 剩余长度 ???????????????header(sprintf(‘content-length:%u‘,$ranges[‘end‘]-$ranges[‘start‘])); ???????????????????????????????// range信息 ???????????????header(sprintf(‘content-range:bytes %s-%s/%s‘, $ranges[‘start‘], $ranges[‘end‘], $file_size)); ???????????????????????????????// fp指针跳到断点位置 ???????????????fseek($fp, sprintf(‘%u‘, $ranges[‘start‘])); ???????????}else{ ???????????????header(‘HTTP/1.1 200 OK‘); ???????????????header(‘content-length:‘.$file_size); ???????????} ???????????while(!feof($fp)){ ???????????????echo fread($fp, round($this->_speed*1024,0)); ???????????????ob_flush(); ???????????????//sleep(1); // 用于测试,减慢下载速度 ???????????} ???????????($fp!=null) && fclose($fp); ???????}else{ ???????????return ‘‘; ???????} ???} ???/** 设置下载速度 ???* @param int $speed ???*/ ???public function setSpeed($speed){ ???????if(is_numeric($speed) && $speed>16 && $speed<4096){ ???????????$this->_speed = $speed; ???????} ???} ???/** 获取header range信息 ???* @param ?int ??$file_size 文件大小 ???* @return Array ???*/ ???private function getRange($file_size){ ???????if(isset($_SERVER[‘HTTP_RANGE‘]) && !empty($_SERVER[‘HTTP_RANGE‘])){ ???????????$range = $_SERVER[‘HTTP_RANGE‘]; ???????????$range = preg_replace(‘/[\s|,].*/‘, ‘‘, $range); ???????????$range = explode(‘-‘, substr($range, 6)); ???????????if(count($range)<2){ ???????????????$range[1] = $file_size; ???????????} ???????????$range = array_combine(array(‘start‘,‘end‘), $range); ???????????if(empty($range[‘start‘])){ ???????????????$range[‘start‘] = 0; ???????????} ???????????if(empty($range[‘end‘])){ ???????????????$range[‘end‘] = $file_size; ???????????} ???????????return $range; ???????} ???????return null; ???}} // class end?>

php断点续传之文件上传与文件下载

原文地址:https://www.cnblogs.com/lichihua/p/10802085.html

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved