在作曲家中覆盖 PHP 基本依赖项
Posted
技术标签:
【中文标题】在作曲家中覆盖 PHP 基本依赖项【英文标题】:Override PHP base dependency in composer 【发布时间】:2015-12-26 15:11:41 【问题描述】:我尝试在只有 php 5.5.6 的主机上安装 Laravel 5.1。虽然我要求客户升级,但这可能是不可能/不可行的。
所以我得到:
- This package requires php >=5.5.9 but your PHP version (5.5.6)
does not satisfy that requirement.
在composer.phar install
.
有没有办法让作曲家安装忽略这种依赖关系?
我认为它应该是安全的,因为只有从 5.5.6 到 5.5.9 的错误修复。
【问题讨论】:
不幸的是,Laravel 项目宣布他们的 5.1 版本与他们可以在 TravisCI 上测试的最旧的 PHP 版本兼容,即 5.5.9。一方面这是一个合理的选择。另一方面,对于在旧版本 5.5 PHP 分支上运行的人来说,这是一个不必要的障碍,因为在 5.5.9 之前的 PHP 5.5 中没有向后不兼容的更改 - 代码将运行。--ignore-platform-req
的问题是它会影响所有的包,你可能会得到只在 PHP 5.6 上运行的包。
另见:Reference - Composer error “Your PHP version does not satisfy requirements” after upgrading PHP。
【参考方案1】:
您可以为诸如install
、update
等作曲家命令使用--ignore-platform-reqs
选项。
--ignore-platform-reqs:忽略php、hhvm、lib-*和ext-*要求,即使本地机器不满足也强制安装这些。另请参阅平台配置选项。
https://getcomposer.org/doc/03-cli.md
所以你可以试试
composer install --ignore-platform-reqs
【讨论】:
是否还有一种更细粒度的方法,它只忽略 PHP 版本?或者我什至可以要求 5.5.6 而不是 5.5.9 我不认为有这样的事情。至少我找不到。 找到了方法。直接在文档中。但仅适用于子包。看我的回答。 也检查this question【参考方案2】:错误消息表明来自主composer.json
的要求。版本要求可以随意调整:
"require":
"php": ">=5.5",
像这样更改版本后,我得到:
Problem 1
- Installation request for classpreloader/classpreloader 2.0.0 -> satisfiable by classpreloader/classpreloader[2.0.0].
- classpreloader/classpreloader 2.0.0 requires php >=5.5.9 -> your PHP version (5.5.6) or "config.platform.php" value does not satisfy that requirement.
Problem 2
- Installation request for laravel/framework v5.1.17 -> satisfiable by laravel/framework[v5.1.17].
- laravel/framework v5.1.17 requires php >=5.5.9 -> your PHP version (5.5.6) or "config.platform.php" value does not satisfy that requirement.
Problem 3
- Installation request for laravelcollective/html v5.1.6 -> satisfiable by laravelcollective/html[v5.1.6].
- laravelcollective/html v5.1.6 requires php >=5.5.9 -> your PHP version (5.5.6) or "config.platform.php" value does not satisfy that requirement.
Problem 4
- laravel/framework v5.1.17 requires php >=5.5.9 -> your PHP version (5.5.6) or "config.platform.php" value does not satisfy that requirement.
- jenssegers/agent v2.1.7 requires illuminate/support ~4.0|~5.0 -> satisfiable by laravel/framework[v5.1.17].
- Installation request for jenssegers/agent v2.1.7 -> satisfiable by jenssegers/agent[v2.1.7].
在composer.json
中使用如下sn-p,可以模拟一个php版本
[...]
"config":
"preferred-install": "dist",
"platform":
"php": "5.5.9"
文档:https://getcomposer.org/doc/06-config.md#platform
平台
允许您伪造平台包(PHP 和扩展),以便您可以模拟生产环境或在配置中定义目标平台。示例:“php”:“5.4”,“ext-something”:“4.0”。
不要忘记在此之后运行composer.phar update
【讨论】:
我浏览了platform
部分,但没有仔细阅读。如此简单:) 我已在您的答案中添加了文档引用。
如果您的基础 PHP 运行的版本与运行代码的版本不同,这里提到的平台包的模拟也会有所帮助。例如,我的一台运行 Plesk 的服务器具有 5.3.x 的基本 PHP 版本,虚拟站点的代码在 5.4.x 上运行。如果没有这个,集中安装的作曲家只会选择基础版本,因此在尝试使用依赖于不同 PHP 版本的包时会产生问题
有没有办法从 CLI 做到这一点?类似composer install --config platform.php 5.3.3
@Starx 为什么不使用--ignore-platform-reqs
?
@Starx:是的,composer config platform.php 5.6
。【参考方案3】:
我遇到了同样的问题,通过以下命令解决了:
composer config platform.php 7.2.22
*** 你可以根据你的替换 PHP 版本。
【讨论】:
你确定这有帮助吗?如果包要求特定的 PHP 版本,可能有充分的理由不忽略此 @NicoHaase 是的,绝对是......我已经对此进行了测试,它对我有用,这就是为什么如果它对其他人有帮助,我会在这里分享。 @NicoHaase 另外我不是要求忽略 php 版本,我的问题是我的作曲家文件中提到的 php 版本不正确,我已更正并且作曲家安装工作。 谢谢。这对于 Mac Catalina 上立即更新 php 的用户可能非常有用。 我认为好的方法是:composer install --ignore-platform-reqs
这个命令救了我的命..哈哈:v【参考方案4】:
根 composer.json 需要 php ^7.3,但您的 php 版本 (8.0.0) 不满足该要求。
composer install --ignore-platform-reqs
【讨论】:
谢谢,我无法在推荐项目composer --ignore-platform-reqs create-project drupal/recommended-project:8.9.20 project-name
中使用其他答案,但这个答案有效。【参考方案5】:
运行与版本无关的命令可解决此错误 composer install --ignore-platform-reqs
【讨论】:
【参考方案6】:更改您的 php 版本,例如
"require":
"php": "^7.3|^8.0",
.....
,
或喜欢
"require":
"php": ">=7.3",
.....
,
【讨论】:
【参考方案7】:只需在 composer.json 文件中添加这些行
"config":
"platform":
"php": "5.5.9"
,
然后运行命令,
composer update or install
【讨论】:
【参考方案8】:在 composer.json 中更改 php 版本
删除 composer.lock
运行:作曲家安装
对我有用
【讨论】:
以上是关于在作曲家中覆盖 PHP 基本依赖项的主要内容,如果未能解决你的问题,请参考以下文章