我的服务器(最高5.3.5)和开发机器(最高5.5.9)上混合运行了不同的PHP版本。
现在我遇到了一个问题,我做了一个"composer update"来获得一些外部包的最新版本。
"require": {
"php": ">=5.3.3",
.....
},
我得到了一些需要PHP5.5的捆绑包。在我的开发机器上没有问题;服务器上出现问题。
是否可以告诉Composer要求PHP版本在5.3.3和5.3.5之间?或者最高可用版本?
我试过了
"require": {
"php": ">=5.3.3, <=5.3.5",
.....
},
以及
"require": {
"php": "<=5.3.5",
.....
},
但是两个都没有成功。我得到一个"* 请求的php包在任何版本中都找不到,包名中可能有一个拼写错误。*"错误。
有什么想法吗?
6条答案
按热度按时间xpcnnkqh1#
因为composer.json中的config参数是可用的,所以你可以这样做:
https://getcomposer.org/doc/06-config.md#platform
z6psavjg2#
我发现至少可以说您正在使用最新的PHP进行开发,而正在使用非常过时的版本进行生产是有问题的。这可能会导致大量的问题,不仅是因为您会丢失安全补丁,但更重要的是,PHP bug修复主要是在版本5.3.9和5.3.23中引入的,它从根本上改变了PHP行为的一些细节。不谈意外使用5.4或5.5功能的风险。
而且真的没有办法让Composer处理这种情况,运行
composer update
时使用的PHP版本决定了依赖关系的解析,受到PHP版本和安装的PHP扩展的影响。如果用于更新的PHP与此版本要求不匹配,则不能定义某个软件包仅应用于5.3.3和5.3.5之间的PHP版本。由于使用的PHP版本超出了版本上限限制,因此此类软件包不符合版本要求,并且Composer报告未找到软件包(不是说它已经看到了包,但是由于版本约束,它们不得不被忽略)。
大概有三种显而易见的出路:
1.将开发环境降级到实际使用的生产版本。如果使用多个生产版本:最老的一个。这样任何PHP版本的要求都可以匹配。然后运行
composer update
,就完成了。1.升级您的生产环境。不需要进一步解释,但我必须指出,您不仅错过了许多非常好的PHP特性,还错过了实质性的性能提升,因为PHP 5.5确实比5.3快得多。
1.将“platform.php”配置添加到全局或项目的composer.json。这将告诉Composer覆盖运行Composer本身的PHP版本,并改为计算与不同PHP版本的依赖关系。
composer config -g platform.php 5.3.5
用于全局设置(将影响Composer的所有后续运行),本地设置不使用-g
(如果您使用不同的PHP生产版本在多个项目上进行开发,则只会影响该项目中的Composer操作)。s8vozzvw3#
删除***composer.lock***和***vendor***目录。
现在将***平台***选项放置到***composer.json***
最后,运行命令***composer install***
zujrkrfu4#
尝试以下操作(删除逗号):
t3psigkw5#
尝试使用波浪号运算符如何
颚化符运算符~1.2对于遵循语义版本控制的项目非常有用。~1.2等价于〉=1.2,〈2.0。要了解更多细节,请阅读下面的下一节。
下一个重要版本(波浪号运算符)#
~运算符最好通过以下示例来解释:~1.2相当于
=1.2,〈2.0,而~1.2.3等价于〉=1.2.3,〈1.3。正如你所看到的,它对于考虑语义版本控制的项目非常有用。一个常见的用法是标记你所依赖的最小次要版本,比如~1.2(它允许最高到2. 0的任何东西,但不包括2. 0)。由于理论上直到2. 0才应该有向后兼容性中断,这很好用。2另一种方法是使用~指定一个最小版本,但是允许指定的最后一位数字向上。
注意:虽然2.0-beta.1严格来说是在2.0之前,但是像~1.2这样的版本约束是不会安装它的。如上所述,~1.2只是意味着.2可以更改,而1.part是固定的。
注:~运算符在其主要版本号的行为上有一个例外。这意味着,例如,~1与~1.0相同,因为它不允许主要版本号增加,以保持向后兼容性。
bq3bfh9z6#
有没有可能告诉composer要求PHP版本在5.3.3和5.3.5之间?
是的,有一个:
连字符版本范围(-)
包含的版本集。右侧包含的部分版本用通配符完成。例如,当2.0变为2.0.* 时,1.0 - 2.0等效于〉=1.0.0〈2.1。另一方面,1.0.0 - 2.1.0等效于〉=1.0.0〈=2.1.0。
示例:1.0 - 2.0
https://getcomposer.org/doc/articles/versions.md#hyphenated-version-range-
也可以像这样使用
composer.json
: