PHP命令行脚本忽略了php.ini和ini_set('memory_limit',...)指令

时间:2009-11-17 20:58:22

标签: domdocument php simple-html-dom memory-limit

我面临常见的“致命错误:内存不足(分配30408704)(试图分配24个字节)......”PHP致命错误。通过Apache提供的页面没有表现出这种行为。

我尝试了以下内容:

  1. 将php.ini中的memory_limit增加到更大的值。
  2. 通过调用ini_set('memory_limit', -1)ini_set('memory_limit', '-1')ini_set('memory_limit', 100000000)ini_set('memory_limit', '128M')等来增加脚本内的memory_limit
  3. unset()不需要的数组和对象,以鼓励垃圾收集器释放内存。
  4. 与网络托管服务商联系。他们通常非常有能力和知识渊博,但也无法帮助我解决这个问题。
  5. 我尝试使用-c命令行标志明确地包含一个php.ini文件来手动选择具有各种值的特定php.ini文件。
  6. 我尝试使用原始字节数和64M,128M等值设置php.ini中的memory_limit。
  7. 托管服务提供商能够以root身份运行该脚本,没有任何问题,但遇到了我使用非root用户运行时遇到的相同问题。也许涉及某种权限问题?
  8. 无论我尝试什么,错误信息都是一样的。我的命令行脚本似乎忽略了对memory_limit的更改。

    我倾向于尝试确保我的脚本具有内存效率,但我目前需要通过Simple HTML DOM解析大量HTML,并且它在解析器中遇到了内存不足的问题。为了减少脚本的内存占用,我尝试使用DOMDocument代替。这也无济于事。实际上,现在在脚本的其他地方触发了内存不足错误。

    我的问题:有没有人遇到过这个或类似的问题?你有什么建议吗?

    谢谢。

2 个答案:

答案 0 :(得分:7)

事实证明,问题是由在所有命令行脚本上设置硬内存限制的服务器上启用了shell fork炸弹保护引起的。这是我的网站主机在我不知情的情况下启用的。

答案 1 :(得分:3)

你在cli上的PHP可能正在使用不同的php.ini到你的apache php。尝试使用phpinfo()并使用您认为使用的ini文件进行检查。