提问者:小点点

参考-升级PHP后出现编写器错误“您的PHP版本不满足要求”


在将PHP从7.4更新到8.0之后,我在我现有的项目上运行了作曲家更新,并得到了这样的错误:

  • acme/some包[1.0.0,…,1.4.0]需要php^5.6。4 || ^7.0 -

这意味着什么?我该如何修复它?

(这是一个参考答案,旨在涵盖一个经常遇到的问题。该场景只是一个例子。另请参阅:如何解释作曲家的错误日志?(


共3个答案

匿名用户

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

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

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

如果没有满足所有这些约束的包,您将得到一个错误。

请注意,PHP版本的版本约束遵循与其他作曲家约束相同的规则。所以^7.0的约束意味着7.0以上的7. x的任何版本,并且不包括8.0。

要解决此问题,您需要放松其中一个约束:

  1. 查看错误消息中提到的包(acme/some package,在示例中),并在Packagist(或您配置的任何自定义包源)上找到它
  2. 查看是否存在支持您的PHP版本的更新版本
  3. 如果没有,您需要找出需要添加哪些支持。这可能意味着直接签出项目,运行其测试,并提交一个补丁以将其标记为与新版本兼容
  4. 如果(当)添加了支持,您需要确保您的编写器。json和您所依赖的其他软件包并不排除该新版本。例如,如果您当前依赖于acme/somepackageversion^1.0,但只有版本2.2才支持PHP8.0。0以后,您需要将约束更改为^2.2,并确保应用程序仍然兼容

有时,您很确定应用程序在使用与以前使用的相同版本的软件包时会运行良好。在这种情况下,您可以在编写器中使用平台配置变量。json来假装您仍在使用旧版本。这只能作为临时解决办法或用于测试,因为这意味着将安装在新PHP版本上可能完全损坏的包。

例如:

{
    "config": {
        "platform": {
             "php": "7.4.999"
        }
    }
}

另请参见“在composer中重写PHP基依赖项”

匿名用户

作为一个额外的提示:如果您想检查您可以做些什么来使您的项目兼容而不运行作曲家更新,作曲家提供了命令为什么不。您不仅可以使用包及其版本运行它:作曲家为什么不供应商/包2.0将列出阻止安装供应商/包的v2.0的所有其他包版本。

这也适用于PHP本身:composer why not PHP8.0将告诉您哪些包阻止使用更高版本的PHP

匿名用户

Composer 2.0现在可用!

作为补充说明,require/remove和partial更新现在要快得多,因为Composer只加载正在更改的包的元数据。

我注意到一个没有提供链接的回复。

希望这是有帮助的