【问题标题】:Simplexml_load_file(): I/O warning : failed to load external entity " "Simplexml_load_file():I/O 警告:未能加载外部实体“”
【发布时间】: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;

感谢大家的帮助

【问题讨论】:

    标签: php xml curl


    【解决方案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。我试试
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-03-22
    • 1970-01-01
    • 2014-06-22
    • 1970-01-01
    • 2012-08-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多