【发布时间】:2012-06-25 22:01:06
【问题描述】:
我在 PHP 中使用数据库查询来检索二进制文件。但是当我试图强制下载它时, header('Content-type: application/octet-stream') 行会导致 0 字节文件。如果没有该行,我可以下载包含完整内容的文件。这是一个二进制文件,所以我无法理解为什么该行会导致问题。 代码:
$result = mysql_query("SELECT data FROM stored_file WHERE file_name = '$q'");
while($row = mysql_fetch_array($result))
{
$file = $row['data'];
}
header('Content-disposition: attachment; filename='.$q);
header('Content-type: application/octet-stream');
header('Content-Length: '.filesize($file));
header("Pragma: no-cache");
header("Expires: 0");
echo $file;
有什么想法吗?谢谢。
【问题讨论】:
-
注释掉所有标题;启用错误报告并运行您的脚本。发布任何错误消息。
-
我没有收到任何错误消息。
-
虽然似乎 filesize($file) 什么也没返回。
-
$file真的存在吗? PHP 是否抱怨“没有这样的文件”或“权限被拒绝”。注意:$file = $row['data']不是$row['file_name']。 -
$文件存在。如果我注释掉标题,它会回显它,“ÖG¤Îů8F'ÖŐ×{ç qfw7´ź$ŘLéŐŚ)ÓťÎ=ÚťZ¸Ş...”出现在浏览器中。如果我把它放在这样的条件下它也可以工作: if($file){ header...} but filesize still not working