Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Solution for "Fatal error: Maximum function nesting level of '100' reached, aborting!" in PHP

Increase the value of xdebug.max_nesting_level in your php.ini


A simple solution solved my problem. I just commented this line:

zend_extension = "d:/wamp/bin/php/php5.3.8/zend_ext/php_xdebug-2.1.2-5.3-vc9.dll

in my php.ini file. This extension was limiting the stack to 100 so I disabled it. The recursive function is now working as anticipated.


Rather than going for a recursive function calls, work with a queue model to flatten the structure.

$queue = array('http://example.com/first/url');
while (count($queue)) {
    $url = array_shift($queue);

    $queue = array_merge($queue, find_urls($url));
}

function find_urls($url)
{
    $urls = array();

    // Some logic filling the variable

    return $urls;
}

There are different ways to handle it. You can keep track of more information if you need some insight about the origin or paths traversed. There are also distributed queues that can work off a similar model.


Another solution is to add xdebug.max_nesting_level = 200 in your php.ini


Rather than disabling the xdebug, you can set the higher limit like

xdebug.max_nesting_level=500


It's also possible to fix this directly in php, for example in the config file of your project.

ini_set('xdebug.max_nesting_level', 200);


Go into your php.ini configuration file and change the following line:

xdebug.max_nesting_level=100

to something like:

xdebug.max_nesting_level=200