【问题标题】:Fatal error: Out of memory [closed]致命错误:内存不足[关闭]
【发布时间】:2011-10-28 13:37:21
【问题描述】:

错误:

致命错误:内存不足(分配123469824)(试图分配71 字节)在 /home/test/tset/tset.net/public_html/test/simple_html_dom.php 上线 第1236章

是的,我知道其中有很多问题。但我没有意识到避免这个错误是多么容易。我需要如果出现这个错误,只需从下一个值开始循环。

我用simplehtmldom

代码:

$html = file_get_html('http://www.windowsaffinity.com/?p=14721');

编辑: *最大内存不足*

【问题讨论】:

  • 请发布您的代码。您的 PHP 代码使用的内存超出了 php.ini 中设置的允许内存。
  • 我理解错误,我不知道如何简单地避免它。
  • PHP 的最大内存大小很可能不足以使用相关文档,但如果不查看设置(以及调用它的代码)就不可能知道。我会尽快添加其他信息,否则这个问题可能会被关闭。
  • 我以前听过对 simplehtmldom 的批评(认为它使用正则表达式来解析)。你最好使用正确的DOM parser
  • 根据您的编辑,您似乎解决了问题?如果不是这种情况,请标记您的问题,以便版主注意进行审核。

标签: php parsing html-parsing out-of-memory


【解决方案1】:

您可以通过ini_set 提高 php 的内存限制,但这只能在每个脚本的基础上完成(例如,从非常大的 xml/etc 文件中导入数据)。解决提高内存限制的好问题 - Increasing PHP memory_limit. At what point does it become insane?

编辑:阅读更新帖子,在您的情况下,我会提高内存限制 - 假设您编写了一个一次性使用的快速脚本。如果ini_set 被禁用(即,很可能是在共享主机上),请在 php.ini 中设置 memory_limit。

另一种选择是使用套接字来获取页面(以小块读取数据,并保存到文件或 w/e)或运行系统命令(例如,wget -O /save/here.txt http://blah.com

【讨论】:

    【解决方案2】:

    您无法在 PHP 中捕获致命错误。毕竟,它们是致命的。

    在不确切知道您要做什么的情况下,是否可以在数据库或其他文件中存储某种计数器或其他位置参数以“保留您的位置”,直到您可以重新启动脚本。

    如果您的内存不足,您就会遇到更大的问题。要么你的主机对于你想要做的事情来说太小了,要么你咬得比你能咀嚼的多(或两者兼而有之)。尝试将您的流程分成多个部分,并在完成后调用unset() 和/或将null 分配给变量以限制您正在使用的空间,并告诉垃圾收集器您的对象有资格收集起来。

    【讨论】:

      猜你喜欢
      • 2014-06-01
      • 2014-01-25
      • 2011-10-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-08
      • 1970-01-01
      相关资源
      最近更新 更多