您正在使用 IPV4 [44.200.27.215] 访问本站,您本次已经查看了 1 页
用户名: 密 码: 验证码:     用QQ登录本站
首页 软件 编程 笑话 知识 公告 台风 日历 计算器
悟空收录网       [公益]保护绿色环境,构建和谐社会      

【腾讯云】 爆款2核2G3M云服务器首年 61元,叠加红包再享折上折      
[公益] 地球是我家,绿化靠大家      
2024年 劳动节 009
2024年 端午节 049
2025年 元 旦 254
2025年 春 节 282
综合数码金融娱乐服务报刊政府机构 推荐 排名 今日 申请 友情  
您现在的位置:首页 >> PHP >> 内容
本类新增
本类热门
php实现断点续传大文件示例代码
内容摘要: /**php下载类,支持断点续传*download:下载文件*setSpeed:设置下载速度*getRange:获取header中Range*/classFileDownload{/**下载*@paramString$file要下载的文件路径*@paramString$name文件名称,为空则与下载的文件名称一样*@paramboolean$reload是否......
/**php下载类,支持断点续传

*download:下载文件

*setSpeed:设置下载速度

*getRange:获取header中Range

*/

classFileDownload{

/**下载

*@paramString$file要下载的文件路径

*@paramString$name文件名称,为空则与下载的文件名称一样

*@paramboolean$reload是否开启断点续传

*/

publicfunctiondownload($file,$name='',$reload=false){

$fp=@fopen($file,'rb');

if($fp){

if($name==''){

$name=basename($file);

}

$header_array=get_headers($file,true);

//var_dump($header_array);die;

//下载本地文件,获取文件大小

if(!$header_array){

$file_size=filesize($file);

}else{

$file_size=$header_array['Content-Length'];

}

$ranges=$this->getRange($file_size);

$ua=$_SERVER["HTTP_USER_AGENT"];//判断是什么类型浏览器

header('cache-control:public');

header('content-type:application/octet-stream');

$encoded_filename=urlencode($name);

$encoded_filename=str_replace("+","%20",$encoded_filename);

//解决下载文件名乱码

if(preg_match("/MSIE/",$ua)||preg_match("/Trident/",$ua)){

header('Content-Disposition:attachment;filename="'.$encoded_filename.'"');

}elseif(preg_match("/Firefox/",$ua)){

header('Content-Disposition:attachment;filename*="utf8\'\''.$name.'"');

}elseif(preg_match("/Chrome/",$ua)){

header('Content-Disposition:attachment;filename="'.$encoded_filename.'"');

}else{

header('Content-Disposition:attachment;filename="'.$name.'"');

}

//header('Content-Disposition:attachment;filename="'.$name.'"');

if($reload&&$ranges!=null){//使用续传

header('HTTP/1.1206PartialContent');

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));

//file_put_contents('test.log',sprintf('content-length:%u',$ranges['end']-$ranges['start']),FILE_APPEND);

//fp指针跳到断点位置

fseek($fp,sprintf('%u',$ranges['start']));

}else{

file_put_contents('test.log','2222',FILE_APPEND);

header('HTTP/1.1200OK');

header('content-length:'.$file_size);

}

while(!feof($fp)){

//echofread($fp,round($this->_speed*1024,0));

//echofread($fp,$file_size);

echofread($fp,4096);

ob_flush();

}

($fp!=null)&&fclose($fp);

}else{

return'';

}

}

/**设置下载速度

*@paramint$speed

*/

publicfunctionsetSpeed($speed){

if(is_numeric($speed)&&$speed>16&&$speed<4096){

$this->_speed=$speed;

}

}

/**获取headerrange信息

*@paramint$file_size文件大小

*@returnArray

*/

privatefunctiongetRange($file_size){

//file_put_contents('range.log',json_encode($_SERVER),FILE_APPEND);

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;

}

returnnull;

}

}

$obj=newFileDownload();

$obj->download('http://down.golaravel.com/laravel/laravel-master.zip','',true);

版权声明:本内容来源于网络,如有侵犯您的版权,请联系站长,本站收到您的信息后将及时处理。
上一篇:PHP获取文件扩展名(后缀)

 

下一篇:PHP获取当前url的具体方法全面解析

发布日期:2024/4/1
手机扫二维码直达本页
发布时间:16:38:59
点  击:9
录  入:星儿
相关文章
Baidu
YiJiaCMS 7.3.8 build231228(MSSQL) 闽ICP备05000814号-1
本空间由腾讯云(轻量应用服务器)提供,奇安信网站卫士提供加速防护
运行时间载入中.....