【问题标题】:simplexml_load_file and failed to load external entitysimplexml_load_file 并未能加载外部实体
【发布时间】:2013-03-08 14:40:20
【问题描述】:

我正在尝试调用 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 它会正常工作,但是当文件位于同一服务器时,我会收到“无法加载外部实体”错误。

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

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

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

我需要能够将这些参数添加到 url,有什么办法吗?

【问题讨论】:

标签: php


【解决方案1】:

看起来问题出在 allow-url-fopen 上,因为您说它在远程服务器上运行良好。
你调用什么 URL 来访问你的本地服务器?也许尽量避免使用像 http://localhost/something.php 这样的名称,而只使用像 http://127.0.0.1/something.php 这样的 IP 地址。

【讨论】:

  • 如你所说,allow-url-fopen 不是问题,因为调用外部 ip 时不会出现问题,而且我已经在 php.ini 中检查过它是否为 ON
【解决方案2】:

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

但是通过将脚本直接包含在参数中来加载生成 XML 的脚本可能更优雅、更快,否则你基本上只会用一个无用的附加请求来给你的网络服务器施加压力

【讨论】:

    猜你喜欢
    • 2017-10-20
    • 1970-01-01
    • 1970-01-01
    • 2015-03-22
    • 2018-11-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多