Laravel Composer 看到错误的 PHP 版本

2022-08-30 14:27:37

我正在尝试安装一个较旧的Laravel项目。

当我运行作曲家安装时,我收到以下错误

This package requires php >=5.6.4 but your PHP version (5.5.35) does not satisfy that requirement.

当我跑步时

php -v

我得到以下结果

PHP 7.1.10 (cli) (built: Oct 12 2017 14:00:12) ( ZTS )

这是我的 composer.json 的内容

{
    "name": "laravel/laravel",
    "description": "The Laravel Framework.",
    "keywords": ["framework", "laravel"],
    "license": "MIT",
    "type": "project",
    "require": {
        "php": ">=5.6.4",
        "doctrine/dbal": "^2.6",
        "guzzlehttp/guzzle": "^6.3",
        "intervention/image": "^2.4",
        "intervention/imagecache": "^2.3",
        "laravel/framework": "5.4.*",
        "laravel/tinker": "~1.0",
        "laravelcollective/html": "^5.4",
        "maatwebsite/excel": "^2.1",
        "sentry/sentry-laravel": "^0.8.0",
        "spatie/laravel-glide": "^3.2",
        "spatie/laravel-permission": "^2.6",
        "spatie/laravel-pjax": "^1.3"
    },
    "require-dev": {
        "fzaninotto/faker": "~1.4",
        "mockery/mockery": "0.9.*",
        "phpunit/phpunit": "~5.7"
    },
    "autoload": {
        "classmap": [
            "database"
        ],
        "psr-4": {
            "App\\": "app/"
        }
    },
    "autoload-dev": {
        "psr-4": {
            "Tests\\": "tests/"
        }
    },
    "scripts": {
        "post-root-package-install": [
            "php -r \"file_exists('.env') || copy('.env.example', '.env');\""
        ],
        "post-create-project-cmd": [
            "php artisan key:generate"
        ],
        "post-install-cmd": [
            "Illuminate\\Foundation\\ComposerScripts::postInstall",
            "php artisan optimize"
        ],
        "post-update-cmd": [
            "Illuminate\\Foundation\\ComposerScripts::postUpdate",
            "php artisan optimize"
        ]
    },
    "config": {
        "preferred-install": "dist",
        "sort-packages": true,
        "optimize-autoloader": true
    }
}

这个项目怎么可能认为我运行了php 5.6?

谢谢。


答案 1
composer clear-cache
composer self-update
composer update --ignore-platform-reqs
or
composer install --ignore-platform-reqs

其他信息和对@nicohase的回应,Nico,当你声明composer没有使用与apache相同的php可执行文件时,你是对的。为什么 composer 会确保 php-cli 满足其他所需包的要求?它不会,也不会。用户使用php-cli管理作曲家,这本质上意味着它们是兼容的。Composer 正在检查以确保在 Web 服务器和其他软件包上运行的 php 版本兼容。

现在,至于为什么,我列出的方法和另一篇文章建议的方法都是可能的解决方案。Composer 缓存有关系统、php 和安装的软件包的信息,原因有两个,1.连续性。。2. 版本历史。如果 composer 在发生外部更改时修改了自己的缓存文件,则很难知道哪些包版本彼此兼容,以及何时兼容。

因此,Composer在更新或安装时不会检查php版本,而是引用其缓存。Apache可能会删除用户禁用的任何对php版本的引用,它会在composer的缓存文件中找到引用。我的建议建议出于这个原因删除缓存。此外,

composer --self-update

告诉作曲家更新自己,而不是它管理的软件包...

composer update

在这一点上,如果php最初是通过yum/apt的方式安装的,然后通过简单的apache升级,那么--ignore-platform-reqs标志将绕过任何可能仍然存在的rpm排除功能,并允许安装或更新作曲家包。


答案 2

我也遇到过这个问题。如果您不想更新所有 Composer 包,可以通过手动更改文件并将实际的 PHP 版本写入 JSON 对象来解决此问题。composer.lockplatform > php

...
"platform": {
    "php": "7.1"
}
...

尽管它有效,但最推荐的方法是删除文件,更改其中的版本,然后执行 。composer.lockplatform > phpcomposer.jsoncomposer install


推荐