web-dev-qa-db-fra.com

Augmentation du nombre d'appels aux fonctions d'imbrication

Il y a une très mauvaise limite en PHP: si vous appelez une fonction a1 () qui appelle a2 (), qui appelle a3 ... alors quand a99() appellera a100(), vous verrez

Erreur fatale: niveau maximum d'imbrication de fonction de '100' atteint, abandon!

Est-il possible d'augmenter la limite de 100 appels imbriqués à 500 ou 10 000?

Ceci est essentiel pour moi car je développe un système basé sur des événements avec beaucoup de rappels.

124
barbushin

Ce message d'erreur provient spécifiquement de l'extension XDebug. PHP lui-même n'a pas de limite d'imbrication de fonctions. Changez le paramètre dans votre php.ini:

xdebug.max_nesting_level = 200

ou dans votre PHP code:

ini_set('xdebug.max_nesting_level', 200);

Quant à savoir si vous devez vraiment le changer (c'est-à-dire: s'il existe une solution alternative à une fonction récursive), je ne peux pas dire sans le code.

247
netcoder

Avez-vous installé Zend, IonCube ou xDebug? Si c'est le cas, c'est probablement de là que vient cette erreur.

Je me suis heurté à cela il y a quelques années, et c'est finalement Zend qui a imposé cette limite, pas PHP. Bien sûr, le supprimer vous permettra de dépasser les 100 itérations, mais vous atteindrez éventuellement les limites de la mémoire.

13

Personnellement, je dirais que c'est une erreur par opposition à un paramètre qui doit être ajusté. Dans mon code, c'était parce que j'avais une classe qui avait le même nom qu'une bibliothèque dans l'un de mes contrôleurs et ça a semblé la dérouter.

Erreurs de sortie et voir où cela est déclenché.

1
Antony