问题:是否有可能在浏览器不更改文件名的情况下将文件从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);
1)删除无用的/未定义的报头字段,如Content-Transfer-Encoding和Content-Description。
2)不,你不能阻止浏览器根据他们检测到的内容类型来调整扩展。
有显式指定文件扩展名的http头文件。为此,您应该将content-Type设置为例如pdf文件的"application/pdf"或excel文件的"application/ms-excel"