simplexml_load_file并且无法加载外部实体

时间:2013-03-08 14:40:20

标签: php

我正在尝试调用simplexml_load_file,其中$ url参数是另一个.php文件,然后进行一些计算,之后,它将“回显”包含xml代码的字符串。

它看起来像这样:

$urlrequest= $_SERVER['DOCUMENT_ROOT']."/generateXML.php?id=5&output=xml";
$xml = simplexml_load_file($urlrequest);

其中generateXML.php将类似于:

<?php

//do some random code

$aux= '<?xml version="1.0" encoding="UTF-8" ?>'; 
$aux.= "<item>";
$aux.= "<name>John</name>";
$aux.= "<location>somewhere</location>";
$aux.= "</item>";

echo $aux;
?>

问题是,如果generateXML.php位于远程ip,它将正常工作,但当文件位于同一服务器时,我得到“无法加载外部实体”错误。

我发现问题可能来自网址中的参数。 例如:

$ var1 = file('dosomething.php'); 工作正常

但$ var1 = file('dosomething.php?id = 1'); 返回“无法打开流”错误

我需要能够将这些参数添加到网址中,有没有办法做到这一点?

2 个答案:

答案 0 :(得分:1)

问题与allow-url-fopen不一样,因为你说它在远程服务器上工作正常 您打电话访问本地服务器的URL是什么?也许尽量避免使用像http://localhost/something.php这样的名称,并使用仅像http://127.0.0.1/something.php一样使用IP地址。

答案 1 :(得分:0)

如果参数是一个URL,PHP将发出一个套接字请求,所以检查你的PHP.ini设置,例如这个 http://www.php.net/manual/en/filesystem.configuration.php#ini.allow-url-fopen

但是通过直接将参数包含在脚本中加载生成XML的脚本可能更优雅,更快,否则你基本上只会用无用的额外请求强调你的web服务器