今天在安裝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 協議》,轉載必須註明作者和本文連結