为什么DOMDocument()在多个URL中工作而在其他URL中不起作用?

时间:2011-06-27 15:28:40

标签: php rss domdocument

我使用这个简单的脚本来解析RSS数据:

<?php

//PUBLIC VARS
$arrFeeds = array();
$downItems = 0;
//*PUBLIC VARS

function getRSS($source) {
    global $arrFeeds, $downItems;
    $doc = new DOMDocument();
    $doc->load($source);
    foreach ($doc->getElementsByTagName('item') as $node) {
        $itemRSS = array ( 
            'title' => $node->getElementsByTagName('title')->item(0)->nodeValue,
            'desc' => $node->getElementsByTagName('description')->item(0)->nodeValue,
            'link' => $node->getElementsByTagName('link')->item(0)->nodeValue
        );
        array_push($arrFeeds, $itemRSS);
        $downItems+=1;
        //echo($arrFeeds[$TT]['title']."<br>");
    }
}
getRSS("http://www.atm-mi.it/_layouts/atm/apps/PublishingRSS.aspx?web=388a6572-890f-4e0f-a3c7-a3dd463f7252&c=News%20Infomobilita");
echo(strip_tags($arrFeeds[1]['title'])."<br><br>".$arrFeeds[1]['desc']);
?>

这个脚本适用于你尝试过的几乎所有的rs,但是使用这个特殊的:http://www.atm-mi.it/_layouts/atm/apps/PublishingRSS.aspx?web=388a6572-890f-4e0f-a3c7-a3dd463f7252&c=News%20Infomobilita它不会工作,而rss是有效的,所以我认为这可能是一个安全问题,无论如何,怎么能我解决了这个问题并使我的脚本更加可靠?谢谢!

1 个答案:

答案 0 :(得分:0)

我可以通过使用"default_socket_timeout更改ini_set的值来实现此目的。问题似乎是服务器试图使连接保持活动状态。

$url = 'http://www.atm-mi.it/_layouts/atm/apps/PublishingRSS.aspx?web=388a6572-890f-4e0f-a3c7-a3dd463f7252&c=News%20Infomobilita';

ini_set('default_socket_timeout', 1);

$dom_document = new DOMDocument;
$dom_document->load($url);

或者,您可以考虑使用更灵活的cURL

$url = 'http://www.atm-mi.it/_layouts/atm/apps/PublishingRSS.aspx?web=388a6572-890f-4e0f-a3c7-a3dd463f7252&c=News%20Infomobilita';

$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

$dom_document = new DOMDocument;
$dom_document->loadXml(curl_exec($ch));

curl_close($ch);