前天手欠點了composer的update,結果呼啦呼啦升級了一堆東西,繼續編碼沒遇到問題,就沒當回事。
次日,部署更新到服務器出了問題,報server 500錯誤,也不提示具體原因,懵。。。
拋磚引玉,記錄一下解決方案。
1.先讓服務器顯示錯誤信息,編輯服務器php.ini,找到display_errors,修改爲 display_errors = On,保存,重啓服務
2.運行服務如下顯示
Parse error: syntax error, unexpected 'function' (T_FUNCTION),
expecting identifier (T_STRING) or \\ (T_NS_SEPARATOR)
in /data/qisi_class/vendor/myclabs/deep-copy/src/DeepCopy/deep_copy.php
on line 5
通常這種語法錯誤,是低版本語言不兼容高版本寫法出現的
3.查看服務器php版本5.4.16,開發環境時7.2.10
4.問題就在這裏,composer升級時按照本機高版本升級的,但服務器運行環境太低不兼容導致出錯
5.服務器是不能隨便升級的,辦法只能是把composer匹配版本降級,修改composer.json,增加下面內容
"config": {
***
"platform": {
"php": "5.4.16"
}
},
這樣composer就可以按照指定的版本匹配依賴包。
6.再次選擇composer的update,開始依賴降級操作
- Downgrading sebastian/recursion-context (3.0.0 => 1.0.5): Downloading
- Downgrading sebastian/exporter (3.1.0 => 1.2.2): Downloading (connecting...)
- Installing phpunit/phpunit-mock-objects (2.3.8): Downloading (connecting...)
7.因爲本地環境php版本高,向下兼容的,自然不會出錯。坐等降級完成,重新部署服務器問題就解決了。
爲了身心健康,不要隨便點composer update。。。