增加嵌套函数调用限制

在PHP中有一个非常糟糕的限制:如果你调用一个函数a1()调用a2(),那么调用a3 …所以当a99()将调用a100()你会看到

致命错误:达到“100”的最大function嵌套级别,正在中止!

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

这对我来说很重要,因为我正在开发一个有很多callback的基于事件的系统。

此错误消息来自XDebug扩展特别。 PHP本身没有函数的嵌套限制。 更改您的php.ini中的设置 :

 xdebug.max_nesting_level = 200 

或者在你的PHP代码中:

 ini_set('xdebug.max_nesting_level', 200); 

至于如果你真的需要改变它(即:如果有一个recursion函数的替代解决scheme),我不能没有代码。

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

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

如果您使用的是XDebug(例如XAMPP),您可以通过将其添加到php.ini文件(我build议放在文件的底部)来设置嵌套级别:

 [XDebug] zend_extension = "C:\xampp\php\ext\php_xdebug.dll" ; Other settings if needed xdebug.max_nesting_level = 500 

这将设置为500的限制,但如果需要可以更多。 只链接到XDebug文件php_xdebug.dll

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

输出错误,看看这是触发的地方。