瞎折腾之:把网站(cutehive.com)搞崩溃啦

之前因为新版本的HIVE节点(hived)对系统的最低要求为Ubuntu 20.04 LTS,我一狠心把编译机、测试机等都升级成Ubuntu 22.04 LTS了,想着这样一劳永逸,以后好几年不用关心系统的问题啦。

image.png
(图源 :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

Reveal spoiler

1665740388651.png

嗯,貌似一切正常。

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,既然发现如下内容:

Reveal spoiler

Capture6.PNG

而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{}

当条件成立时,我会把喂价设置为-,回想了一下当初为啥这样设置,因为有些用户没有设置喂价,那么初始喂价可能是这样:

Reveal spoiler

image.png

如果不加判断,计算时可能就会出现除零错误,所以在计算喂价前,提前处理了一下。

在PHP7.x上,上述代码无什么问题,但是到了PHP 8.x 上,上述判断始终返回true,所以喂价都被设置成了-

确切地说,上述代码本身就是错误的、不严谨的,把字符串和数值去比较!改正其实很简单,字符串前边加个强制类型转换就好啦:

if( (float)$w["hbd_exchange_rate"]["quote"] < 0.000001 ){} else{}

修改后,发现见证人列表中见证人的喂价信息可以正常显示啦。

PHP + MSSQL的错误

除了上边提到的错误外,发现我代码中链接MSSQL的代码也全部失效了,不过上述问题已经把我累晕了,剩下的回头再慢慢改吧。

image.png
(图源 :pixabay)

哎,没事折腾啥啊,本来网站运行的好好的。不过转念一想,人生就是折腾嘛。

相关链接

Sort:  

Your content has been voted as a part of Encouragement program. Keep up the good work!

Use Ecency daily to boost your growth on platform!

Support Ecency
Vote for new Proposal
Delegate HP and earn more

过来膜拜大佬😁

在下才疏学浅,先蒙圈一会儿。😅

看完帖子之后。头顶一阵凉。

网站心里想:“我有什么错!”