前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >修复网站从万年PHP7.2更新到PHP8.0后的出现的bug

修复网站从万年PHP7.2更新到PHP8.0后的出现的bug

作者头像
喜欢ctrl的cxk
发布2021-12-06 14:21:39
1.6K0
发布2021-12-06 14:21:39
举报
文章被收录于专栏:Don的成长史Don的成长史

写在前面

2021年5月20日23:30左右,因为看到了WordPress仪表盘疯狂提示“为了网站的安全和效能,推荐使用PHP版本7.4以上”,然后我终于做出了一个令我后悔至今的决定——把万年没更新的PHP7.2直接更新到PHP8.0。在更新完成的那一刻,我脸上流露出了一丝笑容,但在浏览器中刷新网址之后,我这种喜悦的心情被一万只草泥马践踏而过了。

在这里插入图片描述
在这里插入图片描述

咋办?只能被迫营业了呗。vim /var/www/html/wp-config.php输入以下代码:

代码语言:javascript
复制
define('WP_DEBUG', true);
define('WP_DEBUG_LOG', true);
define('WP_DEBUG_DISPLAY', true);
@ini_set('display_errors', 'On');
在这里插入图片描述
在这里插入图片描述

“他还在写代码,真是无趣。” 我一直改到了凌晨4点多,网站才恢复访问,但是还存在着不少bug等着修改,5月21号论文答辩,结果出了这茬事儿。

已解决的bug

PhpMyAdmin的兼容问题

首先卸载干净phpMyAdmin,因为老版本和新apt-get install的phpmyadmin都不是最新版本的,和PHP8不兼容,去官网下载了一个phpMyAdmin5.1,直接扔网站根目录然后unzip就完事了。

在这里插入图片描述
在这里插入图片描述
代码语言:javascript
复制
sudo su root
apt-get remove phpmyadmin
rm -rf /etc/share/phpmyadmin  #我之前的安装路径,然后软连接到网站目录的
unzip phpMyAdmin-5.1.0-all-languages.zip

至此,phpMyAdmin恢复访问。

可道云网盘 PHP8.0兼容问题

我的DonCloud访问不了啦,php报错的原因是因为match函数,因为PHP8自带了一个match函数,所以需要给match函数换一个函数名,我改成了matching。

在这里插入图片描述
在这里插入图片描述
代码语言:javascript
复制
cd /var/www/html/cloud
vi /app/function/common.function.php
#将762行match函数的名称改成matching
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

同理还需要把调用match函数的部分进行修改,/match查找修改就完事啦:

代码语言:javascript
复制
vi /app/function/helper.function.php
vi /app/controller/app.class.php

接着,还需要修改/app/function/common.function.php中msubstr函数参数,因为php8规定了不带默认值的参数不能放在带默认值的参数后面,需要为$length添加默认参数0。

代码语言:javascript
复制
function msubstr($str, $start = 0, $length = 0, $charset = "utf-8", $suffix = true){
	if (function_exists("mb_substr")) {
		$i_str_len = mb_strlen($str);
		$s_sub_str = mb_substr($str, $start, $length, $charset);
		if ($length >= $i_str_len) {
			return $s_sub_str;
		} 
		return $s_sub_str . '...';
	} elseif (function_exists('iconv_substr')) {
		return iconv_substr($str, $start, $length, $charset);
	} 
	$re['utf-8'] = "/[\x01-\x7f]|[\xc2-\xdf][\x80-\xbf]|[\xe0-\xef][\x80-\xbf]{2}|[\xf0-\xff][\x80-\xbf]{3}/";
	$re['gb2312'] = "/[\x01-\x7f]|[\xb0-\xf7][\xa0-\xfe]/";
	$re['gbk'] = "/[\x01-\x7f]|[\x81-\xfe][\x40-\xfe]/";
	$re['big5'] = "/[\x01-\x7f]|[\x81-\xfe]([\x40-\x7e]|\xa1-\xfe])/";
	preg_match_all($re[$charset], $str, $match);
	$slice = join("", array_slice($match[0], $start, $length));
	if ($suffix) return $slice . "…";
	return $slice;
}

刷新网页后,发现还是报错。

在这里插入图片描述
在这里插入图片描述

因为PHP8不支持使用{}访问数组和字符串的下标所对应元素,改成[]就好了。

在这里插入图片描述
在这里插入图片描述

至此,可道云PHP8.0兼容问题解决。然而登录的时候会发现验证码加载不了!

在这里插入图片描述
在这里插入图片描述

打开文件一看还是因为PHP8不支持使用{}访问数组和字符串的下标所对应元素,改成[]就好了。

在这里插入图片描述
在这里插入图片描述
代码语言:javascript
复制
vim /var/www/html/cloud/app/sdks/MyCaptcha.class.php
# 把33行、38行、54行、152行的所有{}索引改成[]索引就行啦!

然后登录验证码就能加载出来了。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2021-05-25 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 写在前面
  • 已解决的bug
    • PhpMyAdmin的兼容问题
      • 可道云网盘 PHP8.0兼容问题
      相关产品与服务
      验证码
      腾讯云新一代行为验证码(Captcha),基于十道安全栅栏, 为网页、App、小程序开发者打造立体、全面的人机验证。最大程度保护注册登录、活动秒杀、点赞发帖、数据保护等各大场景下业务安全的同时,提供更精细化的用户体验。
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档