【发布时间】:2015-12-04 02:02:32
【问题描述】:
我正在创建可下载的 zip 文件,它几乎在任何地方都能正常工作。但在 Mozilla Firefox 中保存此 zip 时,我收到奇怪的消息,表明 my_zip.zip 是 HTM 文件(对于语言,我很抱歉,但我希望它很容易理解):
如果我选择保存选项,它将被保存为普通 zip(根本没有 HTM 的迹象),但在“打开方式”部分只有用于打开 HTM 的程序
所以,问题是 如何让 Firefox 将此 zip 检测为 zip?
我目前正在使用此标头(由 PHP 设置):
header('Content-Description: File Transfer');
header("Content-Type: application/octet-stream");
header("Content-Disposition: attachment; filename=$zipFileName");
header("Content-Transfer-Encoding: binary");
header("Expires: Sat, 26 Jul 1997 05:00:00 GMT");
header("Cache-Control: no-store");
header('Pragma: no-cache');
header("Content-length: " . filesize($zipFileName));
readfile($zipFileName);
已经尝试使用 header("Content-Type: application/zip"); ,不起作用;加上application/zip 不是标准的(正如我在一些与标题相关的问题中所读到的那样)。
我使用的是 Mozilla Firefox v40.0.3,php 项目使用的是 Laravel 5.1 (我怀疑它与此有关)
更新:
在尝试不同的 application\[format]s 时,我在 headers 之后添加了一个 dump and die 命令
//bunch of kosher headers here...
readfile($zipFileName);
dd(headers_list());//dumps and dies
我在下载窗口中得到一个 zip 类型。然后我发现在die 或exit 之后,我总会得到正确的zip 下载类型;然后我删除了所有 dump-and-die 部分,但下载类型仍然为 zip。我不知道我通过这种操作解决了什么问题。
我很想解释一下这种奇怪的情况
【问题讨论】:
-
可能是 firefox 附件类型(请参阅选项)或 windows 文件类型问题(请参阅控制面板)。显然,它被检测为 zip,因为建议使用 7zip(通过扩展)。
-
@DeDee 7zip 控制台是我选择的。默认情况下,Firefox 建议默认浏览器打开 htm
-
"然后我删除了所有的转储部分,但下载类型仍然是 zip"。除非您明确使用 PHP 缓存,否则这完全看起来像 firefox 本地缓存。
标签: php html firefox download http-headers