29

我有一个关于 Symfony 2.1 的项目。更新作曲家组件(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 回答
0

如果增加xdebug.max_nesting_level = 1000失败的检查命名空间是正确的

例如:namespace App\Entities;但文件夹名称为小写app

那么实体应该包含命名空间namespace app\Entities;

于 2018-06-16T22:16:31.370 回答
-2

就我而言,我不得不将php.ini中 PHP 使用的内存量增加到 512MB。此外,我对站点根文件夹进行了composer update以更新 Symfony 生成的默认设置。

于 2015-01-23T12:45:05.363 回答