直接调大 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 却没生效,是因为用错了配置文件。
确认当前 CLI 的 PHP 配置路径
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 可能指向不同文件
修改 memory_limit 值(推荐 2G 起步)
在 CLI 对应的 php.ini 中找到并修改这一行:
memory_limit = 2G
注意以下几点:
- 不要写成
memory_limit = 2048M—— 某些旧版 PHP 解析失败,2G更稳妥 - 值设太小(如
512M)在装大型包(如laravel/framework+symfony/*)时仍会爆内存 - 如果用的是 Docker,需在容器内改对应路径的
php.ini,或通过php -d memory_limit=2G composer install临时覆盖
临时绕过(适合 CI 或一次性操作)
不想改全局配置?每次运行 Composer 前加参数即可:
php -d memory_limit=2G composer install
这个方式优先级最高,会覆盖 php.ini 里的设置。CI 脚本里常用,比如 GitHub Actions:
php -d memory_limit=-1 composer update
-
-1表示无限制(慎用,可能耗尽系统内存) - 某些共享主机禁用
-d参数,此时只能联系管理员或换环境 - Windows PowerShell 中记得用双引号包裹参数:
php "-d memory_limit=2G" composer require foo/bar
为什么改了 php.ini 还报错?检查这三处
常见失效原因:
- 改的是 Web 版本的
php.ini(如/etc/php/8.1/apache2/php.ini),CLI 根本不读它 - PHP 多版本共存,
composer命令实际调用的是另一个 PHP(比如通过update-alternatives切换过) - 某些 Composer 安装方式(如
curl -sS https://getcomposer.org/installer | php生成的composer.phar)会缓存旧配置,删掉~/.composer/cache/再试
最稳的验证方式:运行 php -r "echo ini_get('memory_limit');",输出必须是你要的值(如 2G),否则说明没改对地方。










