我尝试运行此命令在我的 symfony 项目(1.4)中构建模型:
php symfony propel:build-model( or all )
我有这个错误:
PHP Fatal error: Allowed memory size of 33554432 bytes exhausted (tried to allocate 20 bytes) in /home/sfprojects/jobeet/lib/vendor/symfony/lib/util/sfClassManipulator.class.php on line 176
我在询问这里的人之前进行了搜索,所以我将 php.ini 中的
memory_limit = 64M
更改为 128M , 510M , 1024M ...
但我遇到了同样的错误,这真的让我抓狂!
我正在使用 Ubuntu 和 apache2、php5...
确保您为 php-cli 而不是 Apache 编辑了
php.ini
文件。
在 /etc/php5/cli/php.ini
适用于您的 Ubuntu。
编辑:抱歉,这是对如何增加 Symfony 中允许的内存大小?(我同时打开了两者。)
您的composer.json 中可能有类似的内容:
"scripts": {
"auto-scripts": {
"cache:clear": "symfony-cmd",
替换为
"scripts": {
"auto-scripts": {
"php -dmemory_limit=512M bin/console cache:clear": "script",
您应该避免将转储放入循环中
控制器
或者在你的树枝模板中使用
{% for row in rows %}
{{ dump(row) }}
{% endfor %}
我在此处添加此注释是因为这是搜索词弹出的第二页“Php symfony:致命错误允许耗尽 xx 字节的内存大小”。
我最近遇到了这个问题
Symfony 6.3.7
。我花了几天时间才解决,因为我在互联网上找不到可以提供帮助的正确资源。
一般来说,增加
memory_limit
并不是最好的解决方案(顺便说一句,我将我的设置为 -1 并增加了 max_x_time,但什么也没有)。您需要进行调查才能找到问题的根本原因。
对我来说,
$kernel->handle($request)
;在 public/index.php 中无法终止其执行或抛出错误,因此 CLI 和浏览器中都没有 symfony 转储/日志,我只是从浏览器中得到了 HTTP ERROR 500
。我一直遵循 $kernel->handle 函数,直到供应商中出现一堆转储,然后使用 PhpDumper.php
。
事实证明,有一个 git diff
尚未被 circular reference exception
检测到/控制,我不知道为什么。我尝试使用 Symfony 5.4、Symfony 6.3.8 重现相同的错误,并且已得到正确处理。最后,多亏了 git diff,我删除了导致无限递归的依赖注入,现在一切都运行顺利,只需 ServiceCircularReferenceException
。
我的案例的代码示例(128M of memory
上的所有项目):
Service2 调用 Service1。debug mode
Service1 调用Service2
<?php
namespace App\MyModule\Service;
use App\Service\XService\Service1;
class Service2
{
public function __construct(private Service1 $service1)
{
}
}
<?php
namespace App\Service\XService;
use App\MyModule\Service\Service2;
class Service1
{
public function __construct(private Service2 $service2)
{
}
}
注意 Bruno-P 已经告诉你的内容,确保你已经为你的 symfony 项目更改了正确的 php.ini 文件。如果您安装了多个 php,则您可能正在更改旧文件。
确保您在 php.ini 中输入正确:
Symfony 1.4:PHP 致命错误:允许的内存大小 33554432 字节已耗尽
清除symfony缓存(symfony cc),关闭Web服务器并再次执行命令:
php_value memory_limit 1024M
您还可以检查您的 php 配置是否设置了内存值限制。在您的项目中创建一个包含以下内容的新文件:
symfony propel:build-model
symfony 作曲家更新
symfonycomposer = 运行 Composer,没有内存限制
<?php
phpinfo();
?>
在 ./symfony 文件的顶部。