2011-01-21 113 views
0

我有一个XML脚本生成的PHP脚本与mod_rewrite运行。 IE打开提要确定,但我无法获得它将文件保存到磁盘或导入到Excel。PHP生成的XML不能在IE中下载

我试图在URL访问文件类似于:

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提供了打开/保存选项,但同时试图挽救,有一个弹出说,这是“无法打开此Internet站点。”但与此同时,open选项显示没有问题的内容。

回答

0

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

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

微圆顶约做事的方式,但它是最快的方法。另外,我有能力从应用程序的另一部分安排文件操作,使清理工作变得更容易!

反正感谢您的帮助,我确实学到了一件事,或两对标题选项。

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"); 

其他明智的,如果你用文本/ XML,即认为他知道如何显示它和这样做。

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改编)

0

尝试设置内容类型为application/xml或application /强制下载