1

问题:是否可以在浏览器不更改文件名的情况下将文件从 Web 浏览器下载到用户机器?

背景:我有一个共享软件应用程序,用户可以购买许可证来激活它。许可证是一个 XML 文件,但扩展名是“.mlic”,而不是“.xml”。mlic 是我的应用程序识别的特殊文件扩展名。用户付款后,他们会被重定向到我的 PHP 脚本,该脚本会推送 mlic 文件和相关的 HTTP 标头。我的脚本如下。

问题:有些人告诉我文件下载为 license.xml 或 license.mlic.xml,但他们不知道如何处理此文件。我不知道这些人使用的是什么浏览器或操作系统。我无法复制。我的应用程序仅适用于 Mac,因此适用于 OS X。

解决方案:对此有什么办法吗?是否有明确指定文件扩展名的 HTTP 标头?

header("Pragma: public");
header("Expires: 0");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Cache-Control: public");
header("Content-Description: File Transfer");
header("Content-type: application/octet-stream");
header("Content-Disposition: attachment; filename=\"license.mlic\"");
header("Content-Transfer-Encoding: binary");
header("Content-Length: " . $filesize($input_path));

ob_end_flush();
@readfile($input_path);
4

2 回答 2

0

1) 丢弃无用/未定义的头字段,例如 Content-Transfer-Encoding 和 Content-Description。

2) 不,您不能阻止浏览器根据它们检测到的内容类型调整扩展。

于 2013-05-25T06:51:35.587 回答
0

有明确指定文件扩展名的 http 标头。为此,您应该将 content-Type 设置为例如 pdf 文件的“application/pdf”或 excel 文件的“application/ms-excel”

于 2013-07-15T06:27:19.930 回答