PHP生成的XML无法在IE中下载

时间:2011-01-21 18:36:18

标签: php xml http-headers

我有一个运行mod_rewrite的PHP脚本生成的XML Feed。 IE打开提要确定但我无法将文件保存到磁盘或导入到Excel。

我尝试在网址中访问的文件类似于:

http://domain.com/download/export.xml

这会写入下载PHP脚本,实际上并不是XML文件。

设置如下所示的标题后,仍然无法让IE保存文件。此外,由于它无法显示普通光源,因此无法复制和显示光源。粘贴到记事本中将无法正常工作,因为IE会对XML进行各种样式更改。

<?php
header("Content-type: text/xml");
header('Content-Disposition: attachment; filename="QuoteExport_'.$quoteDate.'_'.$quoteSlot.'.xml"');

有谁知道解决方案?感谢。

编辑: 感谢你目前的帮助。我尝试了这些标题的组合,仍然没有得到我想要的结果。无论我设置什么,IE总是在浏览器中在线显示,无法下载。保存功能也仍然无法正常工作。任何其他想法如何强制IE使用标题将XML保存为文件?

Edit2:状态现在是IE提供打开/保存选项,但在尝试保存时,有一个弹出窗口说“无法打开此网站。”。但与此同时,open选项显示内容没有问题。

4 个答案:

答案 0 :(得分:5)

要强制ie和其他浏览器下载,您必须指定特定的标题,如下例所示:

    header("Content-disposition: attachment; filename=\"".$fileName . ".csv\"");
    header("Content-Type: application/force-download");
    header("Content-Transfer-Encoding: binary");
    header("Pragma: no-cache");
    header("Expires: 0");

如果您使用text / xml,则认为他知道如何显示它并且这样做。

答案 1 :(得分:2)

您需要为某些版本的IE设置会话参数。假设您设置了$my_file_name$my_file_contents,那么它的外观如下:

if(strpos($_SERVER['HTTP_USER_AGENT'], 'MSIE')) {
    session_cache_limiter("public");
}
session_start();

header('Content-type: application/octet-stream');
header('Content-Disposition: attachment; filename=".' $my_file_name '. "');
print($my_file_contents);

(改编自this article

答案 2 :(得分:0)

尝试将内容类型设置为application / xml或application / force-download

答案 3 :(得分:0)

在花了很多时间更改标题之后,我采用了稍微不同的方法。无论我将它们设置为什么,它都不适合我。

无论如何,实施的解决方案是: 当客户端登陆URL(http~://my-domain.com/downloads/export.xml)时,PHP脚本会在与request-URI相同的位置生成一个真实的XML文件,并将其保存在服务器上,将其安排在将来删除作业,然后有效刷新浏览器。然后,第二个请求的mod重写规则服务于实际文件,然后IE可以正确使用该文件。然后,将来的请求会导致循环再次运行。

略微围绕做事的方式,但这是最快的方法。此外,我还能够从应用程序的另一部分安排文件操作,使清理工作变得更加容易!

无论如何,谢谢你的帮助,我确实学到了关于标题选项的一两件事。