我创建了一个 PHP DOM xml 片段并将其保存到这样的字符串中:
<?php
// create a new XML document
$doc = new DomDocument('1.0');
...
...
...
$xmldata = $doc->saveXML();
?>
现在我不能使用标题发送文件下载提示,也不能将文件写入服务器,或者更确切地说,我不希望文件放在上面。
保存此文件链接或下载提示之类的东西会很好。我该怎么做?
我从评论中看到您在 CMS 框架内工作,并且无法在您的代码所在的位置之前停止输出内容。
如果您正在使用的脚本已经输出了内容(超出了您的控制范围),那么您无法仅在一个脚本中完成您想要实现的目标。
您的脚本可以发送标头说“以下内容是 HTML”,然后输出 HTML,或者发送标头说“以下内容是 XML,是附件并具有特定文件名”。你不能两者都做。
您可以输出包含指向用于下载 XML 文件的单独脚本的链接的 HTML,也可以发出文件下载但不输出 HTML。
因此,您必须在正在修改的 CMS 脚本的输出中添加下载链接,然后在单独的脚本中处理下载。
我做了一个应该有所帮助的工作示例。该示例包括一个简单的 HTML 文档,其中包含一个下载链接,以及一个随后处理下载的 PHP 脚本。
查看下面的代码或查看实时示例。
HTML(去除了多余的绒毛,不一定有效)
<html>
<head>
<title>XML Download Example</title>
</head>
<body>
<a href="download.php">Download XML example</a>
</body>
</html>
PHP
<?php
// Populate XML document
$doc = new DomDocument();
// ... various modifications to the document are made
// Output headers
header('Content-type: "text/xml"; charset="utf8"');
header('Content-disposition: attachment; filename="example.xml"');
// Output content
echo $doc->saveXML();
?>
如果您完全无法通过第二个脚本处理下载(也许您无法访问相关数据),您将不得不重新考虑问题。
您可以在 php.ini 中启用 output_buffering,然后您可能有一些发送标头的选项。
同样的事情对我有用。但我没有使用 XML DOM。我使用 SimpleXML 来解析我的 xml。
$xml = new SimpleXMLElement("<root></root>");
我想给我的视图一个自定义 xml,它将根据他们通过表单提供的数据生成。在提交表单时,他们会以自己想要的名称下载 xml。
header('内容类型: "text/xml"; charset="utf8"');
header('Content-disposition: attachment; filename="'.$_POST['filename'].'.xml"');
回声 $xml->asXML();