2010-11-27 11 views
113

Hay un límite muy mala en PHP: si se llama a una función A1() que llama A2(), que llama a a3 ... así que cuando a99() llamarán a100() verállama límite

Fatal error: Maximum function nesting level of '100' reached, aborting!

¿Hay alguna forma de aumentar el límite de 100 llamadas de anidamiento a 500 o 10000?

Esto es crítico para mí porque estoy desarrollando un sistema basado en eventos con muchas devoluciones de llamada.

+10

100 parece un poco excesivo, incluso para un marco de eventos. –

+7

@Ignacio: es bastante simple, incluso si el foco está en un marco de eventos, tener una función recursiva que necesita un nivel de anidación mucho más alto. Decenas de miles (o incluso millones) no es raro en tales escenarios. – Abel

+0

http://stackoverflow.com/a/36440027/2652524 Resuelvo el mío usando esta respuesta –

Respuesta

228

Este mensaje de error proviene específicamente de la extensión XDebug. PHP en sí mismo no tiene un límite de anidación de funciones. Cambiar the setting en su php.ini:

xdebug.max_nesting_level = 200 

o en su código PHP:

ini_set('xdebug.max_nesting_level', 200); 

cuanto a si realmente hay que cambiar (es decir: si hay una solución alternativa a una función recursiva) No puedo decir sin el código.

+0

Tuve el mismo problema. Mi max_nesting_level se estableció en 100, pero en mi caso, en algunos casos, es posible tener 1000 llamadas recursivas. Entonces, configuré a 10000 para evitar este error de xdebug. En todos los casos, siempre es mejor que dejar PHP sin límite. – SkaJess

+1

funciona ;-) y puede dar problemas con magento 2 install – jruzafa

+9

Si no tiene esta opción 'xdebug.max_nesting_level = 100' en su *** php.ini *** solo péguelo. – Pedram

14

¿Tiene instalado Zend, IonCube o xDebug? Si es así, es probable que de aquí provenga este error.

Me encontré con esto hace unos años, y terminó siendo Zend poniendo ese límite allí, no PHP. Por supuesto que eliminarlo te permitirá superar las 100 iteraciones, pero eventualmente llegarás a los límites de la memoria.

2

Si está utilizando XDebug (con XAMPP, por ejemplo), puede ajustar el nivel de anidación añadiendo esto a php.ini archivo (Yo sugeriría que poner en el fondo del archivo):

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

Este establecerá en el límite de 500 pero podría más si es necesario. Solo enlace al archivo XDebug php_xdebug.dll

1

Personalmente, sugeriría que se trata de un error en comparación con una configuración que debe ajustarse. En mi código era porque tenía una clase que tenía el mismo nombre que una biblioteca dentro de uno de mis controladores y parecía que se había estropeado.

Errores de salida y vea dónde se está desencadenando esto.