猿问

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

<?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文件的框?

不知是什么原因造成的?

qq_笑_17
浏览 650回答 2
2回答

慕尼黑8549860

$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 状态码

撒科打诨

你这是个死循环吧。 filename 变量未定义(大小写) length 是什么鬼,哪儿定义的 把这两个修复了就能正常工作了
随时随地看视频慕课网APP
我要回答