web-dev-qa-db-ja.com

ネスト関数呼び出しの制限の増加

PHPには非常に悪い制限が1つあります。a2()を呼び出すa1()、a3 ...を呼び出す関数a1()を呼び出すと、a99()a100()を呼び出すときに表示されます

致命的なエラー:関数のネストレベルが最大「100」に達しました。中止します!

100のネスト呼び出しの制限を500または10000に増やす方法はありますか?

これは私にとって非常に重要です。なぜなら、多くのコールバックを備えたイベントベースのシステムを開発しているからです。

124
barbushin

このエラーメッセージは、特にXDebug拡張機能から発生します。 PHP自体には、関数のネスト制限はありません。 php.iniで 設定 を変更します。

xdebug.max_nesting_level = 200

またはPHPコードで:

ini_set('xdebug.max_nesting_level', 200);

あなたが本当にそれを変更する必要があるかどうか(つまり、再帰関数の代替ソリューションがある場合)については、コードなしではわかりません。

247
netcoder

Zend、IonCube、またはxDebugがインストールされていますか?もしそうなら、それはおそらくあなたがこのエラーを得ているところです。

数年前にこれに遭遇しましたが、最終的にはZendがPHPではなくその制限を設けました。もちろん、これを削除すると、100回の繰り返しを超えることができますが、最終的にはメモリ制限に達します。

個人的には、調整が必要な設定とは対照的に、これはエラーであることをお勧めします。私のコードでは、コントローラの1つにライブラリと同じ名前のクラスがあり、それをトリップするように見えたためです。

エラーを出力し、これがトリガーされている場所を確認します。

1
Antony