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


127

PHPには非常に悪い制限が1つあります。a2()を呼び出す関数a1()を呼び出すと、a3()a99()が呼び出されるので、いつ呼び出されるa100()かがわかります。

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

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

コールバックの多いイベントベースのシステムを開発しているので、これは私にとって重要です。


12
イベントフレームワークであっても、100は少し過剰に見えます。
Ignacio Vazquez-Abrams

7
@Ignacio:たとえイベントフレームワークに焦点が当てられていても、非常に高いネストレベルを必要とする再帰関数を持つことは非常に簡単です。そのようなシナリオでは、数万(または数百万)も珍しくありません。
2011

stackoverflow.com/a/36440027/2652524私はこの答えを使用して私の問題を解決します
グジャラートサンタナ

回答:


254

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

xdebug.max_nesting_level = 200

またはあなたのPHPコードで:

ini_set('xdebug.max_nesting_level', 200);

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


私も同じ問題を抱えていました。max_nesting_levelを100に設定しましたが、私の場合、場合によっては、1000回の再帰呼び出しが可能です。そのため、このxdebugエラーを回避するために10000に設定しました。すべての場合において、PHPを無制限にするよりも常に優れています。
SkaJess 2014年

9
あなたは、このお持ちでない場合はxdebug.max_nesting_level = 100、あなたにオプションをphp.iniのだけでそれを貼り付けます。
M.レザNasirloo

@Pedramこれをphp iniファイルにコピーする正しい方法は、通常のphp.iniではなく、/ etc / php5 / apache2 / conf.d / 20-xdebug.iniにあります。ちょうど良い習慣
エンリケケロ

3
@EnriqueQueroシステムとOSによって異なります。
ネットコーダ2016

できます!XDebugを使用するかどうかに関係なく、php.iniの行をコメントアウトすることもありません。私は明示的に使用しました:ini_set( 'xdebug.max_nesting_level'、-1);
user2928048 2016年

13

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

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


1

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

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.