lnmp一键包升级php失败解决过程

## 最近wordpress升级到5.2版本了,无意中看了一眼,wordpress5.2只支持php5.6及以上版本。

我现在用的wordpress是5.0版本的,之前升级5.1失败了,原因是因为wordpress的服务器被墙了,我的服务器部署在国内的阿里云,所以升级不了(当然有解决办法, 只是懒得弄)。
所以这次看到wordpress5.2版本出来了,本身没有什么升级的欲望,但是看到wordpress新版最低支持到5.6,估计着以后的版本最低要求都是php5.6了,所以想着先把php升级了备用。
结果一升级就出悲剧了。

我服务器上安装的是lnmp一键包,版本是lnmp1.3,脚本提供有升级php的选项,所以我想着应该很简单吧,直接一键升级就行了。
结果由于我之前的一个疏忽,导致这次遇到大坑了。因为我的letsencrypt证书用的acme脚本安装的,我没设置好,所以每次更新完证书后还得手动合并证书,于是我想着写个shell脚本自动去处理合并的工作,然而以前没写过shell脚本,虽然linux玩了这么多年了,真是惭愧,结果写出的脚本把证书给删了(当然我提前备份有证书,做好了保险工作),因为没有重启服务,所以即使证书删了,网站工作仍然一切正常,后来没有耐心研究了,就先放到一边了,但是忘记把备份的证书copy过来了。

于是第一个坑来了, 用lnmp脚本升级php的时候,重启服务就报错了,提示找不到证书之类的,然后根据报错,将证书还原了。
第一个问题解决了,没有再报证书问题了。
但是再次升级的时候每次编译一半就报openssl的错误

[ext/openssl/openssl.lo] Error 1

于是开始搜索问题,结果答案很少不说,没有一个管用的,不管怎么操作 ,每次都还是报这个错。
我把报错里出现频率最高的一句

openssl error: dereferencing pointer to incomplete type

拿去搜索,基本上都是说openssl的问题,但是大家提供的解决办法都不适用我这个问题,因为大部分都是自己手工编译php遇到的问题,他们的解决办法无外乎改个文件名,编译的时候加个什么
–prefix=/xxxx/openssl.so之类的。
因为我没有手动编译过php,我怕自己编译的php和lnmp一键包编译的有些许区别,比如文件路径啊,加的依赖啊这些,所以不敢尝试这种方法。
总之折腾了小半天,依然解决不了问题。
于是决定自己想办法解决这个问题,先来分析一波,看报错,应该就是openssl出问题了,于是第一步我先把nginx里关于openssl的配置全部禁用了,问题依旧,说明跟nginx配置无关。
后来我在搜索php配置文件的时候,无意中进到了

/usr/local

这个目录,在下面看到了openssl这个文件夹,于是心一横,直接

# cd /usr/local
# rm -rf openssl

将openssl整个目录删除了,重新再升级php,这次编译没有报错了,一次成功。

小结

从现象看来,我猜测可能是我之前的证书找不到导致升级php的过程中openssl目录没有被删除掉(lnmp一键包这么多人用,正常升级应该不会有问题,所以应该是因为我的证书报错,所以在卸载旧版本php,升级新版的过程中跳过了删除openssl)。
当然这只是我的猜测,不一定准确。
删除openssl以后,重新编译php的时候,脚本检测不到openssl,就自动先重新编译openssl,然后再编译php时就可以正常依赖了。

php升级成功后,赶紧尝试访问博客,发现居然报500了,试着写了个phpinfo()可以正常访问,所以服务应该没有问题,问题应该出在wordpress上了,打开wodpress的配置文件wp-config.php,找到wp-debug这一行,将false改为true打开wordpress调试模式,再次访问博客
发现报错了

Fatal error: Cannot redeclare scandir() in /home/wwwroot/xianjian10.com/wp-content/themes/twentyfourteen/functions.php on line 756

很明显是scandir这个函数被禁用了,然后想到了升级php以后,php的配置文件应该是重置了,所以要去先把这个函数放出来,直接找到php.ini

/usr/local/php/etc/php.ini

找到303行disable_functions这一行,将scandir函数从后面的禁用函数里删除就行了
再次重启lnmp,再访问网站,网站可以访问了,但是还是有报错,是主题报错了,我用的是系统默认主题,想着没理由报错呀,于是去后台看了一眼,发现主题可以升级了,于是升级了下主题,问题解决,终于一切正常了。

2 thoughts on “lnmp一键包升级php失败解决过程

    • 因为我之前用的主题对markdown支持不友好,所以只好换回默认主题了。有没有什么好主题推荐的?

Comments are closed.