<?php
$fileName = 'upload/1.png';
$fileName = iconv('utf-8', 'gb2312', $fileName);
$fp = fopen($fileName, 'r+');
if(!file_exists($fileName)){
echo 'file not';
exit();
}
$file_size = filesize($fileName);
// 返回文件
Header('Content-type: application/octet-stream');
// 告诉客户端浏览器返回的文件大小是按照字节进行计算
Header('Accept-Ranges: bytes');
// 返回文件的大小
Header('Accept-Length:'.$file_size);
// 弹出客户端的对话框,显示对应的文件名
Header('Content-Disposition: attachment; filename='.$filename);
// 防止服务器压力过大,分段读取
$buffer = 1024;
while (!feof($fp)) {
$file_data = fread($fp, length);
echo $file_data;
}
fclose($fp);
这段代码执行好,浏览器弹出的是下载当前php文件的框?
不知是什么原因造成的?
2 回答

慕尼黑8549860
TA贡献1818条经验 获得超11个赞
$filename 文件名使用错误,上边定义的是 $fileName
还有 length 就没有定义,应该使用 $buffer 变量
修改后如下
$fileName = 'upload/1.png';
$fileName = iconv('utf-8', 'gb2312', $fileName);
$fp = fopen($fileName, 'r+');
if(!file_exists($fileName)){
echo 'file not';
exit();
}
$file_size = filesize($fileName);
// 返回文件
Header('Content-type: application/octet-stream');
// 告诉客户端浏览器返回的文件大小是按照字节进行计算
Header('Accept-Ranges: bytes');
// 返回文件的大小
Header('Accept-Length:'.$file_size);
// 弹出客户端的对话框,显示对应的文件名
Header('Content-Disposition: attachment;filename='.$fileName);
// 防止服务器压力过大,分段读取
$buffer = 1024;
while (!feof($fp)) {
$file_data = fread($fp, $buffer);
echo $file_data;
}
fclose($fp);
还有你这样并不能实现分段下载,如果要想实现请参考
HTTP/1.1 206 Partial Content 状态码
- 2 回答
- 0 关注
- 649 浏览
添加回答
举报
0/150
提交
取消