为了账号安全,请及时绑定邮箱和手机立即绑定

使用php下载图片文件,但是下载的是整个php文件?

使用php下载图片文件,但是下载的是整个php文件?

PHP
qq_笑_17 2019-03-15 13:07:25
<?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 状态码

查看完整回答
反对 回复 2019-03-18
?
撒科打诨

TA贡献1934条经验 获得超2个赞

你这是个死循环吧。

  1. filename 变量未定义(大小写)

  2. length 是什么鬼,哪儿定义的

把这两个修复了就能正常工作了

查看完整回答
反对 回复 2019-03-18
  • 2 回答
  • 0 关注
  • 649 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信