参考 - 升级 PHP 后 Composer 错误“您的 PHP 版本不满足要求”

IMS*_*SoP 3 php composer-php php-8

将 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 的错误日志? ”)

JMi*_*nes 22

如果您使用的是 PHP 版本 8,某些尚不支持的插件可能会导致安装错误。

composer install --ignore-platform-req=php或者composer install --ignore-platform-reqs

此选项可用于设置 Composer 可以忽略的特定要求。


Nic*_*ase 7

作为附加提示:如果您想检查如何在不运行的情况下使您的项目兼容composer update,Composer 提供了命令why-not。您不仅可以使用软件包及其版本运行它:composer why-not vendor/package 2.0将列出阻止安装 v2.0 的所有其他软件包版本vendor/package

这也适用于 PHP 本身:composer why-not php 8.0会告诉您哪些包阻止使用更高版本的 PHP


IMS*_*SoP 5

问题

除了它们需要的其他包的版本之外,Composer 包还可以指定它们支持的 PHP 版本。

在解析要安装的软件包版本时,Composer 必须找到与所有约束条件匹配的版本:

  • 您为依赖项指定的版本约束 composer.json
  • 每个包为其依赖项指定的版本约束
  • 每个包支持的 PHP 版本

如果没有满足所有这些约束的包,您将收到错误消息。

常见的困惑

请注意,PHP 版本的版本约束遵循与其他 Composer 约束相同的规则。所以的约束^7.0手段“7.x的任何版本7.0以上”,并没有包括8.0。

解决方案

要解决该问题,您需要放宽以下约束之一:

  1. 查看错误消息中提到的包(acme/some-package在示例中)并在Packagist(或您配置的任何自定义包源)上找到它。
  2. 查看是否存在支持您的 PHP 版本的较新版本。
  3. 如果没有,您需要找出添加该支持所需的内容。这可能意味着直接检查项目、运行其测试并提交补丁以将其标记为与新版本兼容。
  4. 如果(何时)添加了支持,您需要确保您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"
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

另请参阅“在作曲家中覆盖 PHP 基础依赖项