PHP 命令行脚本忽略 php.ini 和 ini_set('memory_limit',...) 指令
-
20-09-2019 - |
题
我面临着常见的“致命错误:内存不足(已分配 30408704)(尝试分配 24 字节)...” PHP 致命错误。通过 Apache 提供服务的页面没有表现出这种行为。
我尝试过以下方法:
- 将 php.ini 中的 memory_limit 增加到一个更大的值。
- 通过调用来增加脚本本身的内存限制
ini_set('memory_limit', -1)
,ini_set('memory_limit', '-1')
,ini_set('memory_limit', 100000000)
,ini_set('memory_limit', '128M')
, , ETC。 unset()
处理不需要的数组和对象以鼓励垃圾收集器释放内存。- 联系虚拟主机。他们通常非常有能力和知识渊博,但也无法帮助我解决这个问题。
- 我已经尝试使用显式包含 php.ini 文件
-c
命令行标志来手动选择具有各种值的特定 php.ini 文件。 - 我尝试使用原始字节数和 64M、128M 等值在 php.ini 中设置内存限制。
- 托管提供商能够以 root 身份运行该脚本,没有出现任何问题,但在使用非 root 用户运行该脚本时遇到了与我相同的问题。也许涉及某种权限问题?
无论我尝试什么,错误消息都是一样的。看来我的命令行脚本忽略了对 memory_limit
.
我倾向于尝试确保我的脚本具有内存效率,但我目前需要通过以下方式解析大量 HTML 简单的 HTML DOM 我在解析器中遇到了内存不足的问题。为了减少脚本的内存占用,我尝试使用 DOM文档 反而。这也没有帮助。事实上,内存不足错误现在是在脚本的其他地方触发的。
我的问题:有没有人经历过这个或类似的问题?你有什么建议?
谢谢。
解决方案
事实证明,该问题是由于服务器上启用了 shell fork 炸弹保护而引起的,该保护对所有命令行脚本设置了硬内存限制。这是我的网络主机在我不知情的情况下启用的。
其他提示
您的 cli 上的 PHP 可能使用与您的 apache php 不同的 php.ini。尝试一个 phpinfo()
并使用您认为它使用的 ini 文件检查它。
不隶属于 StackOverflow