创建PHP DOM xml文件并创建保存文件链接/提示,而不必在已发送标头时将文件写入服务器

StackOverflow https://stackoverflow.com/questions/202305

  •  03-07-2019
  •  | 
  •  

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

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

现在我无法使用标头发送文件下载提示,我无法将文件写入服务器,或者我不希望文件存在于其中。

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

有帮助吗?

解决方案

我从评论中看到您在CMS框架内工作,并且无法阻止在您的代码出现之前输出内容。

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

您的脚本可以发送标题为<!>的标题;以下内容为HTML <!> quot;然后输出HTML或发送标题,说<!>;以下内容是XML,是一个附件,并具有一定的文件名<!>“;你不能两者兼顾。

您可以输出包含指向单独脚本的链接的HTML以下载XML文件,也可以发出文件下载并不输出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,然后您可能会有一些选项来发送标题。

http://us.php.net/manual/en /function.headers-sent.php

同样的事情对我有用。但我不使用XML DOM。我使用SimpleXML来解析我的xml。

  

$ xml = new   的SimpleXMLElement(QUOT <!>; <!> LT;根GT <!>; <!> LT / GT根<!>; QUOT <!>);

我想给我的视图一个自定义的xml,它将根据它们通过表单提供的数据生成。在提交表单时,他们会使用自己想要的名称下载xml。

  

header('Content-type:<!> quot; text / xml <!> quot ;;   字符集= QUOT <!>; <!> UTF8 QUOT;');

     

头('内容处置:   附件;   <!>文件名= QUOT;” [文件名 '] 'XML QUOT $ _ POST。'<!>;');

     

echo $ xml - <!> gt; asXML();

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top