代码之家  ›  专栏  ›  技术社区  ›  barbushin

增加嵌套函数调用限制

  •  121
  • barbushin  · 技术社区  · 13 年前

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

    致命错误:“100”的最大函数嵌套级别已达到,中止!

    有没有办法把100个嵌套调用的限制提高到500个或10000个?

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

    4 回复  |  直到 7 年前
        1
  •  248
  •   Potherca    8 年前

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

    xdebug.max_nesting_level = 200
    

    或者在您的PHP代码中:

    ini_set('xdebug.max_nesting_level', 200);
    

    至于是否真的需要更改它(即:如果有递归函数的替代解决方案),没有代码我无法判断。

        2
  •  13
  •   Ryan C -Xnuiem- Meinzer    13 年前

    您是否安装了Zend、IonCube或xDebug?如果是的话,那可能就是你得到这个错误的原因。

    几年前我遇到过这个问题,结果是Zend设置了这个限制,而不是PHP。当然,删除它可以让您通过100次迭代,但最终会达到内存限制。

        3
  •  1
  •   Antony    7 年前

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

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

        4
  •  -1
  •   anothernode David Joel Lukombo    6 年前

    是的,有可能增加 xdebug.max_nesting_level 在里面 php.ini . 如果您这样做了,请不要忘记重新启动apache服务器:

    sudo /usr/sbin/apachectl restart
    

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

    所以只要切换到调试,如果你有一个或看你的日志。