指定平台 php 版本后 Composer 无法正常工作

Posted

技术标签:

【中文标题】指定平台 php 版本后 Composer 无法正常工作【英文标题】:Composer not working after specifying platform php version 【发布时间】:2020-07-26 11:18:30 【问题描述】:

我正在开发一个 WebApp 项目,我想为我的类属性指定类型。我没有意识到这是 php 7.4.* 版本的功能,所以我阅读了this 并更新了我的composer.json 以包含相关材料:


    "name": "srmes/shopping-app-test",
    "description": "an assignment from `scandiweb.com`. A simple php-based web application to display and inventory a range of products",
    "require-dev":  
        "phpunit/phpunit":"~9.0",
        "squizlabs/php_codesniffer": "~3.0"
    ,
    "require": 
        "doctrine/orm": "~2.7",
        "php": "7.4.4"
    ,
    "config": 
        "platform": 
            "php": "7.4.4"
        
    ,
    "autoload" : 
        "psr-4": 
            "WebApp\\": "src/"
         
    ,
    "autoload-dev" : 
        "psr-4": 
            "WebApp\\Tests\\" : "tests/"
        
    

然后我运行composer installcomposer update

安装似乎没有出现任何问题,只是现在我的 phpunit 测试没有运行:

PHPUnit 9.1.1 by Sebastian Bergmann and contributors.



Time: 58 ms, Memory: 4.00 MB

No tests executed!

并且所有composer 命令都给出以下错误:

Parse error: syntax error, unexpected 'string' (T_STRING), expecting function (T_FUNCTION) or const (T_CONST) in /Users/ScottAnderson/Documents/Tech/commissions/shopping_app_test/vendor/ocramius/package-versions/src/PackageVersions/Installer.php on line 33

具有讽刺意味的是,这是我试图使用的 php 功能的语法异常!我什至无法运行 composer -vvv 来调试 composer 正在使用哪个 php 可执行文件。

为了解决这个问题,我应该使用像phpbrew 这样的包来制作php 的目录环境吗?

我的假设是,在 composer.json 中要求 php 7.4.4 之后,composer 和 phpunit 将安装和使用正确的 php 可执行文件

【问题讨论】:

【参考方案1】:

看起来你没有运行 php 7.4。并且安装的依赖项(这里是 phpunit 和 PackageVersion)需要它。 有时,composer 会运行与事件挂钩的命令,如果命令失败,其他一切都会失败。

删除供应商文件夹。 删除 composer.lock 移除 composer.json 中 php 7.4 版本的限制 运行作曲家更新 你应该没事吧?

顺便说一句,composer 管理项目依赖项,而不是安装的 php 版本。 如果您刚开始使用 PHP,我建议您坚持使用广泛可用的 7.3。老实说,您不需要为该语言添加最新的语法。

【讨论】:

我认为这是一个有效的响应,但我想使用 7.4.4,因为这是在我的 docker 容器中实现的 在这种情况下,我只能建议更新您的 php 版本或仅在 docker 容器中运行您的命令。 (我猜你设法在 docker 容器中安装了运行 composer 命令的依赖项)

以上是关于指定平台 php 版本后 Composer 无法正常工作的主要内容,如果未能解决你的问题,请参考以下文章

在多版本php环境,指定composer使用的php版本

三大平台composer安装

Windows 更新 1903 后 Composer 无法使用 laravel

参考 - 升级 PHP 后 Composer 错误“您的 PHP 版本不满足要求”

使用 composer 检查 php 项目中已知漏洞的工具

laravel composer 安装指定版本以及基本的配置