前天手欠点了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。。。