
直接调大 memory_limit 能解决 Composer 内存不足问题,但必须修改 PHP CLI 对应的 php.ini 文件,通过 php --ini 确认路径,设为 memory_limit = 2G,并用 php -r "echo ini_get('memory_limit');" 验证。
直接调大 memory_limit 就能解决,但必须改对位置——PHP CLI 环境的配置和 Web 服务器的不是一回事,很多人改了 php.ini 却没生效,是因为用错了配置文件。
Composer 运行在命令行下,走的是 PHP CLI SAPI,它不读 Apache/Nginx 下的 php.ini,得先知道它实际加载的是哪个配置文件:
php --ini,看输出里的 “Loaded Configuration File”/etc/php/8.1/cli/php.ini(Ubuntu/Debian)、/usr/local/etc/php/8.2/php.ini(Mac Homebrew)、C:\xampp\php\php.ini(Windows XAMPP)php -v 显示的那个路径下的文件,CLI 和 CGI 可能指向不同文件在 CLI 对应的 php.ini 中找到并修改这一行:
memory_limit = 2G
注意以下几点:
memory_limit = 2048M —— 某些旧版 PHP 解析失败,2G 更稳妥512M)在装大型包(如 laravel/framework + symfony/*)时仍会爆内存
php.ini,或通过 php -d memory_limit=2G composer install 临时覆盖不想改全局配置?每次运行 Composer 前加参数即可:
php -d memory_limit=2G composer install
这个方式优先级最高,会覆盖 php.ini 里的设置。CI 脚本里常用,比如 GitHub Actions:
php -d memory_limit=-1 composer update
-1 表示无限制(慎用,可能耗尽系统内存)-d 参数,此时只能联系管理员或换环境php "-d memory_limit=2G" composer require foo/bar
常见失效原因:
php.ini(如 /etc/php/8.1/apache2/php.ini),CLI 根本不读它composer 命令实际调用的是另一个 PHP(比如通过 update-alternatives 切换过)curl -sS https://getcomposer.org/installer | php 生成的 composer.phar)会缓存旧配置,删掉 ~/.composer/cache/ 再试最稳的验证方式:运行 php -r "echo ini_get('memory_limit');",输出必须是你要的值(如 2G),否则说明没改对地方。