致命错误:composer.lock是为PHP 7.4或更高版本创建的,但当前的PHP版本是7.3.11

致命错误:composer.lock是为PHP 7.4或更高版本创建的,但当前的PHP版本是7.3.11,php,symfony,Php,Symfony,我想创建一个Symfony CRUD应用程序。 以下是我所做的步骤: 使用PHP7.3.11从这里下载并安装XAMPP 使用Windows的CLI导航到htdocs 使用命令composer创建项目symfony/skeleton my_project 打开我的浏览器(Firefox 70.0.1)并导航到URL:localhost/my_project/public/ 在这里我得到了错误信息: 致命错误:composer.lock是为PHP 7.4或更高版本创建的,但当前的PHP版本是7.

我想创建一个Symfony CRUD应用程序。 以下是我所做的步骤:

  • 使用PHP7.3.11从这里下载并安装XAMPP
  • 使用Windows的CLI导航到
    htdocs
  • 使用命令
    composer创建项目symfony/skeleton my_project
  • 打开我的浏览器(Firefox 70.0.1)并导航到URL:
    localhost/my_project/public/
在这里我得到了错误信息:

致命错误:composer.lock是为PHP 7.4或更高版本创建的,但当前的PHP版本是7.3.11。

当我在CLI中用
php-v
检查我的php版本时,我得到的结果是我使用了PHP7.4.0(CLI)。 当我通过单击XAMPP(localhost/dashboard/PHPInfo.php)仪表板上的PHPInfo检查php版本时,页面显示了php版本7.3.11

在创建的symfony文件夹中有一个名为symfony.lock的文件。有一个条目叫做
“php”:{“version”:“7.4”},
。更改此条目并没有解决我的问题

有什么办法解决这个问题吗? 为什么我不能用XAMPP安装和测试最新的symfony

谢谢大家


Musa

您可以运行
composer update
重新安装与您的PHP版本兼容的供应商库版本。

如果有两个不同的Docker容器为同一项目运行,则可能会发生这种情况。他们轮流处理传入的请求。要解决此问题,请查找使用PHP7.3.11的旧僵尸Docker容器,只需
Docker stop
Docker rm
即可。在应用程序文件夹下,创建一个文本文件并键入
7.4
,然后重命名文件
。PHP版本
,没有名称,只有扩展名。而且它应该可以工作。

幸好这很容易修复。您可以告诉composer.json根据特定版本的PHP安装供应商库

例如,我们有一个项目目前正在从PHP5迁移到PHP7。我们无法安装仅PHP7版本的库,因此我们将其添加到composer.json中:

  "config": {
    "platform": {
      "php": "5.3.29"
    }
  },
现在应该可以安装了。删除您的
composer.lock
,然后运行
composer安装

以下是相关文档:


我通过运行

$symfony local:php:refresh

因为运行
$php--version
的输出给了我
PHP7.4.1(cli)
,而
$symfony php--version
给了我
PHP7.3.13-1+ubuntu16.04.1+deb.sury.org+1

刷新后,它们显示相同的版本


编辑:这需要使用您应该运行
composer dump autoload
我也有同样的方法,可以通过在我的zshrc中删除带有PHP7.2的导出路径来修复它。

安装了composer的php文件夹和apache服务器(如xampp、wampp、lampp版本)应该是类似的


对于exmaple,如果composer安装的php版本为7.4或更高版本,则apache服务器版本(如xampp、wampp、lampp)也应为7.4或更高版本

如果本地计算机上有两个不同版本的php,则很容易发生这种情况。要解决这个问题,请在控制台中找到与本地服务器运行的版本相匹配的php

rm composer.lock
/usr/bin/php /usr/local/bin/composer install

然后,Composer将使用正确版本的php重新创建锁文件。

这可能是因为您上载了在另一个版本的php上生成的文件
vendor/autoload.php
。在使用CI/CD构建PHP应用程序时,通常会出现这种情况


因此,最好的方法是从您的工件中排除此文件,而不是运行
composer dump autoload
(这可能是最后的解决方案)。

我在Azure WebApp中解决了这个问题,我将CGI设置为正确的版本

   <handlers>
        <remove name="PHP74_via_FastCGI"/>
        <add name="PHP74_via_FastCGI" path="*.php" verb="GET, PUT, POST, DELETE, HEAD, OPTIONS" modules="FastCgiModule"
             scriptProcessor="D:\Program Files\PHP\v7.4\php-cgi.exe" resourceType="Either" requireAccess="Script"/>
    </handlers>

安装了两个PHP版本后,您很可能忘记更改测试域的
etc/hosts
文件。或者您需要编辑DNS

//file etc/hosts
#old host -forgot to delete
127.0.0.71 demo.symfony.local 
#new host
127.0.0.74 demo.symfony.local
我不知道XAMPP安装程序是如何工作的(因为我通常手动安装和配置),但我可以假设,在安装新的XAMPP时,它很可能更改了PATH变量中的路径(为什么控制台使用7.4版),并将主机添加到
etc/hosts
文件中,但没有删除旧主机(因此该站点使用旧版本)

在我的例子中,PHP版本由IP分隔。 如果一个IP上有两个PHP版本,则必须停止其中一个版本,以便启动另一个版本,或通过端口分隔版本。否则,将产生利益冲突。
范例


结果:localhost将与侦听队列中第一个占用端口127.0.0.1:80的人联系。

参加聚会有点晚,但在我的情况下(Ubuntu 18.04上的Apache服务器),除了卸载以前版本的PHP和安装PHP v.7.4之外,我还必须从
/etc/apache2/mods available/
中删除
php7.2.conf
php7.2.load
,以便我的Symfony项目注册我确实在版本7.4上。显然,在我从系统中清除所有以前的PHP版本后,这些文件仍然存在安装了PHP v.7.4。

我的问题是用
sudo更新替代方案更新PHP版本——config PHP
没有更新PHP cgi

Symfony CLI仍在使用旧版本的php cgi:

symfony local:php:list
┌─────────┬───────────┬────────────┬─────────┬────────────────┬─────────┬─────────┐
│ Version │ Directory │  PHP CLI   │ PHP FPM │    PHP CGI     │ Server  │ System? │
├─────────┼───────────┼────────────┼─────────┼────────────────┼─────────┼─────────┤
│ 7.2.34  │ /usr      │ bin/php7.2 │         │                │ PHP CLI │         │
│ 7.3.23  │ /usr      │ bin/php7.3 │         │ bin/php-cgi7.3 │ PHP CGI │         │
│ 7.4.11  │ /usr      │ bin/php7.4 │         │ bin/php-cgi7.3 │ PHP CGI │ *       │
└─────────┴───────────┴────────────┴─────────┴────────────────┴─────────┴─────────┘
我通过更新php cgi解决了这个问题:

sudo apt-get install -y php-cgi

您安装了两个版本的php。xampp服务器使用一个版本,命令行使用另一个版本。最简单的方法是使用内置的而不是xampp apache服务器。如果您觉得必须使用apache服务器,请将其配置为使用PHP7.4。这可能意味着等待xampp发布新版本。或者您可以调整你
# etc/hosts
127.0.0.1 localhost
symfony local:php:list
┌─────────┬───────────┬────────────┬─────────┬────────────────┬─────────┬─────────┐
│ Version │ Directory │  PHP CLI   │ PHP FPM │    PHP CGI     │ Server  │ System? │
├─────────┼───────────┼────────────┼─────────┼────────────────┼─────────┼─────────┤
│ 7.2.34  │ /usr      │ bin/php7.2 │         │                │ PHP CLI │         │
│ 7.3.23  │ /usr      │ bin/php7.3 │         │ bin/php-cgi7.3 │ PHP CGI │         │
│ 7.4.11  │ /usr      │ bin/php7.4 │         │ bin/php-cgi7.3 │ PHP CGI │ *       │
└─────────┴───────────┴────────────┴─────────┴────────────────┴─────────┴─────────┘
sudo apt-get install -y php-cgi