错误中“xxx”即真实缺失扩展名,如mbstring;运行php -m | grep -e "^(mbstring|zip|xml|curl|openssl)$"无输出即未启用,且须确认cli模式配置路径php --ini,避免误改web服务器配置。

“The requested PHP extension xxx is missing” 怎么确认缺哪个
报错里 xxx 就是真实缺失的扩展名,比如 mbstring、zip、xml、curl、openssl。别猜,直接看错误原文——它不会写“某个扩展”,而是明确列出名字。
验证是否真缺:运行 php -m | grep -E "^(mbstring|zip|xml|curl|openssl)$",没输出的就代表没启用。注意,php -m 查的是 CLI 模式下的模块,不是 Apache 或 FPM 的,别去 /etc/php/*/apache2/ 目录下瞎改。
常见漏装项(Debian 默认不带):
-
php-cli:没它连php --version都报 command not found -
php-mbstring:Composer 解析包名、处理 UTF-8 时必用,缺了直接挂 -
php-zip:解压 .zip 包归档,很多包只提供 zip 格式分发 -
php-xml:读composer.json和 Packagist 返回的 XML 响应 -
php-curl:发起 HTTPS 请求,php-openssl通常随它一起装上
sudo apt install php-* 后还是报缺扩展
Debian 的 php 元包(metapackage)不自动拉取扩展,必须显式安装。但装完仍报缺,大概率是 CLI 配置没加载对应 .ini 文件。
查实际生效的配置路径:php --ini,重点看 “Loaded Configuration File” 和 “Scan for additional .ini files in” 两行。
常见陷阱:
- 扩展已安装,但
/etc/php/*/cli/conf.d/20-xxx.ini被注释或路径写错 - 装的是
php8.2-mbstring,但php --version显示是 8.1,版本不匹配 - 执行
php -m时用了php-fpm或php-cgi,而非php(CLI)命令
最稳验证法:php -r "echo extension_loaded('mbstring') ? 'ok' : 'fail';",把 mbstring 换成你要测的扩展名。
工作流任务拆解与模型编排技能。使用场景:(1) 收到复杂工作任务需要拆解为可执行步骤,(2) 需要为不同步骤选择最合适的模型,(3) 需要跟踪工作流进度和模型使用情况,(4) 长时间任务卡住需要问题诊断和解决方案。
phar.readonly = On 导致 composer install 失败
Composer 2.5+ 必须写入 PHAR 归档,若 phar.readonly = On,会报类似 Phar::buildFromDirectory(): write operations disabled by the phar.readonly setting 的错。
改法很简单:
- 先确认位置:
php --ini→ 找到 CLI 对应的php.ini(通常是/etc/php/*/cli/php.ini) - 编辑该文件,搜
phar.readonly,改成phar.readonly = Off - 不用重启任何服务,改完立刻生效;
php -i | grep "phar.readonly"应输出Off
注意:别改错目录——FPM 或 Apache 的 php.ini 改了也没用,composer install 是 CLI 进程跑的。
composer install 卡住或报 Connection refused
这不是扩展问题,是系统级网络失败。关键词 Connection refused、cURL error 7、Failed to open stream 都指向 DNS 或 TLS 握手失败。
快速定位步骤:
- 运行
ping packagist.org,如果 unknown host,说明 DNS 不通,立刻换/etc/resolv.conf里的 nameserver 为8.8.8.8 - 运行
curl -v https://mirrors.aliyun.com/composer/,看卡在 * Connected to 还是 * TLS handshake - 若卡 TLS,加环境变量强制 IPv4:
CURL_IPRESOLVE=4 composer install - 确认镜像源已全局设置:
composer config -g repo.packagist输出必须是https://mirrors.aliyun.com/composer/
清缓存不是可选项:composer clear-cache 必须做,否则旧失败记录还在,重试照样走原地址。
真正麻烦的不是装不上,而是装上了却在 vendor/autoload.php 写入时报 Permission denied——那八成是 vendor/ 目录被 sudo 污染过,属主是 root。别急着 chmod,先 ls -ld vendor/ 看一眼归属。










