Composer:防止更新需要更高 PHP 版本的包

Posted

技术标签:

【中文标题】Composer:防止更新需要更高 PHP 版本的包【英文标题】:Composer: prevent updating packages that require higher PHP version 【发布时间】:2018-01-26 02:53:25 【问题描述】:

我在我的 php 项目中使用 doctrine/dbal (v2.4.*) 包。我的生产服务器运行 PHP v5.6。

我今天早上运行了 composer update,它更新了我的 composer.lock 文件。现在,当我部署到生产环境时,我看到了:

 Problem 1
    - Installation request for doctrine/inflector v1.2.0 -> satisfiable by doctrine/inflector[v1.2.0].
    - doctrine/inflector v1.2.0 requires php ^7.0 -> your PHP version (5.6.14) does not satisfy that requirement.
  Problem 2
    - doctrine/inflector v1.2.0 requires php ^7.0 -> your PHP version (5.6.14) does not satisfy that requirement.
    - doctrine/common v2.4.3 requires doctrine/inflector 1.* -> satisfiable by doctrine/inflector[v1.2.0].
    - Installation request for doctrine/common v2.4.3 -> satisfiable by doctrine/common[v2.4.3].

具体如下:

doctrine/common v2.4.3 需要doctrine/inflector 1.* -> 可以满足doctrine/inflector[v1.2.0]。

doctrine/inflector v1.2.0 需要 php ^7.0 -> 你的 PHP 版本 (5.6.14) 不满足该要求

这意味着,即使dbal 是旧的,它也需要最新的common,而common 需要最新的inflector 包。问题是 inflector 开始依赖 PHP7 运行。

Composer 中是否有任何方法可以将包的更新限制为特定 PHP 版本支持的包?就像说:“请尽可能更新,但前提是服务器的 PHP 版本足够。”

【问题讨论】:

你能用变形器 1.1 代替吗?或者去 common 2.7.3 或者你可以去 dbal 2.5.13 你的意思是我不仅应该直接要求doctrine/dbal,还应该直接要求commoninflector?如果dbal 已经需要它们,这是否有意义? 您可以要求 dbal,但只需将版本降至 2.5.13 我使用的dbal 版本是2.4.*。所以,老了。但由于它在内部需要最新的包,所以不管它有多旧。 试试composer require doctrine/inflector:1.1.0 【参考方案1】:

使用 composer.json 文件中的 platform 选项来定义生产环境使用的 PHP 版本,如下所示:


    "config": 
        "platform": 
            "php": "5.6.14"
        
    

见https://getcomposer.org/doc/06-config.md#platform

【讨论】:

"让您伪造平台包(PHP和扩展),以便您可以模拟生产环境或定义您的目标平台配置”。听起来像是不完全设计用于生产的东西。我想在我尝试之前我不会确定。 作为替代方案,仅在尽可能靠近生产系统的环境中运行 composer requirecomposer updatecomposer install 这个答案太棒了......谢谢

以上是关于Composer:防止更新需要更高 PHP 版本的包的主要内容,如果未能解决你的问题,请参考以下文章

使用composer安装Elasticsearch-php教程

laravel根目录下如何解决在composer install时提示php版本需要更新?

Bytom PHP SDK 使用指南

Elasticsearch-PHP 安装

Windows下通过Composer安装Yii2

如何防止图例在 R2017a 及更高版本中更新?