php断点续传
$file_dir = '/demo/'; $filename = 'text.txt'; $sourceFile = $file_dir.$filename; $fp = fopen($sourceFile, "rb"); //检测文件是否存在 if (!is_file($sourceFile)) { die("b404 File not found!/b"); } $filename = basename($sourceFile); //获取文件
$file_dir = '/demo/';
$filename = 'text.txt';
$sourceFile = $file_dir.$filename;
$fp = fopen($sourceFile, "rb");
//检测文件是否存在
if (!is_file($sourceFile)) {
die("404 File not found!");
}
$filename = basename($sourceFile); //获取文件名字
$file_size = filesize($sourceFile);
$size2 = $file_size -1; //文件总字节数
$ctype = "application/vnd.android.package-archive";
header("Cache-Control:");
header("Cache-Control: public");
//设置输出浏览器格式
header("Content-Type: $ctype");
header("Content-Disposition: attachment; filename=" . $filename);
header("Accept-Ranges: bytes");
if (isset($_SERVER ['HTTP_RANGE'] )) {
if (preg_match ( '/bytes=\h*(\d+)-(\d*)[\D.*]?/i', $_SERVER ['HTTP_RANGE'], $matches )) {
// 读取文件,起始节点
$begin = intval ( $matches [1] );
// 读取文件,结束节点
if (! empty ( $matches [2] )) {
$end = intval ( $matches [2] );
}
}
$new_length = $file_size - $begin; //获取下次下载的长度
header("HTTP/1.1 206 Partial Content");
header("Content-Length: $new_length"); //输入总长
header("Content-Range: bytes $begin-$size2/$file_size" );
}else{
header("Content-Range: bytes 0-$size2/$file_size"); //Content-Range: bytes 0-4988927/4988928
header("Content-Length: " . $file_size); //输出总长
}
$buffer=1024;
fseek($fp, $begin);
$file_count=0;
while(!feof($fp) && ($file_size-$file_count>0)){
$file_data=fread($fp,$buffer);
$file_count+=$buffer;
echo $file_data;
}
fclose($fp);
exit ();
文件直接下载可以安装,断点那一块,文件下载完之后总是不能够安装,什么愿意,代码哪里错了?大神求解答。调试一天也没调出来,试了很多种方法。
上一篇: 前端性能优化总结