PHP实现HTTP断点续传的方法
本文实例讲述了PHP实现HTTP断点续传的方法。分享给大家供大家参考。具体实现方法如下:
<?php
/**
*PHP-HTTP断点续传实现
*@paramstring$path:文件所在路径
*@paramstring$file:文件名
*@returnvoid
*/
functiondownload($path,$file){
$real=$path.'/'.$file;
if(!file_exists($real)){
returnfalse;
}
$size=filesize($real);
$size2=$size-1;
$range=0;
if(isset($_SERVER['HTTP_RANGE'])){
header('HTTP/1.1206PartialContent');
$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:bytes0-'.$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);
}
希望本文所述对大家的php程序设计有所帮助。