当我创建一个新的Laravel项目时,浏览器显示错误500.我在日志中找到了这个:
PHP Parse错误:语法错误,意外'?'在233行的vendor / laravel / framework / src / Illuminate / Foundation / helpers.php中
233中的代码是:
return app('cache')->get($arguments[0], $arguments[1] ?? null);
但据我所知,PHP 7.0支持null合并运算符( ??
)
我的PHP版本:
PHP 7.1.8-2 ubuntu14.04.1 deb.sury.org 4(cli)(内置:2017年8月4日14:34:05)(NTS)版权所有(c)1997-2017 PHP Group Zend Engine v3.1.0,版权所有(c)1998-2017 Zend Technologies与Zend OPcache v7.1.8-2 ubuntu14.04.1 deb.sury.org 4,版权所有(c)1999-2017,作者:Zend Technologies
Laravel版本:5.5.0
谁知道发生了什么?
4 回答
如果我不得不猜测,我会说你只安装了PPA 7.1.8作为CLI(php7-cli) . 你从那里得到你的版本信息,但你的libapache2-mod-php包仍然是14.04 main,这是5.6 . 在浏览器中检查您的phpinfo以确认版本 . 您也可以考虑迁移到Ubuntu 16.04以获得主要的PHP 7.0 .
我在ubuntu上遇到了与Laravel 5.5大致相同的问题,最后我找到了一个解决方案here来在apache使用的php版本之间切换:
sudo a2dismod php5
sudo a2enmod php7.1
sudo service apache2 restart
它的工作原理
如果您在使用命令行时遇到此错误,因为您必须使用php 7执行您尝试执行的任何操作 . 发生的事情是代码试图使用仅在php7中可用的运算符并导致语法错误 .
如果您的计算机上已经安装了php 7,请尝试将命令行指向要使用的更高版本的php .
以下是根据我的设置进行参考的确切位置:
实际上导致中断的运算符是“null coalesce operator”,你可以在这里阅读更多关于它的信息:
php7 New Operators
如果你新升级了你的php版本,你可能会忘记重新启动你的webserver服务 .