How to fix PHP Parse error: syntax error, unexpected '?', on laravel 5.8

How to fix PHP Parse error: syntax error, unexpected '?', on laravel 5.8

我在共享主机上托管了项目,其中我的 'app' 文件夹在 public_html 之外 php 版本是 7.3.5,我遇到的问题是.. 我是已经创建了一个 cron 作业来自动备份项目数据库,但我的日志中不断出现此错误;

[08-Jun-2019 21:04:01 UTC] PHP Parse error:  syntax error, unexpected '?', expecting variable (T_VARIABLE) in /home/username/app-folder/vendor/zendframework/zend-diactoros/src/functions/marshal_uri_from_sapi.php on line 83 

我正在使用 spatie/laravel-backup。

我的 cron 设置为

*   *   *   *   *   php /home/username/app-folder/artisan backup:run 

你检查过第 83 行的那个文件了吗?

我做到了,在 Github,我看到该行上唯一的问号是方法签名中的 ?int

我用谷歌搜索了 15 秒,发现它是那个包的 new feature of PHP 7.1 . So I checked composer.json,并且发现它需要 "php": "^7.1"

你确定你是 运行 PHP 7.3.5 在那台机器上吗?请在您的 public/index.php 中输入 phpinfo(); exit(); 并仔细检查,因为该错误表明您 运行 的 php 版本低于 7.1

该错误表示 PHP 为 PHP 7.X 及以上 使用旧版本编写的脚本存在问题PHP.

版本

使用的功能称为 空合并运算符

您可以在此处从 PHP 的官方文档中阅读更多相关信息 - https://www.php.net/manual/en/migration70.new-features.php#migration70.new-features.null-coalesce-op

您正在使用的 cron 直接调用 php 二进制文件,这是 WHM/cPanel

使用的默认版本集

如果您知道 PHP 二进制文件的直接路径,您可以在设置 cron 时直接调用它,例如:

*   *   *   *   *   php /home/username/app-folder/artisan backup:run 

对于没有 CloudLinux 的服务器:

*   *   *   *   *   /opt/cpanel/ea-php70/root/usr/bin/php /home/username/app-folder/artisan backup:run 

对于装有 CloudLinux 的服务器:

*   *   *   *   *   /opt/alt/php70/usr/local/bin/php /home/username/app-folder/artisan backup:run 

*注意:您可以将上面两个示例路径中的 hte php70 字符串更改为已安装的任何其他 PHP 7.X 版本,对于 PHP 7.1 - php71 等..