强制编写器在版本X和版本Y之间需要PHP版本

Fab*_*ian 60 php composer-php

我们在您的服务器(最大5.3.5)和开发机器(最大5.5.9)上运行不同的PHP版本.

现在我们遇到了一个问题,我们做了一个"作曲家更新",以获得一些外部Bundles的最新版本.因为你的composer.json看起来像

"require": {
        "php": ">=5.3.3",
        .....
    },
Run Code Online (Sandbox Code Playgroud)

我们得到一些需要PHP 5.5的Bundles.在我们的开发机器上没有问题,但在服务器上:(

是否有可能告诉作曲家要求5.3.3和5.3.5之间的PHP版本?或者最大可用版本?

我试过了

"require": {
        "php": ">=5.3.3, <=5.3.5",
            .....
        },
Run Code Online (Sandbox Code Playgroud)

"require": {
            "php": "<=5.3.5",
                .....
            },
Run Code Online (Sandbox Code Playgroud)

但两者都没有成功.我得到一个"在任何版本中都找不到请求的包php,包名中可能有拼写错误." 错误.

有任何想法吗?提前致谢

小智 82

由于composer.json中的config参数可用.你可以这样:

{
    "name": ".../...",
    "config": {
        "platform": {
            "php": "5.3.5"
        }
    },
    "require": {
        ...
    }
} 
Run Code Online (Sandbox Code Playgroud)

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

  • 虽然指定了此参数,但库仍会安装大于指定PHP版本的版本.例如,我指定了PHP版本5.4.36,但Composer仍然安装Symfony版本3.1.3,这需要5.5+.结论:不工作. (5认同)
  • 这对我很有用!我需要安装兼容PHP <= 7.0.16的软件包 (2认同)

Sve*_*ven 38

我发现至少可以说你使用最新的PHP开发并且正在使用非常过时的版本运行生产.由此会产生很多可能出现的问题,不仅仅是因为你会丢失安全补丁,更重要的是因为PHP bug修复主要在版本5.3.9和5.3.23中引入,这些修补程序改变了某些部分的PHP行为从根本上讲细节.不是在谈论意外使用5.4或5.5功能的风险.

而且真的没有办法让Composer处理这种情况.运行时使用的PHP版本composer update确定依赖项的解析,受PHP版本和已安装的PHP扩展的影响.

如果用于更新的PHP与此版本要求不匹配,则无法定义包仅应用于5.3.3和5.3.5之间的PHP版本.因为使用的PHP版本超出了上限版本,所以这样的包不符合完成版本要求的条件,并且Composer报告没有找到包(没有告诉它已经看过包,但是因为它们必须被忽略)版本约束).

可能有三种明显的方法:

  1. 将开发环境降级到您实际使用的生产版本.如果使用多个:最老的一个.这样就可以匹配PHP版本的任何要求.composer update然后跑,你完成了.

  2. 升级您的生产环境.不需要进一步解释,但我必须提到,你不仅缺少很多非常好的PHP功能,而且还缺少大幅的性能提升,因为PHP 5.5实际上比5.3快得多.

  3. 将"platform.php"配置添加到全局或项目的composer.json中.这将告诉Composer覆盖运行Composer本身的PHP版本,而是使用不同的PHP版本计算依赖关系.composer config -g platform.php 5.3.5对于全局设置(将影响所有进一步的Composer运行),不-g进行本地设置(只会影响该项目中的Composer操作,以防您使用不同的PHP生产版本开发多个项目).

  • 人们有限制......不是那么可疑,对吗? (3认同)
  • @Arcesilas你是什么意思?现在的问题主要是关于如何限制作曲家的更新**过程中为PHP**的太高级版本的软件包 - 这样的锁文件,而影响到一个更新的结果,在这种情况下毫无意义. (2认同)
  • 在开发和生产中不使用相同的版本是有问题的。错误很容易出现,例如使用生产环境中没有的 PHP 功能,或者在 DEV 中修复了错误,但在生产环境中仍未修复。不使用相同的版本意味着您不会遇到相同的行为。特别是在 prod 中将 PHP 5.3 与开发中的 PHP 5.5 混合时(如果将 5.5.x 与 5.5.y 混合,则问题不太可能或令人惊讶)。 (2认同)

Bil*_*lly 8

怎么样尝试代字号运算符

Tilde Operator~1.2对于遵循语义版本控制的项目非常有用.~1.2相当于> = 1.2,<2.0.有关更多详细信息,请阅读下面的下一部分.

下一个重要发布(Tilde Operator)#

〜运算符最好用例子解释:~1.2相当于

= 1.2,<2.0,而~1.2.3相当于> = 1.2.3,<1.3.正如您所看到的,它对于尊重语义版本控制的项目非常有用.常见的用法是标记您所依赖的最小次要版本,例如~1.2(允许任何内容,但不包括2.0).从理论上讲,在2.0之前不应该存在向后兼容性中断,这很有效.查看它的另一种方法是使用〜指定最小版本,但允许指定的最后一位数字上升.

注意:尽管2.0-beta.1严格地在2.0之前,但是像~1.2这样的版本约束不会安装它.如上所述~1.2仅表示.2可以改变,但1.部分是固定的.

注意:〜运算符对主要版本号的行为有异常.这意味着例如~1与~1.0相同,因为它不允许主要数字增加以试图保持向后兼容性.


Mik*_*man 7

试试这个(删除逗号):

"require": {
    "php": ">=5.3.3 <=5.3.5",
        .....
    },
Run Code Online (Sandbox Code Playgroud)


sh6*_*210 5

Remove your composer.lock and vendor directory.

Now place platform option to composer.json

"config": {

    "platform": {
        "php": "7.0"
    }

},
Run Code Online (Sandbox Code Playgroud)

and finally, run command composer install