Я пытаюсь использовать SimplePie, чтобы получить список ссылок через RSS-каналы, а затем очистить эти каналы, используя Simple HTML DOM для получения изображений. Я могу заставить SimplePie работать, чтобы тянуть ссылки и сохранять их в массиве. Я также могу использовать анализатор Simple HTML DOM, чтобы получить ссылку на изображение, которое я ищу. Проблема в том, что когда я пытаюсь использовать SimplePie и Simple HTML DOM одновременно, я получаю ошибку 500. Вот код:
set_time_limit(0);
error_reporting(0);
$rss = new SimplePie();
$rss->set_feed_url('http://contently.com/strategist/feed/');
$rss->init();
foreach($rss->get_items() as $item)
$urls[] = $item->get_permalink();
unset($rss);
/*
$urls = array(
'https://contently.com/strategist/2016/01/22/whats-in-a-spotify-name-and-5-other-stories-you-should-read/',
'https://contently.com/strategist/2016/01/22/how-to-make-content-marketing-work-inside-a-financial-services-company/',
'https://contently.com/strategist/2016/01/22/glenn-greenwald-talks-buzzfeed-freelancing-the-future-journalism/',
...
'https://contently.com/strategist/2016/01/19/update-a-simpler-unified-workflow/');
*/
foreach($urls as $url) {
$html = new simple_html_dom();
$html->load_file($url);
$images = $html->find('img[class=wp-post-image]',0);
echo $images;
$html->clear();
unset($html);
}
Я закомментировал массив urls, но он идентичен массиву, созданному циклом SimplePie (я создал его вручную из результатов). Он не выполняется по команде поиска в первый раз в цикле. Если я закомментирую строку $ rss-> init () и использую статический массив url, весь код выполняется без ошибок, но не дает желаемого результата — конечно. Любая помощь очень ценится!
Там странная несовместимость между simple_html_dom
а также SimplePie
, Загрузка HTML, simple_html_dom->root
не загружен, вызывая ошибку для любой другой операции.
Любопытно, что переходя в режим функций вместо объектного режима, для меня это работает нормально:
$html = file_get_html( $url );
вместо:
$html = new simple_html_dom();
$html->load_file($url);
Тем не мение, simple_html_dom
Известно, что вызывает проблемы, прежде всего об использовании памяти.
Отредактировано:
ОК, я нашел ошибку.
Он проживает на simple_html_dom->load_file()
, который вызывает стандартную функцию file_get_contents()
а затем проверьте результат через error_get_last()
и — если обнаружена ошибка — сбросить эти собственные данные. Но если ошибка произошла раньше (в моем тесте SimplePie
вывести предупреждение ./cache is not writeable
) эта ранее ошибка интерпретируется simple_html_dom
как file_get_contents()
потерпеть поражение.
Если у вас установлен PHP 7, вы можете позвонить error_clear_last()
после unset($rss)
и твой код должен работать. В противном случае вы можете использовать мой код выше или предварительно загрузить HTML-данные в переменную, а затем вызвать simple_html_dom->load()
вместо simple_html_dom->load_file()
Других решений пока нет …