Laravel Composer看到错误的PHP版本

时间:2017-10-17 08:41:10

标签: php laravel composer-php

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

当我运行composer install时,我收到以下错误

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?

谢谢。

7 个答案:

答案 0 :(得分:8)

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

示例

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

虽然可行,但最常推荐的方法是删除composer.lock文件,更改platform > php中的composer.json版本,然后执行composer install

答案 1 :(得分:5)

composer clear-cache
composer self-update
composer update --ignore-platform-reqs
or
composer install --ignore-platform-reqs

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

现在,关于原因,我列出的方法和另一篇文章都暗示,这两种方法都可能是解决方案。 Composer缓存有关系统,php和已安装软件包的信息,其原因有两个:1.连续性。2.版本历史。如果作曲家在发生外部更改时修改了自己的缓存文件,将很难知道哪些软件包版本彼此兼容以及何时兼容。

因此,在进行更新或安装时,作曲家不会检查php版本,它会引用其缓存。 Apache可能会对用户禁用的php版本的任何引用进行收集,它将在作曲家的缓存文件中找到一个引用。我的建议建议出于这个原因删除缓存。此外,

composer --self-update

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

composer update

在那时,如果最初是通过yum / apt安装了php,然后通过简单的Apache进行了升级,则--ignore-platform-reqs标志将绕过可能仍然存在的所有rpm排除功能,并允许安装或更新作曲家软件包。

答案 2 :(得分:0)

这是一个config / env问题。理想情况下,你可以有多个php版本进行测试,在apache中你可以交换这样的版本:

Example:
sudo a2dismod php5.6
sudo a2enmod php7.0
sudo service apache2 restart

这里发生的事情是当他运行php -v他正在运行php-cli,配置为在php7中运行,但也许他的apache启用了5.5。 所以

sudo a2dismod php5.5
sudo a2enmod php7.0
sudo service apache2 restart

答案 3 :(得分:0)

如果将来帮助某人,我在尝试从PHPStorm(2017.2)内部运行作曲家更新时遇到了这个问题。我尝试了上述建议,但没有一个有效。我在PHPStorm设置下添加了多个版本的PHP(5.6,7.0,7.1),因此我可以根据项目要求进行切换。无论选择哪种CLI解释器设置,它在调用composer时总是会看到PHP 7.0。在PHPStorm外部的终端中运行composer工作没有问题(引用路径配置版本,7.1)。就我而言,这感觉就像一个PHPStorm错误。

答案 4 :(得分:0)

在我的HostGator共享主机上,我可以通过在.bashrc文件中为要使用的php版本创建别名来解决此问题:

alias php='/opt/php71/bin/php'
alias composer="/opt/php71/bin/php ~/bin/composer/composer.phar"

在编辑.bashrc文件后,请记住源代码:'source〜/ .bashrc'

答案 5 :(得分:0)

我刚刚在 VS Code 中运行 composer update 时遇到了这个问题。

问题是 VS Code 的集成终端以为我使用的是 PHP 7.1,而我的 MacOS 系统也有 PHP 8.0。

我尝试从我的另一个终端 composer update 运行 Hyper Terminal 并且成功了。

当我输入时:

$ /usr/bin/php -v

在 VS Code 的终端中,它显示 7.1。

当我输入时:

$ which php
/usr/local/bin/php

$ /usr/local/bin/php -v

显示 PHP 8。

解决方案 是从 HyperTerm 而不是 VS Code 运行 composer update

这条评论很有帮助:

<块引用>

如果有人到达这里,我的问题是(在 mac 上)我在终端应用程序和 PhpStorm 上切换到 zsh shell,但系统默认值仍设置为 bash。 PhpStorm 的 composer 插件使用系统默认 shell 而不是 Preferences 中定义的 shell,后者在 PATH 上有一个旧的 PHP 版本。 – 米萨尔法蒂

答案 6 :(得分:0)

phpinfo() 为您提供 apache 的版本,这是项目运行的实际版本,如果您想更改它,只需按照以下步骤操作:

安装你想安装的php版本:

sudo add-apt-repository ppa:ondrej/php -y
sudo apt-get update

//replace X with the version you want
sudo apt-get install php7.X-fpm php7.X-curl php7.X-mbstring php7.X-mysql -y

现在重启你的apache:

sudo service apache2 restart

禁用当前的 php 版本(phpinfo() 给你的那个):

sudo a2dismod php7.2

现在启用您刚刚安装的 php 版本:

sudo a2enmod php7.X