安装 Laravel6.x 报常量未定义
今天在安装Laravel
时发现有一个错误,错误输出的内容如下:
Use of undefined constant JSON_INVALID_UTF8_SUBSTITUTE - assumed ‘JSON_INVAL
这个错误知道是常量未定义,下意识的认为应该是直接安装Laravel
框架出了问题,所以就Google一下,发现没有这个问题的相关资料。
然后自己回过头仔细看了下错误信息,是不是我的PHP
版本太低了,然后看了下composer.json
文件中对PHP
版本的要求,最少要PHP7.2
版本,我看了下我的运行环境的PHP
版本是7.1
。
知道是PHP
版本太低导致框架无法运行,修改PHP-FPM
就可以了,找到Nginx
的配置文件进行修改
# /etc/nginx/sites-available/bbs.test
....
location ~ \.php$ {
fastcgi_split_path_info ^(.+\.php)(/.+)$;
fastcgi_pass unix:/var/run/php/php7.1-fpm.sock;
fastcgi_index index.php;
....
把上面文本中的7.1
改为7.2
即可,保存文件即可。
最后使用service nginx reload
重载Nginx
,访问项目问题就被修复好了。
问题分析
上面修复了问题,这里研究一下为什么上次采用PHP7.1
的环境没有问题,这次就不行了呢?
采用PhpStorm
全局搜索关键字JSON_INVALID_UTF8_SUBSTITUTE
,找到了关于关键字的信息。
首先这个JSON_INVALID_UTF8_SUBSTITUTE
常量是在PHP7.2
中定义的,而PHP7.1
没有定义这个常量。
没有定义也不会报错了,继续查找发现日志扩展Monolog
用到了上面这个常量,我把代码贴出来。
namespace Monolog;
final class Utils
{
const DEFAULT_JSON_FLAGS = JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE | JSON_PRESERVE_ZERO_FRACTION | JSON_INVALID_UTF8_SUBSTITUTE;
.....
}
我们再看下Monolog
扩展包的composer.json
文件中PHP
版本是多少。
....
"require": {
"php": ">=7.2",
}
...
进一步证明是PHP
版本的原因导致了上述的问题。
一些思考
通过问题得到解决后,我们在安装软件的时候一定要符合软件的环境需求,有些时候没有出错并不说是没有错误,只不过上面这个错误在启动框架的时候就展示出来了。
我们在安装一个扩展时要看清楚这个扩展需要的软件环境,如果我们的PHP版本、扩展包的版本是否符合要求,不符合要求就必须要升级。对于生成环境的升级就要注意业务是否能够正常使用了。
这就是我遇到这个问题的一些想法,希望以后遇到的问题都可以记录在这里,而不是作为一个只会使用google的机器
本作品采用《CC 协议》,转载必须注明作者和本文链接
推荐文章: