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

参考-编写器错误“;您的PHP版本不满足要求”;升级PHP之后,php,composer-php,php-8,Php,Composer Php,Php 8,将PHP从7.4更新到8.0后,我在现有项目上运行了composer update,并得到如下错误: acme/some包[1.0.0,…,1.4.0]需要php^5.6.4 | | ^7.0->您的php版本(8.0.3)不满足该要求 这意味着什么?我该如何修复它 (这是一个参考答案,旨在涵盖一个经常遇到的问题。该场景只是一个示例。另请参见:)问题 除了所需的其他软件包的版本外,Composer软件包还可以指定它们支持的PHP版本 在解析要安装的软件包版本时,Composer必须找到与所有

将PHP从7.4更新到8.0后,我在现有项目上运行了
composer update
,并得到如下错误:

  • acme/some包[1.0.0,…,1.4.0]需要php^5.6.4 | | ^7.0->您的php版本(8.0.3)不满足该要求
这意味着什么?我该如何修复它

(这是一个参考答案,旨在涵盖一个经常遇到的问题。该场景只是一个示例。另请参见:)

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

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

  • composer.json中的依赖项指定的版本约束
  • 每个包为其依赖项指定的版本约束
  • 每个包支持的PHP版本
如果没有满足所有这些约束的包,您将得到一个错误

常见的困惑 请注意,PHP版本的版本约束如下。因此,
^7.0
的约束意味着“7.0以上的任何7.x版本”,不包括8.0

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

  • 查看错误消息中提到的包(
    acme/some package
    ,在示例中),并在上找到它(或您配置的任何自定义包源)
  • 查看是否存在支持您的PHP版本的更新版本
  • 如果没有,您需要找出需要添加哪些支持。这可能意味着直接签出项目,运行其测试,并提交一个补丁以将其标记为与新版本兼容
  • 如果(当)添加了支持,您需要确保您的
    composer.json
    ,以及您所依赖的其他软件包不排除该新版本。例如,如果您当前依赖于
    acme/somepackage
    version
    ^1.0
    ,但PHP8.0仅从版本2.2.0开始受支持,则需要将约束更改为
    ^2.2
    ,并确保应用程序仍然兼容
  • 临时解决办法 有时,您很确定应用程序在使用与以前使用的相同版本的软件包时会运行良好。在这种情况下,您可以在
    composer.json
    中使用,假装仍在使用旧版本这只能作为临时解决办法或用于测试,因为这意味着将安装可能在新PHP版本上完全损坏的软件包

    例如:

    {
    “配置”:{
    “平台”:{
    “php”:“7.4.999”
    }
    }
    }
    

    另请参见“

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

    这也适用于PHP本身:
    composer为什么不使用PHP 8.0
    将告诉您哪些软件包阻止使用更高版本的PHP

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

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


    希望这是有帮助的

    我认为已经足够好了,可以作为参考。这就是我试图用它作为所有这些“作曲家不会安装!!1!”问题的复制目标。@yivi谢谢,我以前没见过这个。两者之间的交叉引用肯定是有用的,但我认为有一个额外的指南关注这一特定案例是有价值的。目前,我们收到了很多关于升级到PHP8.0的问题,因为这是一个人们在主要版本发布之前通常不会考虑的限制。我在7.0发布时发现了一大堆类似的问题,这些问题目前没有被标记为任何内容的重复,有些问题从未被回答过,所以我打算将它们全部指向这里。(我只是还没有时间。)我不确定这和这个问题有什么关系。你是不是偶然把它寄错地方了?