【问题标题】:Force composer to require PHP Version between Version X and Version Y强制作曲家要求版本 X 和版本 Y 之间的 PHP 版本
【发布时间】:2014-12-04 07:24:38
【问题描述】:

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

现在我们遇到了一个问题,我们进行了“composer update”以获取一些外部 Bundle 的最新版本。 因为你的 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,包名称可能有错别字。”错误。

有什么想法吗?提前致谢

【问题讨论】:

标签: php composer-php


【解决方案1】:

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

是的,有一个:

连字符版本范围 (-)

包含的版本集。部分的 右侧包含的版本使用通配符完成。为了 示例 1.0 - 2.0 等价于 >=1.0.0 =1.0.0

示例:1.0 - 2.0

https://getcomposer.org/doc/articles/versions.md#hyphenated-version-range-

或者你可以像这样使用composer.json

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

- 我个人更喜欢这种方式,因为它更容易阅读和记住恕我直言。

【讨论】:

  • P.S.我是从搜索引擎到这里的,但在这里没有找到答案,所以当我在 Composer 的网站上找到它时,我决定把它贴在这里。希望这对像我一样来到这里的人有所帮助。
  • 有一个community guideline 用于删除与问题或答案不直接相关的内容,而是no "official" rule。如果您觉得它是答案不可或缺的一部分,或者只是想保留您的声音,请务必回滚我的编辑 - 尽管我认为将其作为评论留下是添加该添加的 的地方。也就是说,感谢您的回答和 +1。
  • @bishop thx,知道这很有趣。
  • 你在哪里输入这个?我整天都在为此苦苦挣扎。
  • @Eduardo 我已经为你编辑了我的答案 - 我添加了一个示例 composer.json。 hth!
【解决方案2】:

删除您的 composer.lockvendor 目录。

现在将 platform 选项放置到 composer.json

"config": {

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

},

最后,运行命令 composer install

【讨论】:

    【解决方案3】:

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

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

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

    【讨论】:

    • 虽然指定了这个参数,但是库仍然会安装一个高于指定PHP版本的版本。例如,我指定了 PHP 版本 5.4.36,但 Composer 仍然安装 Symfony 版本 3.1.3,它需要 5.5+。结论:不起作用。
    • platform 主要是让您伪造平台包(PHP 和扩展),以便您可以模拟生产环境。 require 是版本 X 和版本 Y 之间的更好选择
    • 这对我来说效果很好!我需要安装与 PHP 兼容的软件包
    • 也许 Raptor 的链中某处存在错误,但 config.platform.php 旨在准确解决此问题中的问题,并且它有效。可能使用的 composer 版本还不支持。
    • 正是我想要的,谢谢!需要注意的是,您需要在设置后运行 composer update,就像对 composer.json 的任何其他与依赖相关的更改一样。
    【解决方案4】:

    试试这个(去掉逗号):

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

    【讨论】:

      【解决方案5】:

      我觉得至少可以说您正在使用可用的最新 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 报告没有找到包(不是说它已经看到了包,但它们不得不被忽略,因为版本约束)。

      可能有三种明显的出路:

      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 生产版本进行开发)。

      【讨论】:

      • 我添加了一个新的第三个选项,它应该适用于 Composer 的更新版本,可能从 1.0.0-beta1 及更高版本开始(我现在不会深入研究 alpha 发行说明来确切说明你)。只需使用稳定的 1.0.0 版本即可。
      • @Arcesilas 你是什么意思?问题基本上是关于如何限制 Composer 在更新期间为太高级版本的 PHP 选择包 - 所以锁定文件虽然会影响更新的结果,但在这种情况下是没有意义的。跨度>
      • 人是有限制的......不是那么可疑,对吧?
      • 在开发和生产中不使用相同的版本是有问题的。错误很容易出现,例如使用生产中没有的 PHP 功能,或者在 DEV 中修复了错误,但在生产中仍未修复。不使用相同的版本意味着您不会遇到相同的行为。尤其是在 prod 中的 PHP 5.3 与 dev 中的 PHP 5.5 混合时(如果将 5.5.x 与 5.5.y 混合,问题不太可能或令人惊讶)。
      • 嗨,斯文,我们也这样做。在更高版本中开发,然后我们在生产中。原因是:我们的代码已经为未来做好了准备。因此,当我们需要升级时,我们不必太担心,因为它已经过测试。我们是没有 php-unit 等的普通开发人员,因为当我们的框架出现时,它并不存在。所以我们有其他方法来监控和测试我们的代码。
      【解决方案6】:

      试试波浪号运算符怎么样

      波浪号运算符 ~1.2 对于遵循语义版本控制的项目非常有用。 ~1.2 是 相当于 >=1.2,

      下一个重要版本(波浪号运算符)#

      ~ 操作符最好用例子来解释: ~1.2 相当于

      =1.2,=1.2.3,

      注意:虽然 2.0-beta.1 严格来说是在 2.0,版本约束,如 ~1.2 不会安装它。作为 上面说的~1.2只意味着 .2 可以改变,但 1. 部分固定。

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2016-03-29
        • 2021-02-22
        • 1970-01-01
        • 2013-03-18
        • 2017-11-22
        • 2019-04-21
        • 1970-01-01
        相关资源
        最近更新 更多