Laravel Composer 看到错误的 PHP 版本



我正在尝试安装一个较旧的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 )

这是我的作曲家.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?

谢谢。

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. 版本历史记录。 如果 compator 在发生外部更改时修改了自己的缓存文件,则很难知道哪些包版本彼此兼容以及何时兼容。

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

composer --self-update

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

composer update

此时,如果PHP最初是通过yum/apt安装的,然后由Easy Apache升级,那么--ignore-platform-reqs标志将绕过任何可能仍然存在的RPM Exclusion功能,并允许安装或更新Composer软件包。

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

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

尽管它有效,但最推荐的方法是删除composer.lock文件,在composer.json中更改platform > php版本,然后执行composer install.

在我的 HostGator 共享主机上,我能够通过在我的 .bashrc 文件中为我想使用的 php 版本创建别名来克服这个问题:

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

请记住在编辑 .bashrc 文件后获取源:"source ~/.bashrc">

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

对于 Laravel 代客泊车用户

如果您使用的是 Laravel 代客 (https://laravel.com/docs/8.x/valet)

您需要运行运行

valet use php --force

之后

composer global update

这是一个配置/环境问题。理想情况下,您可以使用多个 php 版本进行测试,在 apache 中,您可以交换如下版本:

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

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

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

> 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

我只是在 VS Code 内部运行composer update时遇到了这个问题。

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

我尝试从另一个终端运行composer updateHyper 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的作曲家插件使用系统默认的shell,而不是首选项中定义的shell,后者在PATH上有一个旧的PHP版本。– 马萨法蒂

所以我能够通过在我的主"配置.php中更改 PHP 的版本来解决这个问题。在"$required_php_version = 7.2"之前,我已经升级到8.0.9,所以它没有采用正确的版本,所以我把它改成了'$required_php_version = 8.0.9'。或者在这里,可以简单地放置大于特定版本。

之后,更改"composer.json"和"composer.lock"文件中所需的php版本以反映相同的内容。

//detect enviroment
$required_php_version = '8.0.9';
$detect_compentent_list = array('mysqli_connect', 'mod_rewrite', 'ZipArchive', 'gd', 'curl', 'bcmath');
$detect_directory_list = array('upload', 'backup', 'application/config', 'application/logs', 'application/cache/ci_session', 'application/libraries');

我会记住这一点,以便将来发布答案。 伊利基尔58

我遇到了同样的问题,运行valet isolate php@7.3对我有用。

希望有帮助。

这是完整而正确的解决方案。

降级 PHP-CLI 版本

sudo update-alternatives --config php

显示如下所示的输出:

sudo update-alternatives --config php
There are 4 choices for the alternative php (providing /usr/bin/php).
Selection    Path             Priority   Status
------------------------------------------------------------
* 0            /usr/bin/php8.1   81        auto mode
1            /usr/bin/php5.6   56        manual mode
2            /usr/bin/php7.2   72        manual mode
3            /usr/bin/php7.4   74        manual mode
4            /usr/bin/php8.1   81        manual mode
Press <enter> to keep the current choice[*], or type selection number: 3
update-alternatives: using /usr/bin/php7.4 to provide /usr/bin/php (php) in manual mode

为 Apache 降级

sudo a2dismod php8.1
sudo a2enmod php7.4
sudo systemctl restart apache2

参考:链接

相关内容

  • 没有找到相关文章

最新更新