Intereting Posts
удалить тег версии xml, когда xml создается в php fopen не работает на моем сервере Может ли недавно выпущенная среда выполнения GAE PHP получить доступ к встроенному хранилищу данных GAE? Почему PHP DOM не содержит косой черты на закрывающих тегах? Почему я продолжаю получать сообщение об ошибке php с непредвиденным «)» в инструкции FOR? Модели саморегуляции вызывают максимальный уровень гнездования функции x в Laravel 4 как присоединиться к двум таблицам по общим атрибутам в mysql и php? MySQL Заказ по индексу id из отдельной таблицы Получить полученный XML с PHP SOAP Server Корневой путь исходного документа сервера в PHP Как динамически создавать новое свойство Regexp для добавления атрибута в любые теги xml Глобальная переменная – соединение с базой данных? Запрещенная ошибка при отправке простой PHP-формы Функция почты PHP не работает на сервере Centos

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

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

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

Есть ли способ увеличить лимит в 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

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

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