composer 安装报错因 php 禁用 proc_open(),需在 CLI 模式 php.ini 的 disable_functions 中移除该函数并重启 CLI 环境;生产环境启用前应评估安全风险。

这个错误是因为 PHP 禁用了 proc_open() 函数,而 Composer 在安装依赖时需要调用它来执行 git、unzip、php 等外部命令。解决方法是启用该函数,关键在 php.ini 配置。
检查并修改 disable_functions 设置
打开你当前 PHP 使用的 php.ini 文件(可通过 php --ini 或 phpinfo() 确认路径),找到 disable_functions 这一行:
- 如果该行包含
proc_open(例如:disable_functions = exec,passthru,shell_exec,system,proc_open),把它删掉 - 如果整行被注释(以分号开头),可取消注释后清理掉
proc_open - 如果该配置项不存在,通常无需添加;但若存在且没禁用,就不是这个问题根源
确认生效的是正确的 php.ini
Composer 默认使用 CLI 版本的 PHP,所以要改的是 CLI 模式下的 php.ini,不是 apache 或 nginx 的那个:
- 运行
php -i | grep "Loaded Configuration File"查看实际加载的 ini 路径 - 改完后必须重启 PHP CLI 环境(不需要重启 Web 服务器),直接重新运行
composer install即可验证 - 常见误区:只改了
/etc/php/8.1/apache2/php.ini,却忘了 CLI 用的是/etc/php/8.1/cli/php.ini
安全提醒:为什么会被禁用?
proc_open() 允许 PHP 启动进程,确实存在安全风险(如执行恶意命令),因此部分共享主机或安全策略会默认禁用它:
立即学习“PHP免费学习笔记(深入)”;
- 如果你在生产环境或受控服务器上,启用前请评估风险,确保代码来源可信
- 不建议在面向公网的共享主机上自行开启——联系服务商更稳妥
- 本地开发环境(如 XAMPP、docker、laravel Valet)通常可放心启用
基本上就这些。改完 php.ini,保存,再试一次 composer install,错误通常就消失了。