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

2022-08-30 08:35:05

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

现在我们遇到了一个问题,即我们进行了“作曲家更新”以获取某些外部捆绑包的最新版本。由于您的 composer.json 看起来像

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

我们得到了一些需要 PHP 5.5 的捆绑包。在我们的开发计算机上没有问题,但在服务器上:(

有没有可能告诉作曲家要求PHP版本在5.3.3和5.3.5之间?还是最大可用版本?

我试过了

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

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

但两者都没有成功。我得到一个“请求的包php在任何版本中都找不到,包名称中可能有拼写错误。错误。

有什么想法吗?提前致谢


答案 1

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

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

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


答案 2

我发现至少可以说你正在使用最新的PHP进行开发并且正在使用非常过时的版本运行生产是有问题的。这将产生很多可能的问题,不仅因为您将缺少安全补丁,而且更重要的是因为PHP错误修复主要在版本5.3.9和5.3.23中引入,这些修复在某些细节上从根本上改变了PHP行为。不谈论意外使用5.4或5.5功能的风险。

而且真的没有办法让Composer处理这种情况。运行时使用的 PHP 版本决定了依赖项的解析,受 PHP 版本和已安装的 PHP 扩展的影响。composer update

如果用于更新的 PHP 与此版本要求不匹配,则无法定义包应仅用于 5.3.3 和 5.3.5 之间的 PHP 版本。由于使用的 PHP 版本超过了版本上限的约束,因此这样的包不符合满足版本要求的条件,并且 Composer 报告没有找到任何包(没有说明它已经看到了这些包,但由于版本约束而不得不忽略它们)。

可能有三种明显的出路:

  1. 将开发环境降级到您实际使用的生产版本。如果使用多个:最旧的一个。这样,PHP版本的任何要求都将得到匹配。然后运行,您就完成了。composer update

  2. 升级您的生产环境。不需要进一步的解释,但我必须提到,你不仅缺少了很多非常漂亮的PHP功能,你还缺少了实质性的性能提升,因为PHP 5.5真的比5.3快得多。

  3. 将“平台.php”配置添加到全局或项目的 composer.json。这将告诉 Composer 覆盖运行 Composer 本身的 PHP 版本,而是计算具有不同 PHP 版本的依赖关系。 对于全局设置(将影响所有进一步的 Composer 运行),而不用于本地设置(仅影响该项目中的 Composer 操作,以防您在具有不同生产版本的 PHP 的多个项目上进行开发)。composer config -g platform.php 5.3.5-g


推荐