Форум

Ошибка при чтении некоторых потоков

02-06-2010 06:40:17

беда

Здравствуйте, Браво и спасибо за этот RSS-плеер. Я вчера установил сценарий и сталкиваюсь с pb-чтением с некоторыми потоками. Например, с The Jakarta Post, которая, кроме того, очень хорошо отображается в проигрывателе Firefox 3.6, но не в IE8, у меня есть следующее сообщение: «http://www.thejakartapost.com/channel/business/feed» Warning: DOMDocument:: load () [domdocument.load]: Entity 'nbsp' not defined in http://www.thejakartapost.com/channel/business/feed, line: 171 in/homez.156/businessjc/www/rsslib.php on line 77 И все же код выглядит хорошо, когда смотришь на источник. С Google News, который правильно отображается в localhost, у меня есть это онлайн (как с FF3.6, так и с IE8): [b] http://news.google.com/news?ned=in&topic=n&output=rss Предупреждение: DOMDocument:: load (http://news.google.com/news?ned=in&topic=n&output=rss) [domdocument.load]: не удалось открыть поток: HTTP-запрос не выполнен! HTTP/1.0 503 Сервис Unavailable in/homez.156/businessjc/www/rsslib.php on line 77 Warning: DOMDocument:: load () [domdocument.load]: I/O warning: не удалось загрузить внешний объект «http://news.google.com/news?ned=in&topic=n&output=rss» in/homez.156/businessjc/www/rsslib.php на линии 77 [/b] Строка 77 содержит это в функции RSS_Retrieve ($ url):
    $doc->load($url);
2 проблемы весьма различимы. Я их сгруппировал, но, может быть, их лучше рассматривать отдельно в вашем ответе? Спасибо заранее.
03-06-2010 10:17:38

веб-мастер

Здравствуйте, я протестировал оба потока под Internet Explorer 8, с демонстрационной программой: https://www.iqlevsha.ru/rss/rss-simple.php Это работает. Необходимо проверить с помощью phpinfo () версию PHP, которая должна быть версией 5.
03-06-2010 11:08:57

беда

Здравствуйте, речь идет о PHP5 как на машине dev, так и у хостера. Кстати, остальные потоки (около десяти), предложенные на сайте, работают. Фактически, проблема с потоком The Jakarta Post исчезла из себя сегодня с удалением [b] & nbsp [/b], сообщенного в сообщении об ошибке: [b] Entity 'nbsp' не определен [/b] Эти символы находились в описании статьи. Поскольку поток был обновлен издателем, статья исчезла из потока. Так что больше [u] этой [/u] проблемы... пока только одна, только в localhost: «http://www.thejakartapost.com/channel/business/feed» notice: Trying to get property of non-object in C :\wamp2g\www\business-services-asia\commonlib.php on line 19 [/b] То есть на этой строке:
$y["description"] = $item->getElementsByTagName("description")->item(0)->firstChild->textContent;
Наконец, это ставит более широкий вопрос о других «нестыковках» в формировании xml-файлов их авторами. Разве нет другого способа прочесть потоки, который позволит обойти любое несовершенство, которое может возникнуть в любой момент, и быть уверенным в качестве отображения на постоянной основе? Я пыталась:
$fp = fsockopen($url);
$data = "";
while (!feof($fp)) 
{
    $data .= fgets($fp, 128);
}
fclose($fp);

$doc  = new DOMDocument();
$doc->loadXML($data);
и с :
$data = file_get_contents($url); 
$doc  = new DOMDocument();
$doc->loadXML($data);
Очевидно, у меня была такая же pb как с rss-direct.php, так и с common-direct-rs.php. Нормально, поскольку 2 используют [b] load ($ url). Еще раз спасибо за то, что вы делаете.
04-06-2010 17:27:13

веб-мастер

«Разве нет другого способа прочесть потоки, который позволит обойти любое несовершенство, которое может возникнуть в любой момент, и быть уверенным в том, что качество отображения будет постоянно?» Если мы разделим чтение на шаги, как ты сделал с fsockopen или как можно сделать с curl (см. этот поток: https://www.iqlevsha.ru/faq/viewtopic.php?id=97), ты всегда можешь воздействовать на данные до того, как они будут усыпаны функцией loadXML. В частности, можно устранить специальные коды с помощью str_replace или preg_replace.
05-06-2010 15:21:35

беда

Спасибо, поэтому я буду более глубоко работать над результатами, возвращенными любой из этих функций. Если результаты будут достаточно убедительными, я предоставлю вам код для включения в сценарий. Действительно, это может служить другим, чтобы этот «чистящий» модуль был стандартным. Искренне.