【发布时间】:2020-08-20 14:47:39
【问题描述】:
我有一个 composer.json 文件,其中包含以下内容:
"require": {
"php": "~7.3.0",
"ext-imagick": "*",
"ext-apcu": "*",
"ext-json": "*",
"ext-blackfire": "*",
"doctrine/doctrine-migrations-bundle": "^1.3",
--ignore-platform-reqs 后面的使用与 docker 镜像没有这些扩展有关,但 Heroku 环境有。
后者需要一个包,它需要另一个包。
$ composer why ocramius/package-versions
doctrine/orm v2.7.2 requires ocramius/package-versions (^1.2)
ocramius/proxy-manager 2.8.0 requires ocramius/package-versions (^1.8.0)
$ composer why ocramius/proxy-manager
doctrine/migrations v1.8.1 requires ocramius/proxy-manager (^1.0|^2.0)
这是安装使用 PHP 7.4 的属性类型声明的代码。这在 PHP 7.3 中引发了一个严重的错误。
$ php -d memory_limit=-1 composer.phar update --ignore-platform-reqs
Loading composer repositories with package information
Updating dependencies (including require-dev)
Package operations: 195 installs, 0 updates, 0 removals
- Installing ocramius/package-versions (1.8.0): Loading from cache
Parse error: syntax error, unexpected 'string' (T_STRING), expecting function (T_FUNCTION) or const (T_CONST) in
/var/www/project/vendor/ocramius/package-versions/src/PackageVersions/Installer.php
on line 33
为什么我总是得到这个版本的 ocramius/package-versions 以及如何防止这个错误(和那个包版本)发生?
【问题讨论】:
-
为什么不使用只需要兼容包的常用技术呢?多年来一直记录设置 PHP 平台
-
感谢您的链接;它不太详细地说明了我在下面的回答所陈述的内容,但没有解释为什么它允许将 7.4 包放入供应商。您必须解释“只需要兼容包的常用技术”。
标签: php package composer-php php-7.3