PHP—获取一个在另一个PHP文件中回送的XML文件,然后将回送的XML输出保存到服务器

PHP—获取一个在另一个PHP文件中回送的XML文件,然后将回送的XML输出保存到服务器,php,xml,file-io,Php,Xml,File Io,我有一个PHP文件,名为xml_generate.PHP,它创建了一个DOM对象,并在最后回显它 我们可以这样说: header("Content-type: text/xml"); $dom = new DOMDocument('1.0'); $node = $dom->createElement('foo'); $root = $dom->appendChild($node); $node = $dom->createElement('bar'); $new_node

我有一个PHP文件,名为
xml_generate.PHP
,它创建了一个DOM对象,并在最后回显它

我们可以这样说:

header("Content-type: text/xml"); 

$dom = new DOMDocument('1.0');
$node = $dom->createElement('foo');
$root = $dom->appendChild($node);

$node = $dom->createElement('bar');
$new_node = $root->appendChild($node);

echo $dom->saveXML();
我从jQuery访问这个文件,并在客户端显示内容。实际的xml_generate.php从数据库动态创建DOM

但是,我希望有一个PHP文件,该文件将创建由generate_XML.PHP生成的XML的备份,并将其保存到服务器

因此,我需要以某种方式访问该XML文档(在XML_generate.php中动态创建的文档)

我尝试了几个不同的函数从XML_generate.php获取XML,例如:

$xml=http\u get('xml\u generate.php'),

$xml=file\u get\u contents('xml\u generate.php')

还包括第一个文件(
include('xml_generate.php')
,然后尝试访问该文件中的
$dom
变量)

但我似乎不能把它弄对。有什么好办法吗?

您可以使用,它将缓冲发送到输出流的任何数据,然后在包含脚本后检索这些数据:

ob_start();
include "xml_generate.php";
$xml = ob_get_contents();
ob_end_clean();

确保捕获错误@“xml_generate.php”,否则这些错误也会被缓冲,最终导致无效的xml备份。

为什么不从
generate_xml.php
脚本创建备份呢?因为备份将独立于调用xml_generate.php为客户端提供数据而进行;我不希望每次请求xml_generate.php时都创建备份。我想我可以根据请求中的一个参数来设置功能,然后让备份功能使用
xml\u generate.php?backup=true
,或者类似的方法来调用它,这将是一个更简单的解决方案,而不是您正在尝试的。您可以将所有功能保存在一个文件中。很酷,这很有效。谢谢虽然我仍然很好奇为什么我不能用另一种方法得到它,你当然可以,如果你好奇的话,我可以在下面回答,但是你想出了一个更好的方法来实现它。不过,我似乎仍然无法从中获得数据。我已经按照您的建议完成了上面的代码,然后创建一个新的DOM(
$doc=new DOMDocument();
),从输出缓冲区加载XML(
$doc->loadXML($XML);
),然后尝试回显该XML(
回显$doc->saveXML();
,这样我就可以看到它实际上已经完成了)。它只是给了我一个空的XML文件。我是否误解了从中获取实际XML的方法?我还尝试过使用
load($XML)
,以及
echo($XML)
print\r($XML)
仅用于yuks,它们都不会输出任何东西,尽管您不能以这种方式传递参数(building=300)。您必须使用两个脚本都知道的变量-备份脚本可能会设置“$building=300;”,而xml脚本在(!isset($\u GET[“building”])(至少我猜您是这样做的)的情况下使用它。此外,还应该包括引发警告的变量,最好激活严格的错误报告来调试代码:error\u reporting(E\u ALL);