PHP中有一个非常糟糕的限制:如果你调用一个调用a2()的函数a1(),那就调用a3 ......所以当a99()
调用a100()
时你会看到< / p>
致命错误:达到最大功能嵌套级别'100',正在中止!
有没有办法将100个嵌套调用的限制增加到500或10000?
这对我来说至关重要,因为我正在开发一个带有大量回调的基于事件的系统。
答案 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_level
中php.ini
的值。如果这样做,请不要忘记重启apache服务器:
sudo /usr/sbin/apachectl restart
但是在大多数情况下,此错误不是由此引起的,而是由页面上的许多重定向或错误引起的。
因此,如果您有一个或观看日志,只需切换到调试。