【问题标题】:Composer dependencies error on web hosting - Laravel 8Web 托管上的 Composer 依赖项错误 - Laravel 8
【发布时间】:2023-01-14 22:37:02
【问题描述】:

所以我想将我的 Laravel 8 项目上传到虚拟主机,但是当我完成时,有一条错误消息:

Fatal error: Composer detected issues in your platform: Your Composer dependencies require a PHP version ">= 8.1.0". You are running 8.0.7. in /storage/ssd4/678/18965678/laravel/vendor/composer/platform_check.php on line 24

我在虚拟主机上查看了PHP版本,只有8.0版本。

我尝试将我的 PHP 降级到 7.48.0 版本并重新上传到虚拟主机,但错误越来越严重。

我认为这与作曲家(?)有关,但我不确定解决什么以及如何解决。

有人对此有建议吗?非常感谢你。

*编辑完成的错误

【问题讨论】:

  • 由于错误抱怨您的 PHP 版本太低(当您使用 8.0 时它需要 PHP 8.1.0),那么逻辑在哪里降级你的 PHP 版本?你应该升级它到至少PHP 8.1.0
  • 升级 PHP 确实是显而易见的事情。你有理由不能吗?
  • 好吧,上次我检查了 8.0 < 8.1。这有什么不明白的? PHP 不是您项目的一部分,它是服务器的一部分。
  • 确实是的。或者找出哪些包需要 PHP >= 8.1 并查看是否可以降级它/它们。这可能是容易的,也可能是困难的,我不能说。大多数包应该仍然能够与 PHP 7 一起运行。这表明在本地和服务器上运行相同的 PHP 版本很重要。
  • 我会说这是一个配置问题。有无数种方法可以解决它,但我尝试在回答中首先清楚地解释它是关于什么以及如何解决。此外(现已更新),当服务器上的 PHP 版本与本地版本不同(本地版本似乎不兼容)时,服务器版本是领先的,应在项目中针对目标平台进行配置。这可以包括 Composer 项目配置,我在(更新的)答案中展示了如何使用标准程序(参见锁定错误的平台).

标签: php composer-php laravel-8 web-hosting


【解决方案1】:

我认为这与作曲家(?)有关,但我不确定解决什么以及如何解决。

是的,您正在执行一个 Composer 命令,假定为 composer install,并且您的项目中有一个 composer.lock 文件。

什么?

当 Composer 从锁定文件(默认名为 composer.lock)安装时,它会检查平台这样您就不会在不注意的情况下安装不兼容的依赖项。

如果平台存在偏差(PHP 版本、安装的 PHP 扩展等),它会发出通知:

Fatal error: Composer detected issues in your platform: Your Composer dependencies require a PHP version "&gt;= 8.1.0". You are running 8.0.7. in /storage/ssd4/678/18965678/laravel/vendor/composer/platform_check.php on line 24

这基本上意味着锁定文件引用的依赖项 - 如果它们被安装 - 将与 Composer 在运行 composer install 的系统上检测到的 PHP 版本不兼容。

对比错误信息:A PHP version equal or greater than 8.1.0 is required, but detected PHP version is 8.0.7 which below the version.

怎么解决?

解决方案在一定程度上取决于他们如何处理固定版本以及平台的采购和管理。

鉴于锁定文件中的固定版本是领先的,这需要平台匹配。在基于 Composer 的 PHP 项目中经常出现这种情况,所以我怀疑这也是他们的设置(该项目在 composer.lock 文件中附带了一个已定义的依赖项配置)。

那么解决方法就比较简单了: 由于PHP版本太低,你执行composer install的系统需要升级到至少PHP版本8.1.0。通常您会选择8.1.x 系列中的最新版本。

更改系统配置后,您可以再次运行 Composer 安装命令,现在应该可以成功通过 Composer 平台检查。

理论到此为止。

锁定错误的平台

我的 PHP 版本已经是 8.1.6 先生,我不知道为什么错误会这样说。我所知道的是我使用的主机最多支持 PHP 8.0

托管是出现错误的系统。这我的是您创建锁定文件的系统。

这现在导致了一个问题。当您分发锁定文件时,它使用了错误的平台。有两种方法可以处理这个问题,并且都将在您的系统和托管系统之间调整 PHP 版本:

  1. 告诉 Composer 该平台使用哪个 PHP 版本。
  2. 在您的系统上使用托管 PHP 版本。

    您可以执行 1.、2. 甚至两者,它们并不相互排斥。

    通常最简单的是 1. 因为它不涉及系统配置。

    但是 2. 有更多的属性可以有利于您的 PHP 项目开发。

    告诉 Composer 平台使用哪个 PHP 版本

    这是 Composer 项目配置中的一个选项。 Configure the PHP platform 版本到您的主机之一 (8.0.7):

    $ composer config platform.php 8.0.7
    

    (命令成功时不会产生任何输出;另见Tell Composer to use Different PHP Version

    之后,您必须更新项目依赖项,因为 Composer 现在正在使用配置的 PHP 版本 8.0.7 来解决依赖项:

    $ composer --no-plugins --no-ansi -n update --no-scripts
    Loading composer repositories with package information
    ...
    Updating dependencies
    ...
    Generating autoload files
    

    这会更新锁定文件,同时注意只需要与该 PHP 版本兼容的依赖版本。

    现在提交锁定文件并使用它发布项目。

    $ composer validate --no-check-publish 
        && git add composer.json composer.lock 
        && git commit -m "configure, update and lock dependencies" 
        && git push hosting
    ...
    

    在您的系统上使用托管 PHP 版本

    您通常应该使用与运行它的系统上使用的相同 PHP 版本来开发 PHP 项目。这有助于防止 PHP 运行时配置发生偏差时出现问题,例如与您的情况不同的 PHP 版本。

    请查阅您的团队开发文档,了解如何在开发盒上配置 PHP 运行时。如果没有团队并且项目文档也没有涵盖它,请查阅您的系统操作手册或操作系统手册,如果您手头没有专业的系统管理人员可以查阅。

    这通常由系统包管理器完成。例如,我的系统上安装了几个 PHP 版本。然后在每个项目开发环境中,我指定要使用哪个 PHP 版本并使用它进行开发。例如。 Composer 使用该 PHP 版本运行。

【讨论】:

    【解决方案2】:

    添加到 composer.json > 配置 "platform-check": false, 然后运行 ​​composer autoload-dump。

    【讨论】:

      猜你喜欢
      • 2020-01-07
      • 2014-09-18
      • 2018-09-22
      • 1970-01-01
      • 2014-05-26
      • 1970-01-01
      • 2015-01-24
      • 1970-01-01
      • 2018-02-27
      相关资源
      最近更新 更多