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

时间:2014-10-09 11:23:08

标签: php composer-php

我们在您的服务器上运行不同的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;错误。

任何想法?提前致谢

6 个答案:

答案 0 :(得分:76)

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

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

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

答案 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报告没有找到包(没有告诉它已经看到包,但是由于它们必须被忽略)版本约束)。

可能有三种显而易见的方法:

  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)。

答案 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的网站上找到它时,我决定将其发布在这里。希望这对像我一样来到这里的人有所帮助。