29

Symfony 2.1 のプロジェクトがあります。composer コンポーネント (Gedemo、Symfony コア、Doctrine、Twig など) を更新した後、次のエラーが発生しました。

Fatal error: Maximum function nesting level of '100' reached, aborting! in /var/www/{path}/vendor/twig/twig/lib/Twig/Token.php on line 78

私はPHP 5.4を持っています。このエラーの原因は何ですか?

4

5 に答える 5

55

ファイルを見つけxdebug.iniます。

$ locate xdebug.ini
/etc/php5/conf.d/20-xdebug.ini
/etc/php5/mods-available/xdebug.ini

私の場合、ファイルは/etc/php5/conf.d/20-xdebug.ini. それを開いて、次の行を追加します。

xdebug.max_nesting_level = 1000

FPM サーバーを再起動することを忘れないでください。

于 2012-11-03T20:54:31.480 に答える
2

無限ループの原因となるエラーコードですが、時折エラー無しの処理が入れ子関数呼び出し100回を超える事があります。

これを修正するには、php.ini の xdebug セクションを開き、次の行を追加します (150 の代わりに必要なものを入力します)。

 [xdebug]
xdebug.max_nesting_level = 150
于 2014-03-01T11:37:22.460 に答える
1

質問の「何が原因で..」の部分を理解することに興味があるかもしれない新しい Twig 開発者にちょっとしたヒントを共有するだけです。

明らかに元の質問では、最大ネストレベルはかなり低く (100) あり、一部のコメントで言及されているように、通常の状況では低すぎる可能性があります。

ただし、上記のアドバイスに従ってレベルを 256、512、または 1000 に上げても同じエラーが発生する場合は、おそらく最も可能性が高いのはテンプレートの継承です。(extendsテンプレートの最初の行のキーワード)

これは、テンプレートが複数の場所にあるプロジェクトの場合に特に当てはまります。

プロジェクト構造の例を想像してください。

── plugins
   ├── your-plugin
   |   ├── views
   |   │   ├── base.twig
   │   │   ├── special-element.twig
   │   │   ├── some-other-element.twig
── theme
   ├── base.twig
   ├── index.twig
   ├── sub-page.twig

プラグインには、テーマの下にbase.twigある を拡張するテンプレートがあります。ただし、テンプレートの場所が正しく構成されていないと、テンプレートが何度も拡張され、無限ループが発生する可能性があります。base.twig

これが事実であるかどうかを確認する方法は?より正確な解決策について聞いてうれしいですが、完全なサーバーパスで親テンプレートを参照するのと同じくらい簡単に、デバッグ目的でのみ開始できます。

{% extends "/var/www/path-to-your-template/" %}

絶対パスで動作するようになった場合は、テンプレート パスに何か問題があることを確信できます。詳細については、こちらをご覧ください: Twig テンプレートの命名と場所

于 2018-02-06T08:30:03.770 に答える
-2

私の場合、php.iniで PHP が使用するメモリの量を 512MB に増やす必要がありました。また、Symfony によって生成されたデフォルト設定を更新するために、サイトのルート フォルダーでコンポーザーの更新を行いました。

于 2015-01-23T12:45:05.363 に答える