增加嵌套函数调用限制

时间:2010-11-27 20:34:30

标签: php xdebug

PHP中有一个非常糟糕的限制:如果你调用一个调用a2()的函数a1(),那就调用a3 ......所以当a99()调用a100()时你会看到< / p>

  

致命错误:达到最大功能嵌套级别'100',正在中止!

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

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

4 个答案:

答案 0 :(得分:242)

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

xdebug.max_nesting_level = 200

或在您的PHP代码中:

ini_set('xdebug.max_nesting_level', 200);

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

答案 1 :(得分:13)

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

几年前我遇到过这个问题,结果是Zend把那个限制放在那里,而不是PHP。当然,删除它会让你超过100次迭代,但最终会达到内存限制。

答案 2 :(得分:1)

我个人认为这是一个错误,而不是需要调整的设置。在我的代码中,因为我有一个类与我的一个控制器中的库名相同,它似乎把它绊倒了。

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

答案 3 :(得分:-1)

是的,可以增加xdebug.max_nesting_levelphp.ini的值。如果这样做,请不要忘记重启apache服务器:

sudo /usr/sbin/apachectl restart

但是在大​​多数情况下,此错误不是由此引起的,而是由页面上的许多重定向或错误引起的。

因此,如果您有一个或观看日志,只需切换到调试。