参考-升级PHP后Composer错误“您的PHP版本不满足要求”
将 PHP 从 7.4 更新到 8.0 后,我composer update在现有项目上运行,出现如下错误:
- acme/some-package[1.0.0, ..., 1.4.0] 需要 php ^5.6.4 || ^7.0 -> 您的 php 版本 (8.0.3) 不满足该要求。
这是什么意思,我该如何解决?
(这是一个参考答案,旨在涵盖一个经常遇到的问题。场景只是一个例子。另见:“如何解释 Composer 的错误日志? ”)
回答
问题
除了它们需要的其他包的版本之外,Composer 包还可以指定它们支持的 PHP 版本。
在解析要安装的软件包版本时,Composer 必须找到与所有约束条件匹配的版本:
- 您为依赖项指定的版本约束
composer.json - 每个包为其依赖项指定的版本约束
- 每个包支持的 PHP 版本
如果没有满足所有这些约束的包,您将收到错误消息。
常见的困惑
请注意,PHP 版本的版本约束遵循与其他 Composer 约束相同的规则。所以的约束^7.0手段“7.x的任何版本7.0以上”,并没有不包括8.0。
解决方案
要解决该问题,您需要放宽以下约束之一:
- 查看错误消息中提到的包(
acme/some-package在示例中)并在Packagist(或您配置的任何自定义包源)上找到它。 - 查看是否存在支持您的 PHP 版本的较新版本。
- 如果没有,您需要找出添加该支持所需的内容。这可能意味着直接检查项目、运行其测试并提交补丁以将其标记为与新版本兼容。
- 如果(何时)添加了支持,您需要确保您
composer.json依赖的 和其他软件包不要排除该新版本。例如,如果您当前依赖acme/some-packageversion^1.0,但 PHP 8.0 仅从 2.2.0 版本开始支持,则需要将约束更改为^2.2,并确保您的应用程序仍然兼容。
临时解决方法
有时,您非常确定您的应用程序可以在与您之前使用的相同版本的软件包中正常运行。在这种情况下,你可以使用的platform配置变量在你的composer.json你还在使用旧版本的假装。这应该仅作为临时解决方法或用于测试来完成,因为这意味着将安装可能在您的新 PHP 版本上完全损坏的软件包。
例如:
{
"config": {
"platform": {
"php": "7.4.999"
}
}
}
另请参阅“在作曲家中覆盖 PHP 基础依赖项”