Simplexml_load_file():I/O 警告:未能加载外部实体“”

Posted

技术标签:

【中文标题】Simplexml_load_file():I/O 警告:未能加载外部实体“”【英文标题】:Simplexml_load_file(): I/O warning : failed to load external entity " " 【发布时间】:2017-10-20 08:33:01 【问题描述】:

在问这个问题之前,我尝试了一些从 URL 加载数据 xml 的方法,但都失败了。同样在 XML url 中有一些特殊字符。这是错误

Warning: simplexml_load_file(): I/O warning : failed to load external entity " " in D://....;

这是我的代码:

$url = 'http://website.com?xml&param1=1&param2=2';

$ch = curl_init();
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_URL, $url);    // get the url contents

$data = curl_exec($ch); // execute curl request
curl_close($ch);
$xml = simplexml_load_string($data);
$json = json_encode($xml);
echo $json;

感谢大家的帮助

【问题讨论】:

【参考方案1】:

您可以使用更简单的方式加载 URL

$context  = stream_context_create(array('http' => array('header' => 'Accept: application/xml')));
$url = 'http://website.com?xml&param1=1&param2=2';

$xml = file_get_contents($url, false, $context);
$xml = simplexml_load_string($xml);
print_r($xml);

编辑: 各个地方都有一些关于错误 403 的讨论,一个建议是在此调用之前设置用户代理:

ini_set('user_agent','Mozilla/4.0 (compatible; MSIE 6.0)');

(取自file_get_contents() give me 403 Forbidden)

【讨论】:

谢谢你,我想,我的 XML url 有特殊字符的问题。当我使用curl 获取数据和var_dump($data) 时,我看到里面有字符“”。我不知道原因,因为我可以正常从另一个 xml url 获取数据。 感谢@Nigel Ren。我用了跟随它并得到结果:Warning: file_get_contents(http://website.com/entries.xml?key=0231cf3b3ef031e070b4e30fea881a0c63dd38f2&project_id=192&issue_id=8136&from=2017-05-01&to=2017-05-20&oe=utf-8): failed to open stream: HTTP request failed! HTTP/1.1 403 Forbidden in D:\website\index.php on line 9 。出现 403 禁止错误,因为我不是管理员的这台服务器,因为我可以为它设置权限 ini_set('user_agent','Mozilla/4.0 (compatible; MSIE 6.0)'); :仍然无法正常工作并且仍然是相同的消息旧错误; 该代码适用于您的原始 URL,但这个新 URL 不适用,如果这对您来说是相同的,那么它与对该资源的访问有关。您是否在浏览器中尝试过,看看它会给您带来什么。 感谢@Nigel Ren。我试试

以上是关于Simplexml_load_file():I/O 警告:未能加载外部实体“”的主要内容,如果未能解决你的问题,请参考以下文章

XAmpp 上的 Joomla 安装失败

想要使用 cURL 而不是 SimpleXML_load_file()

当我尝试做 simplexml_load_file 时出现 XML 错误

simplexml_load_file 抑制警告的直接输出

调用未定义的函数 simplexml_load_file()

XML - simplexml_load_file - foreach