我们在您的服务器(最高 5.3.5)和开发机器(最高 5.5.9)上运行不同的 PHP 版本。
现在我们遇到了一个问题,我们做了一个“composer update”来获取一些外部Bundles的最新版本。因为你的 composer.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,包名称可能有错别字。”错误。
有任何想法吗?提前致谢
由于 composer.json 中的 config 参数可用。你可以这样:
{
"name": ".../...",
"config": {
"platform": {
"php": "5.3.5"
}
},
"require": {
...
}
}
https://getcomposer.org/doc/06-config.md#platform
我发现至少可以说您正在使用可用的最新 PHP 进行开发并且正在使用非常过时的版本运行生产是有问题的。这会导致很多可能的问题,不仅因为您会丢失安全补丁,更重要的是因为主要在 5.3.9 和 5.3.23 版本中引入的 PHP 错误修复改变了某些 PHP 行为细节相当基本。不谈论意外使用 5.4 或 5.5 功能的风险。
而且真的没有办法让 Composer 处理这种情况。运行 composer update
时使用的 PHP 版本决定了依赖项的解析,受 PHP 版本和安装的 PHP 扩展的影响。
如果您用于更新的 PHP 不符合此版本要求,则您不能定义一个包只应用于 5.3.3 和 5.3.5 之间的 PHP 版本。因为使用的 PHP 版本超过了版本上限,这样的包不符合版本要求,Composer 报告没有找到包(不是说它已经看到了包,但它们不得不被忽略,因为版本约束)。
可能有三种明显的出路:
将您的开发环境降级到您真正使用的生产版本。如果使用多个:最旧的一个。这样,对 PHP 版本的任何要求都将匹配。然后运行 composer update ,你就完成了。升级您的生产环境。无需进一步解释,但我不得不提一下,您不仅缺少很多非常好的 PHP 功能,而且还缺少显着的性能提升,因为 PHP 5.5 确实比 5.3 快得多。将“platform.php”配置添加到全局或项目的 composer.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",
.....
},
删除您的 composer.lock 和 vendor 目录。
现在将平台选项放置到 composer.json
"config": {
"platform": {
"php": "7.0"
}
},
最后,运行命令 composer install
试试波浪号运算符怎么样
波浪号运算符 ~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-beta.1 严格在 2.0 之前,但像 ~1.2 这样的版本约束不会安装它。如上所述~1.2 仅表示 .2 可以更改,但 1. 部分是固定的。
注意:~ 操作符对主要版本号的行为有一个例外。这意味着例如 ~1 与 ~1.0 相同,因为它不允许主要数字增加以保持向后兼容性。
是否有可能告诉作曲家需要 5.3.3 和 5.3.5 之间的 PHP 版本?
是的,有一个:
连字符版本范围 ( - ) 包含的版本集。右侧包含的部分版本使用通配符完成。例如 1.0 - 2.0 等价于 >=1.0.0 <2.1,因为 2.0 变为 2.0.*。另一方面,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"
}
}
- 我个人更喜欢这种方式,因为它更容易阅读和记住恕我直言。
config.platform.php
旨在准确解决此问题中的问题,并且它有效。也许使用的作曲家版本还不支持它。composer update
,就像对composer.json
的任何其他与依赖相关的更改一样。