PHP中一个非常糟糕的上限:如果您调用一些功能A1()调用A2()调用A3 ......所以,当a99()
会叫a100()
你会看到增加嵌套函数调用限制
Fatal error: Maximum function nesting level of '100' reached, aborting!
有没有办法将100个嵌套调用的限制增加到500或10000?
这对我来说很重要,因为我正在开发一个具有大量回调的基于事件的系统。
PHP中一个非常糟糕的上限:如果您调用一些功能A1()调用A2()调用A3 ......所以,当a99()
会叫a100()
你会看到增加嵌套函数调用限制
Fatal error: Maximum function nesting level of '100' reached, aborting!
有没有办法将100个嵌套调用的限制增加到500或10000?
这对我来说很重要,因为我正在开发一个具有大量回调的基于事件的系统。
此错误消息来自XDebug扩展。 PHP本身没有函数嵌套限制。在php.ini更改the setting:
xdebug.max_nesting_level = 200
或在PHP代码:
ini_set('xdebug.max_nesting_level', 200);
至于如果你真的需要改变它(即:如果有一个替代解决方案递归函数) ,没有代码我就说不出来。
您是否安装了Zend,IonCube或xDebug?如果是这样,那可能是你从这个错误中得到的。
几年前我遇到过这种情况,它最终成为了Zend将这个限制放在那里,而不是PHP。当然,删除它可以让你通过100次迭代,但最终会达到内存限制。
如果你使用了XDebug(与XAMPP,例如),您可以通过添加这php.ini
文件中设置嵌套级(我建议把在文件的底部):
[XDebug]
zend_extension = "C:\xampp\php\ext\php_xdebug.dll"
; Other settings if needed
xdebug.max_nesting_level = 500
这将设置为500限制,但如果需要可以更多。只有链接到XDebug文件php_xdebug.dll
我个人建议这是一个错误,而不是一个需要调整的设置。在我的代码中,这是因为我有一个类与我的控制器中的一个库具有相同的名称,并且它似乎将其启动。
输出错误并查看触发的位置。
100似乎有点过分,即使是一个事件框架。 – 2010-11-27 20:47:05
@Ignacio:即使焦点放在事件框架上,它也非常简单,只需要一个递归函数,它需要更高的嵌套级别。数万(甚至数百万)在这种情况下并不少见。 – Abel 2011-12-28 12:50:08