Увеличение лимита вызовов вложенных функций - PullRequest
122 голосов
/ 27 ноября 2010

В PHP есть одно очень плохое ограничение: если вы вызываете некоторую функцию a1 (), которая вызывает a2 (), она вызывает a3 ... поэтому, когда a99() вызовет a100(), вы увидите

Неустранимая ошибка: достигнут максимальный уровень вложенности функции '100', прерывается!

Можно ли как-нибудь увеличить ограничение на 100 вложенных вызовов до 500 или 10000?

Это очень важно для меня, потому что я разрабатываю систему, основанную на событиях, с большим количеством обратных вызовов.

Ответы [ 4 ]

244 голосов
/ 27 ноября 2010

Это сообщение об ошибке происходит именно от расширения XDebug.Сам PHP не имеет ограничения на вложенность функций.Измените настройку в вашем php.ini:

xdebug.max_nesting_level = 200

или в вашем PHP-коде:

ini_set('xdebug.max_nesting_level', 200);

Если вам действительно нужно его изменить (т.е.: если есть альтернативное решение для рекурсивной функции), я не могу сказать без кода.

13 голосов
/ 27 ноября 2010

У вас установлены Zend, IonCube или xDebug?Если это так, то, вероятно, именно отсюда вы получаете эту ошибку.

Я столкнулся с этим несколько лет назад, и в итоге Zend установил этот предел, а не PHP.Конечно, его удаление позволит вам пройти 100 итераций, но в итоге вы достигнете пределов памяти.

1 голос
/ 10 мая 2017

Лично я хотел бы предположить, что это ошибка, а не настройка, требующая корректировки.В моем коде это было потому, что у меня был класс, который имел то же имя, что и библиотека в одном из моих контроллеров, и он, казалось, сработал.

Вывод ошибок и посмотреть, где это происходит.

0 голосов
/ 05 августа 2018

Да, можно увеличить значение xdebug.max_nesting_level в php.ini.Если вы сделали это, не забудьте перезапустить сервер apache:

sudo /usr/sbin/apachectl restart

Но в большинстве случаев эта ошибка не связана с этим, а с множеством перенаправлений или ошибок на вашей странице.

Так что просто переключитесь на отладку, если она у вас есть, или посмотрите свои логи.

...