Увеличение ограничения вызовов функций вложенности
В PHP существует один очень плохой предел: если вы вызываете некоторую функцию a1(), которая вызывает a2(), которая вызывает a3... поэтому, когда a99()
вызовет a100()
, вы увидите
Неустранимая ошибка: максимальный уровень вложенности функции "100" достигнут, прерывается!
Есть ли способ увеличить лимит в 100 гнездящихся вызовов до 500 или 10000?
Это очень важно для меня, потому что я разрабатываю систему на основе событий с большим количеством обратных вызовов.
Ответы
Ответ 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
Лично я бы предположил, что это ошибка, а не настройка, которая нуждается в настройке. В моем коде это было потому, что у меня был класс с таким же именем, как библиотека в одном из моих контроллеров, и он, казалось, отключил его.
Выведите ошибки и посмотрите, где это происходит.