Composer 压根不会帮你装 PHP 扩展,它只会在 composer installcomposer update 时检查那些扩展是否已经在系统里启用了。如果缺了,直接报错中断,连 autoload 文件都不生成。所以,别指望 Composer 能当扩展管理器,它只是一个“检查员”。

Composer怎么处理ext扩展的依赖声明_Composer扩展依赖声明规范【核心】

ext-xxx 必须写在 require 或 require-dev 里

这不是什么插件或隐藏约定,而是 Composer 原生支持的伪包名机制。它只认 ext-xxx 这种格式,并且必须放在 composer.jsonrequire(生产环境必不可少)或 require-dev(仅开发阶段)字段里,否则 Composer 根本不会去理会。

报错信息明确,但容易误判为“Composer 没装好”

运行 composer install 时如果缺失扩展,你会看到类似这样的错误:

- Root package 'my/project' requires ext-gd (*), but it is not present.

这不是 Composer 自身的问题,而是环境没配好。常见的混淆点有几个:

config.platform.ext-xxx 是“假装存在”,不是绕过检查

这个配置的作用不是跳过校验,而是让 Composer 在依赖解析阶段“按目标环境模拟可用扩展”。举个例子:

"config": {
    "platform": {
        "ext-igbinary": "3.2.14",
        "php": "8.1.28"
    }
}

它的实际效果是:

真正容易被忽略的是:声明了 ext-* 之后,你得确保部署流程里包含扩展安装/启用的步骤。否则,composer install 虽然成功了,但 php artisan serveindex.php 一跑就报 Call to undefined function curl_init()——那说明校验环节根本没触发,大概率是漏写了 ext-curl 声明,或者用了 --ignore-platform-reqs 却没意识到后果。

本文转载于:https://www.php.cn/faq/2349114.html 如有侵犯,请联系zhengruancom@outlook.com删除。
免责声明:正软商城发布此文仅为传递信息,不代表正软商城认同其观点或证实其描述。