瞎折腾之:把网站(cutehive.com)搞崩溃啦
之前因为新版本的HIVE节点(hived)对系统的最低要求为Ubuntu 20.04 LTS,我一狠心把编译机、测试机等都升级成Ubuntu 22.04 LTS了,想着这样一劳永逸,以后好几年不用关心系统的问题啦。
(图源 :pixabay)
不过弄完hived的机器后,我发现我还有N台机器在运行Ubuntu 18.04 LTS以及Ubuntu 20.04 LTS,比如网站https://cutehive.com所在VPS就运行着Ubuntu 20.04 LTS呢!
于是决定先给这个VPS升级到Ubuntu 22.04 LTS,因为这两天升级了很多VPS,所以升级轻车熟路,没多少波折就完成了。结果升级后,发现网站https://cutehive.com彻底崩溃啦。
PHP 找不到问题
将系统从Ubuntu 20.04 LTS升级为Ubuntu 22.04 LTS后,发现系统上找不到PHP啦。(咦,我让你升级,没让你卸载啊,当然这有可能是我升级过程中出错导致的)
于是直接重新安装了PHP的最新版本
sudo apt install php8.1
安装后查看一下PHP 版本php --version:
嗯,貌似一切正常。
PHP运行的问题
升级后当然要测试一下网站了,结果一访问https://cutehive.com,擦,竟然直接显示源码了。
其实Apache2+PHP安装后,访问PHP文件显示源码,这个以前就遇到过,基本上都是short_open_tag所引发的问题。
简单来讲,就是如果没有设置short_open_tag开启,那么类似如下这样的代码,就不会被认为是PHP代码:
<? echo("Hello World!"); ?>
详细的解释可以参考这里:
Tells PHP whether the short form (
<? ?>) of PHP's open tag should be allowed. If you want to use PHP in combination with XML, you can disable this option in order to use<?xml ?>inline. Otherwise, you can print it with PHP, for example:<?php echo '<?xml version="1.0"?>'; ?>. Also, if disabled, you must use the long form of the PHP open tag (<?php ?>).
可是当我将short_open_tag设置为On了,去访问PHP页面,还是没法解析,这就奇了怪哉了。
为此我特意试了一下命令行方式执行PHP,发现无论是长格式还是开启short_open_tag的短格式都可以正常运行。那么看来问题出在Apache2与PHP的配合上了,比如说响应的模块没启用?
去Apache2配置目录中查看,在这个目录下/etc/apache2/mods-enabled,既然发现如下内容:
而Ubuntu 22.04 TLS下我安装的是PHP8.1,这就有问题啦。
于是清除掉PHP7.4X相关模块:
sudo a2dismod php7.4
提示如下信息:
removing dangling symlink /etc/apache2/mods-enabled/php7.4.load
removing dangling symlink /etc/apache2/mods-enabled/php7.4.conf
启用PHP8.1相关模块:
sudo a2enmod php8.1
sudo systemctl restart apache2
经过这样操作后,PHP总算可以正常解析啦。
curl_init 错误
PHP网页可以显示后,发现我的见证人列表只显示了一个表头,就不显示啦——很明显,一定是哪里出错啦。
于是去查看一下网站错误日志,发现有如下提示信息:
PHP Fatal error: Uncaught Error: Call to undefined function curl_init()
哎,咋升级出来这么多毛病呢。不过这种明显的错误最好解决啦,什么出错就装啥!
安装PHP curl模块即可:
sudo apt install php8.1-curl
然后再次重启一下Apache2:
sudo systemctl restart apache2
见证人列表总算可以显示出来啦。
喂价显示错误
见证人列表可以显示后,发现其它功能都算正常,但是见证人喂价都显示成了-,这又是怎么回事?
去看错误日志,发现错误日志里没有任何相关内容,也就是说,没出错,那为啥显示不正常呢?
然后去查看对应的代码,发现代码中有这样一个判断:
if( (float)$w["hbd_exchange_rate"]["quote"] < 0.000001 ) {} else{}
当条件成立时,我会把喂价设置为-,回想了一下当初为啥这样设置,因为有些用户没有设置喂价,那么初始喂价可能是这样:
如果不加判断,计算时可能就会出现除零错误,所以在计算喂价前,提前处理了一下。
在PHP7.x上,上述代码无什么问题,但是到了PHP 8.x 上,上述判断始终返回true,所以喂价都被设置成了-。
确切地说,上述代码本身就是错误的、不严谨的,把字符串和数值去比较!改正其实很简单,字符串前边加个强制类型转换就好啦:
if( (float)$w["hbd_exchange_rate"]["quote"] < 0.000001 ){} else{}
修改后,发现见证人列表中见证人的喂价信息可以正常显示啦。
PHP + MSSQL的错误
除了上边提到的错误外,发现我代码中链接MSSQL的代码也全部失效了,不过上述问题已经把我累晕了,剩下的回头再慢慢改吧。
(图源 :pixabay)
哎,没事折腾啥啊,本来网站运行的好好的。不过转念一想,人生就是折腾嘛。
相关链接
Leave 瞎折腾之:把网站(cutehive.com)搞崩溃啦 to:
Read more #cn posts
Best Posts From oflyhigh
We have not curated any of oflyhigh's posts yet. But you can encourage our curation team to review posts by visiting them regularly and by referring other readers. Because we give priority to frequently read content.