Как прочитать внешний rss файл? - PullRequest
0 голосов
/ 17 августа 2010

Мне нужно отобразить данные из файла rss с другого сервера.

Когда файл rss находится на моем сервере, я могу прочитать его, но когда я пытаюсь прочитать тот же файл на другом сервере, я получаю это:

Внимание: simplexml_load_file (rssfile) [function.simplexml-load-file]: не удалось открыть поток: тайм-аут соединения в index.php по линии 43

Предупреждение: simplexml_load_file () [function.simplexml-load-file]: ввод / вывод предупреждение: не удалось загрузить внешний юридическое лицо "Rssfile" в index.php по линии 43

Это мой код:

$actus = simplexml_load_file('rssfile');  
foreach ($actus->channel->item as $actu) 
{  

echo $actu->title;

} 

Как это исправить?

Мне кажется, проблема в Symfony

Ответы [ 3 ]

0 голосов
/ 17 августа 2010

Так как сообщение об ошибке / предупреждение «Тайм-аут соединения», давайте более подробно рассмотрим параметры тайм-аута.
Существует default_socket_timeout и опция контекста http timeout, которые могли быть установлены с помощью stream_context_set_default .

Попробуйте это

$xmlsrc = 'http://some.host/a/path/foo.rss';
$actus = simplexml_load_file($xmlsrc);
if ( !$actus ) {
  echo "simplexml_load_file() failed.<br />\n";
  echo '$xmlsrc='; var_dump($xmlsrc); echo "<br />\n";
  echo 'default_socket_timeout=', ini_get('default_socket_timeout'), "<br />\n";
  $defaultOptions = stream_context_get_options(stream_context_get_default());
  echo 'default options='; var_dump($defaultOptions); echo "<br />\n";
  die;
}

foreach ($actus->channel->item as $actu) ...

в обоих сценариях (с / без Symfony) на одном сервере. Отличаются ли значения (тайм-аута)?

0 голосов
/ 18 августа 2010

Я согласен с VolkerK, ошибка возникает из-за предоставленного неверного URL.

Кроме того, поскольку вы используете symfony, я советую вам использовать sfFeed2Plugin, который будет намного больше, чем загрузчик simplexml (проверка, методы вывода и даже, при необходимости, обслуживание).

Вот краткий пример использования:

// define your source url
$source_url = 'http://feeds.feedburner.com/TechCrunch';

// fetch url
if($feed = sfFeedPeer::createFromWeb($source_url))
{
  // get items
  $items = $feed->getItems();

  foreach($items as $item)
  {
    // do whatever you want with each item
    echo $item->getTitle()."\n";
  }
}
0 голосов
/ 17 августа 2010

Затем вы можете прочитать это с чем-то вроде этого

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...