警告:DOMDocument :: load():http://widget.stagram.com/rss/n中文档末尾的额外内容

时间:2014-07-16 17:42:14

标签: php xml wordpress rss instagram

从过去两周起,我收到了关注php警告消息

  

警告:DOMDocument :: load():文档末尾的额外内容   在http://widget.stagram.com/rss/n/zee/,行:10英寸   /home//public_html/wp-content/themes//inc/social-instagram.php   在第22行

我试图在警告消息中解析此链接

$xmlDoc = new DOMDocument();
$xmlDoc->load($xml);

当我浏览网页浏览器http://widget.stagram.com/rss/tag/zee/中的链接时,xml似乎没问题。

2 个答案:

答案 0 :(得分:2)

您需要使用curl并添加选项CURLOPT_USERAGENT。这就是它在浏览器上工作的原因,而不是简单的file_get_contents->load。考虑这个例子:

$url = ('http://widget.stagram.com/rss/tag/zee/');
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_USERAGENT,'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.13) Gecko/20080311 Firefox/2.0.0.13');
curl_setopt($ch, CURLOPT_FAILONERROR,1);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION,1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch, CURLOPT_TIMEOUT, 15);
$data = curl_exec($ch);
curl_close($ch);
$xml = simplexml_load_string($data, 'SimpleXMLElement', LIBXML_NOCDATA);

echo '<pre>';
print_r($xml);

Sample Output

答案 1 :(得分:0)

我遇到了同样的问题,发现以下解决方案无需CURL即可运行:

libxml_set_streams_context(
    stream_context_create(
        array(
            'http' => array(
                'user_agent' => 'php'            
            )
        )
    )
);

$dom = new DOMDocument;
$dom->load($xml);

额外内容错误消失了,我推送的所有Feed都运行正常。

非常感谢Gordon用这个答案回答了另一个问题,导致我尝试解决这个问题。