Подтвердить что ты не робот

Увеличение ограничения вызовов функций вложенности

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

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

Есть ли способ увеличить лимит в 100 гнездящихся вызовов до 500 или 10000?

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

4b9b3361

Ответ 1

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

xdebug.max_nesting_level = 200

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

ini_set('xdebug.max_nesting_level', 200);

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

Ответ 2

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

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

Ответ 3

Если вы используете XDebug (например, с XAMPP), вы можете установить уровень вложенности, добавив это в файл php.ini (я бы предложил положить внизу файла):

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

Это установит ограничение 500, но при необходимости может быть больше. Ссылка только на файл XDebug php_xdebug.dll

Ответ 4

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

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