Почему DOMDocument () работает в нескольких URL, а в других нет? - PullRequest
0 голосов
/ 27 июня 2011

я использую этот простой скрипт для разбора данных 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']);
?>

Этот скрипт прекрасно работает практически с любой вашей rss-версией, но с этой конкретной: http://www.atm -mi.it /_layouts / atm / apps / PublishingRSS.aspx? web = 388a6572-890f-4e0f-a3c7-a3dd463f7252 & c = News% 20Infomobilita это не сработает, и rss действительна, так что я думаю, что это может быть проблема безопасности, в любом случаеКак я могу решить эту проблему и сделать мой сценарий более реалистичным?Спасибо!

1 Ответ

0 голосов
/ 27 июня 2011

Мне удалось заставить это работать, изменив значение "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);
...