淘小兔

xdebug.max_nesting_level

类型: integer(整型), 默认值: 100

用来控制对无限递归的保护机制。 此项的值限制了在脚本中断之前,运行嵌套执行的函数的最大数目(即最大递归次数,超过这个数,php脚本将中断执行)。

限制递归

如果应用程序使用递归 —— 例如,计算斐波纳契数列 —— 并且终端环境不正确,应用程序会运行很长一段时间后才用尽内存或超时。您可以设定 xdebug.max_nesting_level 参数来限定递归深度。例如,xdebug.max_nesting_level = 50 将把递归深度限定为 50 次嵌套调用,然后将强制终止应用程序。下面演示一下,在启用 Xdebug 的状态下运行下列代码:

清单 2. 限制递归

1

2

3

4

5

6

7

<?php

    function deep_end( ) {

        deep_end();

    }

     

    deep_end();

?>

函数 deep_end() 将逐行进行到最底部。Xdebug 将在 49 次函数调用后介入并得到图 2(顺便说一句,main() 的初始调用用于启动程序计数作为第 1 次调用)。

图 2. 如果调用堆栈超出限制,Xdebug 将终止执行

 

如果应用程序大量使用递归隔离并解决较大的问题,则需要把深度相应地设定得 “更低”。否则,将 xdebug.max_nesting_level 设为较小的值,这样可以更快速地捕捉失控的函数调用序列。

 

PHP 中当函数调用层数超过限制的时候就会出现 Maximum function nesting level of ‘100’ reached,默认情况下函数嵌套不能超过 100 层,我们可以通过修改配置文件来解决此问题:修改 php.ini
添加 xdebug.max_nesting_level=600。

下载仅供下载体验和测试学习,不得商用和正当使用。

下载体验

请输入密码查看内容!

如何获取密码?

 

点击下载