【问题标题】:syntax error, unexpected ')' after Laravel update语法错误,Laravel 更新后出现意外的 ')'
【发布时间】:2021-05-09 16:38:23
【问题描述】:

我已将我的 laravel 项目从 laravel 5.7 更新为 "laravel/framework": "^8.12",但更新后当我运行 composer dump-autoload 时它返回此错误

Generating optimized autoload files> Illuminate\Foundation\ComposerScripts::postAutoloadDump
> @php artisan package:discover --ansi

In TestDatabases.php line 148:

  syntax error, unexpected ')'

这是我的composer.json

{
    "name": "laravel/laravel",
    "type": "project",
    "description": "The Laravel Framework.",
    "keywords": [
        "framework",
        "laravel"
    ],
    "license": "MIT",
    "require": {
        "php": "^7.3|^8.0",
        "fideloper/proxy": "^4.4",
        "fruitcake/laravel-cors": "^2.0",
        "guzzlehttp/guzzle": "^7.0.1",
        "intervention/image": "^2.5",
        "laravel/framework": "^8.12",
        "laravel/sanctum": "^2.8",
        "laravel/tinker": "^2.5",
        "laravel/ui": "^2.0",
        "barryvdh/laravel-dompdf": "^0.8.3",
        "nao-pon/flysystem-google-drive": "~1.1",
        "spatie/laravel-backup": "^6.14"
    },
    "require-dev": {
        "facade/ignition": "^2.5",
        "fakerphp/faker": "^1.9.1",
        "laravel/sail": "^1.0.1",
        "mockery/mockery": "^1.4.2",
        "nunomaduro/collision": "^5.0",
        "phpunit/phpunit": "^9.3.3"
    },
    "config": {
        "optimize-autoloader": true,
        "preferred-install": "dist",
        "sort-packages": true
    },
    "extra": {
        "laravel": {
            "dont-discover": []
        }
    },
    "autoload": {
        "psr-4": {
            "App\\": "app/",
            "Database\\Factories\\": "database/factories/",
            "Database\\Seeders\\": "database/seeders/"
        },
        "files": [
            "app/Helpers/helpers.php",
            "app/Helpers/agent_helper.php",
            "app/Helpers/user-helpers.php"
        ]
    },
    "autoload-dev": {
        "psr-4": {
            "Tests\\": "tests/"
        }
    },
    "minimum-stability": "dev",
    "prefer-stable": true,
    "scripts": {
        "post-autoload-dump": [
            "Illuminate\\Foundation\\ComposerScripts::postAutoloadDump",
            "@php artisan package:discover --ansi"
        ],
        "post-root-package-install": [
            "@php -r \"file_exists('.env') || copy('.env.example', '.env');\""
        ],
        "post-create-project-cmd": [
            "@php artisan key:generate --ansi"
        ]
    }
}


如何解决这个错误?

【问题讨论】:

  • 请分享更多详细信息,例如确切错误消息以及您尝试解决它的方法。我认为删除语法错误可能是一个很好的起点
  • TestDatabases.php 文件的第 148 行是什么?
  • @MVP 在这种情况下,您如何将 TestDatabase.php 包含到您的项目中?我猜你在那个包含附近有一些语法问题。例如,缺少分号、括号或类似内容,当出现意外的 ')' 时会产生语法错误
  • @MVP 你的问题。 Laravel 8 需要 php 7.3 或更高版本。 --ignore-platform-reqs 是个坏主意:要求的存在是有原因的。将cli上的php版本设置为7.4就可以了
  • @MVP 因为您需要使用 --ignore-platform-reqs 运行它才能使其工作,所以我认为您是从全局 7.2 版本运行它。确保您可以使用完整的 php 7.4 路径运行命令:path/to/php composer install

标签: php laravel composer-php


【解决方案1】:

您需要将您的 PHP 安装升级到至少 7.3 版才能解决此问题。

自 2020 年 11 月 30 日起,PHP 7.2 为 EOL(生命周期结束)!

如 cmets 中所述:

Laravel 8 需要 php 7.3 或更高版本

Larvel 8 在composer.json 中具有以下 PHP 版本约束:

"require": {
  "php": "^7.3|^8.0"
}

使用--ignore-platform-reqs 标志运行composer,除非您有(非常罕见的)正当理由这样做。

【讨论】:

  • 我的 php 版本已经是 7.4,正如我在 cmets 中所说的,我已经与 php -v 进行了交叉检查
【解决方案2】:

在将 Ubuntu 更新到版本 20 后,我遇到了同样的问题。我的机器上同时安装了 php 7.4 和 php 7.2 版本。我将我的开发环境设置为 php 7.2 以运行较旧的 Laravel 5.6 网络应用程序,但同时也在开发 Laravel 8 网络应用程序。
当我为 Laravel 8 尝试 php artisan serve 时,我得到了同样的错误 In TestDatabases.php line 159: syntax error, unexpected ')'

我通过在终端中运行以下命令解决了错误(目录无关紧要):

user1@user1-Ubuntu:/var/www/html/laravel8-website$sudo a2dismod php7.2
user1@user1-Ubuntu:/var/www/html/laravel8-website$sudo a2enmod php7.4
user1@user1-Ubuntu:/var/www/html/laravel8-website$sudo update-alternatives --set php /usr/bin/php7.4
user1@user1-Ubuntu:/var/www/html/laravel8-website$sudo systemctl restart apache2

起初我没有运行命令update-alternatives --set php /usr/bin/php7.4,只禁用了php7.2并启用了7.4,然后重新启动了服务器。但尽管phpinfo() 方法告诉我我有php7.4.20 正在运行,但仍然出现上述错误。
我在终端中使用php -v 命令检查了php 版本,并得到了PHP 7.2.34-22+ubuntu20.04.1+deb.sury.org+1 (cli) (built: Jun 4 2021 21:22:16) ( NTS ) 输出。

这个冗长的答案中的金块也在终端中运行sudo update-alternatives --set php /usr/bin/php7.4 命令并重新启动服务器。反之亦然。

【讨论】:

    【解决方案3】:

    我对最新的 php 和最新的 laravel 有同样的看法。我从 github laravel\laravel 获得了我的文件。我修复了它,但不确定这是我的错误(可能是)还是实际上是代码中的错误?

    在 /vendor/laravel/framework/src/Illuminate/Testing/Concerns/TestDatabases.php 在第 158 行和第 163 行,行尾有一个逗号,后面是一个右括号 )。所以我把两行末尾的逗号都去掉了,现在完全没有问题了。

    【讨论】:

      【解决方案4】:

      我也遇到了同样的问题。升级到7.3后,它解决了。将PHP 7.2升级到7.3/更高,即可解决。

      升级到 7.3 的步骤:
      检查您当前的 PHP 版本。

      # php -v
      PHP 7.2.36
      

      为了安装 PHP 7.3,我们需要先添加存储库:

      # add-apt-repository ppa:ondrej/php
      

      然后运行更新:

      # apt-get update
      

      完成更新后,我们需要安装PHP 7.3。

      # apt install php7.3 
      

      然后根据你当前的安装安装所需的PHP包:

      # apt install php7.3-common php7.3-cli php7.3-bz2 php7.3-curl php7.3-gd php7.3-intl php7.3-json php7.3-readline php7.3-xml php7.3-zip php7.3-fpm php7.3-bcmath php7.3-mbstring
      

      安装成功后,我们可以先禁用旧的7.2再启用7.3:

      # a2dismod php7.2
      
      # a2enmod php7.3
      

      然后重启Apache:

      # service apache2 restart
      

      新的 PHP 版本现在应该处于活动状态。您可以从命令行验证它:

      # php -v
      PHP 7.3.28
      

      【讨论】:

        猜你喜欢
        • 2019-10-30
        • 2019-01-16
        • 2020-11-23
        • 2012-12-02
        • 2018-01-13
        • 1970-01-01
        • 2016-04-18
        • 1970-01-01
        • 2021-06-24
        相关资源
        最近更新 更多