PHP 生成 XML 文件以在另存为对话框中加载正确的文件类型

Posted

技术标签:

【中文标题】PHP 生成 XML 文件以在另存为对话框中加载正确的文件类型【英文标题】:PHP generated XML file to load correct file type in the save as dialog 【发布时间】:2010-07-04 11:56:01 【问题描述】:

我有一个名为dynamicxml.php 的PHP 文件,它运行一堆代码,从数据库中提取数据并创建一个XML 文件。当我右键单击并保存dynamicxml.php?var=test 的链接时,我需要对话框选择 xml 作为默认文件类型并将文件重命名为 var.xml:

header("Content-type: text/xml");
echo '<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<blah><blah_blah>'.$_GET['var'].'</blah></blah>';

单击链接时,它会在浏览器中加载 xml 文件。保存该页面会将其保存为 var.xml。但是右键单击并保存它会将其保存为 dynamicxml.php 和 php 文件类型。

我应该使用 htaccess 操作还是有其他替代方法?

【问题讨论】:

(sidenote) 考虑使用 DOM 而非字符串连接来生成 XML 文件。这可以确保 XML 有效。 我不认为这是一个有效性问题 @kgb 这就是为什么它只是一个旁注;) 【参考方案1】:

您不应该尝试这样做,因为浏览器通过“另存为..”进行保存的工作方式不同。例如 chrome 和 opera 会将您的文件保存为 .htm(可能)。我看到了两种可能的方法来解决这种情况(我不会做任何一种):

设置 apache 将 xml 处理为 php。 AddType text/xml php

创建一个重写规则将所有内容从某个目录中的 *.xml 重定向到 dynamicxml.php

RewriteEngine On
RewriteCond %REQUEST_FILENAME -s [OR]
RewriteCond %REQUEST_FILENAME -l [OR]
RewriteCond %REQUEST_FILENAME -d
RewriteRule ^.xml$ - [NC,L]
RewriteRule ^.xml$ dynamicxml.php [NC,L]

【讨论】:

以上是关于PHP 生成 XML 文件以在另存为对话框中加载正确的文件类型的主要内容,如果未能解决你的问题,请参考以下文章

如何创建“另存为”和“加载”对话框以在 javascript 中创建/加载 json 文件/数据?

通过 jQuery GET 强制“另存为”对话框

PHP:另存为带有自定义内容的对话框

如何在“另存为”对话框中强制使用正确的文件扩展名? (.jpg 而不是 .php)

PHP:减小“另存为”窗口的大小

如何将word转成html格式