В PHP есть один очень плохой предел: если вы вызываете некоторую функцию a1 (), которая вызывает a2 (), которая вызывает a3 … поэтому, когда a99()
вызовет a100()
вы увидите
Неустранимая ошибка: максимальный уровень вложенности функции «100» достигнут, прерывается!
- Как отладить в PHPStorm со встроенным веб-сервером с помощью инструмента командной строки Symfony
- Не удалось создать xdebug
- php xdebug: как профилировать процесс разветвления
- Пошаговое руководство. Как выполнить Xdebug по устранению неполадок подключения к IDE клиента
- Как добавить XDebug zend_extension в php.ini?
Есть ли способ увеличить лимит в 100 гнездящихся вызовов до 500 или 10000?
Это очень важно для меня, потому что я разрабатываю систему на основе событий с большим количеством обратных вызовов.
Это сообщение об ошибке появляется специально из расширения XDebug. Сам PHP не имеет ограничения на вложенность функции. Измените настройку в php.ini:
xdebug.max_nesting_level = 200
или в вашем PHP-коде:
ini_set('xdebug.max_nesting_level', 200);
Что касается, если вам действительно нужно изменить его (то есть: если есть альтернативное решение для рекурсивной функции), я не могу сказать без кода.
У вас установлены Zend, IonCube или xDebug? Если это так, вероятно, вы получаете эту ошибку.
Я столкнулся с этим несколько лет назад, и в конечном итоге Zend поставил этот предел, а не PHP. Конечно, его удаление позволит вам пройти 100 итераций, но в конечном итоге вы попадете в пределы памяти.
Если вы используете 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
Лично я бы предположил, что это ошибка, а не настройка, которая нуждается в настройке. В моем коде это было потому, что у меня был класс с таким же именем, как библиотека в одном из моих контроллеров, и, похоже, он его отключил.
Выведите ошибки и посмотрите, где это происходит.