要下载的php文件显示在浏览器中而不是下载

时间:2016-04-09 14:34:07

标签: php

我正在尝试使用PHP脚本下载文本文件,但是当我的脚本运行时,文件内容会显示在浏览器窗口中。我试过这个解决方案:Why downloaded file is not downloaded instead it is shown in browser? 但是我的代码已经有了内容长度标题。这是我的PHP代码(我从另一篇文章1获得并修改为文本文件)

$file = 'file.txt';

header('Content-Description: File Transfer');
header('Content-Type: text/plain');
header('Content-Disposition: attachment; filename='.basename($file));
header('Content-Transfer-Encoding: binary');
header('Expires: 0');
header('Cache-Control: must-revalidate');
header('Pragma: public');
header('Content-Length: ' . filesize($file));
ob_clean();
flush();
readfile($file);
exit;

Browser output of text file contents

我试图从php.com复制一个示例来获取pdf文件,我得到与我链接的帖子相同的符号。

我不确定为什么会这样。我在Chrome上使用PHP版本5.6.10运行MAMP 3.5。

这让我很困惑,因为到目前为止,我已经能够在线找到我所做的一切。据我所知,我所做的是正确的,所以任何建议都会非常感激。

非常感谢,

Nehal Patel

在Marcus的指导下解决(9/4/15): 删除了flush()和ob_clean()。

$file = 'file.txt';
header('Content-Description: File Transfer');
header('Content-Type: text/plain');
header('Content-Disposition: attachment; filename='.basename($file));
header('Content-Transfer-Encoding: binary');
header('Expires: 0');
header('Cache-Control: must-revalidate');
header('Pragma: public');
header('Content-Length: ' . filesize($file));
readfile($file);
exit;

1 个答案:

答案 0 :(得分:1)

尝试将内容类型更改为八位字节/流

header('Content-Type: application/octet-stream');