php - 创建 PHP DOM xml 文件并创建保存文件链接/提示,而无需在 header 已发送时将文件写入服务器

标签 php xml dom file

我创建了一个 PHP DOM xml 片段并将其保存为如下字符串:

<?php
  // create a new XML document 
  $doc = new DomDocument('1.0');
  ...  
  ...
  ...
  $xmldata = $doc->saveXML();
?>

现在我不能使用 header 发送文件下载提示,也不能将文件写入服务器,或者更确切地说,我不希望文件放在上面。

保存此文件链接或下载提示之类的东西会很好。我该怎么做?

最佳答案

我从评论中了解到,您是在 CMS 框架内工作,无法阻止内容在您的代码所在位置之前输出。

如果您正在使用的脚本已经输出内容(超出您的控制范围),那么您无法仅在一个脚本中完成您想要实现的目标。

您的脚本可以发送 header 说“以下内容是 HTML”然后输出 HTML 或发送 header 说“以下内容是 XML,是一个附件并具有特定的文件名”。你不能两者兼顾。

您可以输出包含指向用于下载 XML 文件的单独脚本的链接的 HTML,也可以发出文件下载但不输出 HTML。

因此,您必须在要修改的 CMS 脚本的输出中添加下载链接,然后在单独的脚本中处理下载。

我已经做了一个应该有用的工作示例。该示例包括一个包含下载链接的简单 HTML 文档,以及一个随后处理下载的 PHP 脚本。

查看下面的代码或查看 live example .

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 - 创建 PHP DOM xml 文件并创建保存文件链接/提示,而无需在 header 已发送时将文件写入服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/202305/

相关文章:

xml - 如何处理 Nokogiri 的 XPath 表达式中的转义字符

xml - 使用 XML 架构 (xsd) 验证输出 XML

java DOM xml文件创建 - 输出文件中没有制表符或空格

javascript - 使用 jquery 操作元素不起作用

php - 无法使用php表单在google oauth上交换 token 的授权码

PHP - session_unset 是否取消注册 $_SESSION 变量?

xml - 在 Xml 变量中存储查询结果时如何保留 CDATA 标记?

JavaScript 语法错误

php - 无法连接数据库和处理 POST 请求

php - 数据没有从ajax发送到php