答案是:需修改php.ini解除proc_open等函数禁用并重启服务。运行php -r "var_dump(function_exists('proc_open'));"确认被禁,删掉disable_functions中的proc_open、putenv、pcntl_signal,重启PHP-FPM或Web服务,再用php -r "echo proc_open('echo 1', [], $p) ? 'ok' : 'fail';"验证生效。

Call to undefined function proc_open() 怎么办
这不是 Composer 脚本写错了,是 PHP CLI 环境禁用了底层函数。宝塔、cPanel 或共享主机默认会禁用 proc_open、putenv,而 Composer 安装器(install.php)启动阶段就要调用它们。
- 先验证:运行
php -r "var_dump(function_exists('proc_open'));",输出bool(false)就确认被禁 - 去 PHP 管理界面(如宝塔)或直接编辑
php.ini,检查disable_functions配置项,删掉proc_open、putenv、pcntl_signal(注意拼写和空格分隔) - 改完必须重启 PHP-FPM 或 Web 服务;CLI 模式下还要新开终端或执行
source ~/.bashrc - 验证是否真生效:运行
php -r "echo proc_open('echo 1', [], $p) ? 'ok' : 'fail';",输出ok才算成功
“The requested PHP extension xxx is missing” 报错怎么查
这类错误不是 Composer 不兼容,而是当前 PHP CLI 实际缺失扩展。Web 页面显示的 phpinfo() 和 CLI 加载的 php.ini 常不一致,别只信浏览器。
- 运行
php -v确认 CLI 使用的 PHP 版本 - 运行
php -m | grep -E "mbstring|xml|curl|json|openssl|zip",看关键扩展是否在列表里 - 若缺
ext-xml或ext-simplexml,Ubuntu/Debian 执行sudo apt-get install php-xml,CentOS/RHEL 执行sudo yum install php-xml - Windows 用户需打开
php.ini,取消;extension=xml、;extension=simplexml前的分号
composer install 卡在 SSL 握手失败或 cURL error 60
这不是镜像没切对,是 PHP 的 OpenSSL 根证书路径没配好,或者系统时间偏差太大(>5 分钟),导致 HTTPS 握手失败。
工作流任务拆解与模型编排技能。使用场景:(1) 收到复杂工作任务需要拆解为可执行步骤,(2) 需要为不同步骤选择最合适的模型,(3) 需要跟踪工作流进度和模型使用情况,(4) 长时间任务卡住需要问题诊断和解决方案。
- 查证书路径:
php -r "print_r(openssl_get_cert_locations());",重点看default_cert_file - 如果路径为空或文件不存在(比如指向
/etc/ssl/certs/ca-bundle.crt但该文件没生成),手动补:curl -sS https://curl.se/ca/cacert.pem -o /usr/local/etc/openssl/cert.pem - 然后在
php.ini中加一行:openssl.cafile=/usr/local/etc/openssl/cert.pem - 检查系统时间:
date;若偏差大,CentOS 执行sudo ntpdate -s time.nist.gov,Ubuntu 执行sudo timedatectl set-ntp true
为什么 composer diagnose 说“OK”,但 install 还是报错
因为 composer diagnose 只检测基础环境连通性和配置语法,它不验证 proc_open 是否真能执行、不检查 ext-xml 是否真加载、也不校验证书路径是否可读——这些都得靠你手动触发验证命令。
立即学习“PHP免费学习笔记(深入)”;
-
composer diagnose通过 ≠composer install成功 - 真正要跑通 install,必须确保:
proc_open可调用、所有依赖扩展已启用、openssl.cafile指向真实存在的 PEM 文件、且该文件权限为 644 - 最容易被忽略的是:PHP CLI 和 Web SAPI 使用不同
php.ini,php --ini才是 CLI 真实加载路径


















