安装 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 协议》,转载必须注明作者和本文链接
关于 LearnKu
我也是报这个错误,弄了好久
我的PHP版本是7.3,但是也会有这个错误,求解~
composer.json:
/etc/nginx/sites-available下的nginx配置:
cli执行
为什么还是会报错
全局搜索 JSON_INVALID_UTF8_SUBSTITUTE 看到这样的一段文字:
2.1.0 (2020-05-22)
JSON_INVALID_UTF8_SUBSTITUTEto default json flags, so that invalid UTF8 characters now get converted to � instead of being converted from ISO-8859-15 to UTF8 as it was before, which was hardly a comprehensive solution$ignoreEmptyContextAndExtraoption to JsonFormatter to skip empty context/extra entirely from the output$parseMode,$disableWebPagePreviewand$disableNotificationoptions to TelegramBotHandler难道是要 PHP8才可以么? :sob:
楼主提到的Monolog版本支持,检查了下我的composer.json并未有Monolog的相关引入 :sob:
求教各位老师指点@softer @大毛 @惊风破浪 @Artist0618 @Han