2010-11-27 120 views
113

PHP中一个非常糟糕的上限:如果您调用一些功能A1()调用A2()调用A3 ......所以,当a99()会叫a100()你会看到增加嵌套函数调用限制

Fatal error: Maximum function nesting level of '100' reached, aborting!

有没有办法将100个嵌套调用的限制增加到500或10000?

这对我来说很重要,因为我正在开发一个具有大量回调的基于事件的系统。

+10

100似乎有点过分,即使是一个事件框架。 – 2010-11-27 20:47:05

+7

@Ignacio:即使焦点放在事件框架上,它也非常简单,只需要一个递归函数,它需要更高的嵌套级别。数万(甚至数百万)在这种情况下并不少见。 – Abel 2011-12-28 12:50:08

回答

228

此错误消息来自XDebug扩展。 PHP本身没有函数嵌套限制。在php.ini更改the setting

xdebug.max_nesting_level = 200 

或在PHP代码:

ini_set('xdebug.max_nesting_level', 200); 

至于如果你真的需要改变它(即:如果有一个替代解决方案递归函数) ,没有代码我就说不出来。

14

您是否安装了Zend,IonCube或xDebug?如果是这样,那可能是你从这个错误中得到的。

几年前我遇到过这种情况,它最终成为了Zend将这个限制放在那里,而不是PHP。当然,删除它可以让你通过100次迭代,但最终会达到内存限制。

2

如果你使用了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

1

我个人建议这是一个错误,而不是一个需要调整的设置。在我的代码中,这是因为我有一个类与我的控制器中的一个库具有相同的名称,并且它似乎将其启动。

输出错误并查看触发的位置。