Php 同时使用SimplePie和SimpleHTMLDOM

Php 同时使用SimplePie和SimpleHTMLDOM,php,simple-html-dom,simplepie,Php,Simple Html Dom,Simplepie,我正在尝试使用SimplePie通过RSS提要提取链接列表,然后使用简单的HTML DOM提取这些提要以提取图像。我能够让SimplePie工作来提取链接并将它们存储在一个数组中。我还可以使用简单的HTMLDOM解析器来获取我正在寻找的图像链接。问题是,当我试图同时使用SimplePie和SimpleHTMLDOM时,我得到一个500错误。代码如下: set_time_limit(0); error_reporting(0); $rss = new SimplePie(); $rss->

我正在尝试使用SimplePie通过RSS提要提取链接列表,然后使用简单的HTML DOM提取这些提要以提取图像。我能够让SimplePie工作来提取链接并将它们存储在一个数组中。我还可以使用简单的HTMLDOM解析器来获取我正在寻找的图像链接。问题是,当我试图同时使用SimplePie和SimpleHTMLDOM时,我得到一个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);
}

我注释掉了URL数组,但它与SimplePie循环创建的数组相同(我根据结果手动创建了它)。它在第一次通过循环执行find命令时失败。如果我注释掉$rss->init()行并使用静态url数组,代码运行时不会出错,但不会给出我想要的结果——当然。非常感谢您的帮助

simple\u html\u dom
simplepi
之间有一种奇怪的不兼容。加载html时,未加载
simple\u html\u dom->root
,导致任何其他操作出错

奇怪的是,传递到函数模式而不是对象模式,对我来说,它工作得很好:

$html = file_get_html( $url );
而不是:

$html = new simple_html_dom();
$html->load_file($url);
无论如何,
simple\u html\u dom
是众所周知的导致问题的原因,尤其是内存使用问题

编辑:

好的,我找到了错误。 它位于
simple\u html\u dom->load\u file()
上,调用标准函数
file\u get\u contents()
,然后通过
error\u get\u last()
检查结果,如果发现错误,则取消设置自己的数据。但是,如果以前发生过错误(在我的测试中,
SimplePie
输出一条警告,
/cache不可写
),则以前的错误会被
simple\u html\u dom
解释为
文件获取内容()
失败


如果安装了PHP7,可以在
unset($rss)
之后调用
error\u clear\u last()
,代码应该可以正常工作。否则,您可以使用上面的“我的代码”或将html数据预加载到变量中,然后调用
simple\u html\u dom->load()
而不是
simple\u html\u dom->load\u file()
simple\u html\u dom
SimplePie
之间存在一种奇怪的不兼容。加载html时,未加载
simple\u html\u dom->root
,导致任何其他操作出错

奇怪的是,传递到函数模式而不是对象模式,对我来说,它工作得很好:

$html = file_get_html( $url );
而不是:

$html = new simple_html_dom();
$html->load_file($url);
无论如何,
simple\u html\u dom
是众所周知的导致问题的原因,尤其是内存使用问题

编辑:

好的,我找到了错误。 它位于
simple\u html\u dom->load\u file()
上,调用标准函数
file\u get\u contents()
,然后通过
error\u get\u last()
检查结果,如果发现错误,则取消设置自己的数据。但是,如果以前发生过错误(在我的测试中,
SimplePie
输出一条警告,
/cache不可写
),则以前的错误会被
simple\u html\u dom
解释为
文件获取内容()
失败


如果安装了PHP7,可以在
unset($rss)
之后调用
error\u clear\u last()
,代码应该可以正常工作。否则,您可以使用上面的“我的代码”或将html数据预加载到变量,然后调用
simple\u html\u dom->load()
,而不是
simple\u html\u dom->load\u file()

Awesome,fusion3k。我的服务器没有达到PHP7,所以我使用了您的第一个解决方案,它工作得很好。非常感谢。太棒了,fusion3k。我的服务器没有达到PHP7,所以我使用了您的第一个解决方案,它工作得很好。非常感谢。