php大文件下载超时中断解决方法
作者:Admin采集插件
时间:2023-04-08
浏览:528
分类:php教程
来源:互联网收录
<?php
//设置脚本的最大执行时间,设置为0则无时间限制
set_time_limit(0);
ini_set('max_execution_time', '0');
$file_name = 'aa.zip'; //本机文件地址
$extension = pathinfo($file_name)['extension'];
$dowload_name = '资料.'.$extension;
$file_dir = "./"; //下载文件存放目录
//检查文件是否存在
if (!file_exists($file_dir . $file_name)) {
header('HTTP/1.1 404 NOT FOUND');
} else {
//以只读和二进制模式打开文件
$file = fopen($file_dir . $file_name, "rb");
//告诉浏览器这是一个文件流格式的文件
Header("Content-type: application/octet-stream;name=$dowload_name");
//请求范围的度量单位
Header("Accept-Ranges: bytes");
Header('Content-Transfer-Encoding: binary');
$filesize = filesize($file_dir . $file_name);
//$header_array = get_headers($filename, true);(网络文件用这个方式获取大小)
//$filesize = $header_array['Content-Length'];
//Content-Length是指定包含于请求或响应中数据的字节长度
Header("Accept-Length: " . $filesize);
//用来告诉浏览器,文件是可以当做附件被下载,下载后的文件名称为$file_name该变量的值。
Header("Content-Disposition: attachment; filename=" . basename($dowload_name));
//针对大文件,规定每次读取文件的字节数为10000字节,直接输出数据
$read_buffer = 10000;
//读取文件内容并直接输出到浏览器
//总的缓冲的字节数
$sum_buffer = 0;
//echo fread ( $file, filesize ( $file_dir . $file_name ) );
//只要没到文件尾,就一直读取
while (!feof($file) && $sum_buffer<$filesize) {
echo fread($file, $read_buffer);
flush(); //输出缓冲(切记,没有清楚缓存,下载会中断)
ob_flush();
$sum_buffer = $read_buffer;
}
fclose($file);
exit();
}循环时,切记刷新缓存区
本文章来自互联网,有问题请联系QQ:1739635
免责声明:1.凡本站注明“来源:XXX(非
CMS自动采集助手)”的作品,均转载自其它媒体,所载的文章、图片、音频视频文件等资料的版权归版权所有人所有,如有侵权,请联系1321198484@qq.com处理;2.凡本站转载内容仅代表作者本人观点,与CMS自动采集助手无关。