【问题标题】:Fatal error: Allowed memory size of bytes exhausted when use str_get_html致命错误:使用 str_get_html 时允许的字节内存大小耗尽
【发布时间】:2020-08-21 14:35:28
【问题描述】:

我做了一个简单的请求,我得到了来自 curl_exec($ch); 的正确响应,但是当我调用静态方法 str_get_html 时,我的结果总是一样的。

Fatal error:  Allowed memory size of 536870912 bytes exhausted

我尝试增加内存memory_limit=2048M,但结果是一样的

我的代码:

$url = "https://www.php.net";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_HTTPHEADER, []);
$this->callback = HtmlDomParser::str_get_html(curl_exec($ch));
...

有什么建议吗?我可以使用正则表达式,但将是我最后的选择。

【问题讨论】:

  • 首先是检查 HTML 的大小。您可以尝试使用 DOMDocument,但在不知道页面大小的情况下,很难知道它是否适合它。
  • 根据本站(sitechecker.pro/page-size),html大小为:38.96 KB,看起来很小
  • 您确定在尝试增加内存时更改了正确的php.ini 文件吗?
  • phpinfo(); 告诉我,他不会撒谎。 :)

标签: php curl dom html-parsing


【解决方案1】:

我认为 HTML DOM Parser 不会在每次调用 file_get_html 或 str_get_html 时清理 DOM 中的内存,因此每次完成当前 DOM 时都需要明确地完成它。这就像在循环结束或使用完毕时添加 ->clear() 一样简单。

【讨论】:

  • 我也这样做了,但不起作用。 $dom->clear(); unset($dom);
猜你喜欢
  • 2017-12-13
  • 1970-01-01
  • 2014-04-07
  • 2016-09-24
  • 2012-12-27
  • 2011-02-23
  • 2016-04-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多