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

现在我们遇到了一个问题,我们做了一个"composer更新",以获得一些外部Bundle 包的最新版本.

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

我们得到了一些需要PHP5.5的Bundle 包.在我们的开发机器上没有问题,但是在服务器上:(

有没有可能告诉composer需要一个介于5.3.3和5.3.5之间的PHP版本?还是最大可用版本?

我试过了

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

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

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

有什么 idea 吗?提前谢谢

推荐答案

我觉得至少可以说,您正在使用最新的PHP进行开发,并且正在使用非常过时的版本运行生产.由此可能会产生很多问题,不仅是因为您可能会缺少安全补丁,更重要的是因为PHP错误修复程序主要在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功能,还错过了显著的性能提升,因为PHP5.5确实比5.3快得多.

  3. 将"platform.php"配置添加到全局或项目的comper.json.这将告诉Composer覆盖运行Composer本身的PHP版本,转而计算与该不同PHP版本的依赖关系.全局设置为composer config -g platform.php 5.3.5(将影响所有后续的Composer运行),本地设置不为-g(如果您在使用不同PHP生产版本的多个项目上进行开发,则只会影响该项目中的Composer操作).

Php相关问答推荐

当我们使用PHPUnit时,控制台中的--uses param到底起了什么作用以及如何使用?

try 修改这个PHP代码如果语句在WordPress""

从WooCommerce购物车和 checkout 页面自定义发货标签

在Laravel Eloquent中实现一对多关系

WooCommerce HPOS管理订单列表中带有订单元数据的定制列

使用列入黑名单的单词和自定义业务逻辑的组合将特定的子字符串包装在HTML标记中

如何在汇总表构建器中操作LALAVEL细丝Sum::Make()值

如果日期是过go 日期,则隐藏事件发布类型

如何在微软图形API中使用用户S访问令牌或基于租户ID的访问令牌?

如果所有请求都通过index.php路由,如何使用htaccess文件强制使用HTTPS?

将一个表中的行连接为不同表MYSQL中的一列

用自定义代码替换 WooCommerce 单一产品简短描述

计算添加到购物车的点击次数并将其显示在 WooCommerce 管理产品列表中

在 vue 自定义渲染器中访问变量

Woocommerce的数量和价格条件

如何在WooCommerce中为访客购买者分配自定义客户代码

PHP删除具有相同键的项目,除了具有最低值的项目

为什么在解压缩具有混合字符串和 int 键的关联数组时出现错误消息无法使用位置参数...?

如何在 Process facade 中转义特殊字符?

获取具有所有特定相关模型的模型