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

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

现在,我们遇到了这样的问题: 我们进行了一次“作曲家更新”,以获得一些外部捆绑包的最新版本。 因为你的作曲家 Json 看起来

"require": {
"php": ">=5.3.3",
.....
},

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

有没有可能告诉作曲家需要一个介于5.3.3和5.3.5之间的 PHP 版本?或者一个最大可用版本?

我尽力了

"require": {
"php": ">=5.3.3, <=5.3.5",
.....
},

还有

"require": {
"php": "<=5.3.5",
.....
},

但都没成功。我得到一个“请求的包 php 在任何版本中都找不到,可能包名中有一个输入错误。”错误。

有什么想法吗? 提前谢谢

112713 次浏览

试试波浪算符怎么样

Tilde Operator ~ 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-beta.1严格地说在 版本约束,如 ~ 1.2不会安装它 上述 ~ 1.2只表示 。2可以改变,但 1. 零件是固定的。

注意: ~ 操作符对于主要版本号的行为有一个异常。这意味着 例如 ~ 1等于 ~ 1.0,因为它不允许主要数字增加,试图保持 向后兼容性。

我发现,至少可以说,您正在使用最新的 PHP 进行开发,并且正在使用一个非常过时的版本运行生产。这将会产生很多可能的问题,不仅仅是因为缺少安全补丁,更重要的是因为 PHP 错误修复,这些修复主要是在5.3.9和5.3.23版本中引入的,它们在一些细节上从根本上改变了 PHP 的行为。不要谈论意外使用5.4或5.5特性的风险。

而且真的没有办法让作曲家处理这种情况。运行 composer update时使用的 PHP 版本决定了依赖关系的解决方案,它受 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”配置添加到 global 或项目的 comper.json。这将告诉 Composer 覆盖运行 Composer 本身的 PHP 版本,而是计算与不同 PHP 版本的依赖关系。composer config -g platform.php 5.3.5用于全局设置(将影响所有进一步的 Composer 运行) ,没有 -g用于本地设置(只会影响该项目中的 Composer 操作,如果您使用不同的 PHP 生产版本在多个项目上进行开发的话)。

试试这个(删除逗号) :

"require": {
"php": ">=5.3.3 <=5.3.5",
.....
},

因为 poser.json 中的 config 参数是可用的:

{
"name": ".../...",
"config": {
"platform": {
"php": "5.3.5"
}
},
"require": {
...
}
}

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

删除 作曲家供应商目录。

现在将 平台选项放置到 作曲家

"config": {


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


},

最后,运行命令 作曲家 install

有没有可能告诉作曲家需要一个 PHP 版本 在5.3.3和5.3.5之间?

是的,就是这个:

连字型版本范围(-)

包含的版本集。部分 右侧包含的版本使用通配符完成 示例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:

{
"require": {
"guzzlehttp/guzzle": ">=5.3.4 <6"
}
}

- 我个人更喜欢这种方式,因为它更容易阅读和记住我的观点。