我们在您的服务器上运行不同的PHP版本(最大5.3.5)和开发机器(最大5.5.9)。
现在我们遇到了问题,我们做了一个"作曲家更新"获取一些外部捆绑包的最新版本。 因为你的composer.json看起来像
"require": {
"php": ">=5.3.3",
.....
},
我们得到一些需要PHP 5.5的Bundles。我们的开发机器没有问题,但在服务器上:(
有没有可能告诉作曲家要求5.3.3和5.3.5之间的PHP版本?或最大可用版本?
我试过
"require": {
"php": ">=5.3.3, <=5.3.5",
.....
},
和
"require": {
"php": "<=5.3.5",
.....
},
但两者都没有成功。我得到了一个&#34;在任何版本中找不到所请求的包php,包名中可能有拼写错误。&#34;错误。
任何想法?提前致谢
答案 0 :(得分:76)
由于composer.json中的config参数可用。你可以这样:
{
"name": ".../...",
"config": {
"platform": {
"php": "5.3.5"
}
},
"require": {
...
}
}
答案 1 :(得分:37)
我发现至少可以说你使用最新的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报告没有找到包(没有告诉它已经看到包,但是由于它们必须被忽略)版本约束)。
可能有三种显而易见的方法:
将您的开发环境降级到您实际使用的生产版本。如果使用多个:最老的一个。这样就可以匹配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)。
答案 2 :(得分:8)
尝试使用代字号运算符
Tilde Operator~1.2对于遵循语义版本控制的项目非常有用。 ~1.2是 相当于&gt; = 1.2,&lt; 2.0。有关更多详细信息,请阅读下一节 下方。
下一个重要发布(Tilde Operator)#
〜运算符最好通过示例解释: ~1.2相当于
= 1.2,&lt; 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因为它不允许主要数字增加试图保持 向后兼容性。
答案 3 :(得分:5)
试试这个(删除逗号):
"require": {
"php": ">=5.3.3 <=5.3.5",
.....
},
答案 4 :(得分:5)
删除 composer.lock 和 供应商 目录。
现在将 平台 选项放入 composer.json
"config": {
"platform": {
"php": "7.0"
}
},
最后,运行命令 composer install
答案 5 :(得分:0)
是否有可能告诉作曲家要求使用PHP版本 在5.3.3和5.3.5之间?
是的,只有一个:
带连字符的版本范围(-)
一组包含版本。部分的 右边的版本包含通配符。对于 示例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-
P.S。我是从搜索引擎到达的,但在这里找不到答案,因此当我在Composer的网站上找到它时,我决定将其发布在这里。希望这对像我一样来到这里的人有所帮助。