php 7.2下wecenter的兼容性修改

php7.2已经放弃了mcrypt扩展,导致wecenter在7.2下无法正常使用登录功能,因此我们得换掉mcrypt加密方式,采用openssl加密。
 
打开/system/core/crypt.php,删掉原有的__construct(){},encode(){},decode(){}里的内容, 分别改成如下内容

private $cipher = "AES-256-CBC";
private $key = G_COOKIE_HASH_KEY;
private $ivLen;

public function __construct()
{
$this->key = hash('sha256', $this->key, true);
$this->ivLen = openssl_cipher_iv_length($this->cipher);
}
public function encode($input)
{
$iv = openssl_random_pseudo_bytes($this->ivLen);
$data = openssl_encrypt($input, $this->cipher, $this->key, OPENSSL_RAW_DATA, $iv);
$data = base64_encode($iv . $data);
return $data;
}

public function decode($input)
{
$input = base64_decode($input);
$iv = substr($input, 0, $this->ivLen);
$input = substr($input, $this->ivLen);
$decrypted = openssl_decrypt($input, $this->cipher, $this->key, OPENSSL_RAW_DATA, $iv);
return $decrypted;
}

2、php 7.2的count()函数只支持数组或对象的计算,传入字符串或数字会报warning错误,如果你用的是7.2,打开wecenter第一步就会报500错误,因为zend框架里有一个地方使用count计算了一个不是数组的变量。因此我们还要把它改掉:
 
打开/system/Zend/Db/Table/Abstract.php,找到1307行,
$keyValuesCount = count($keyValues);
把它插入到1313行后面,改完之后是这样的
if (!is_array($keyValues)) {
$keyValues = array($keyValues);
}
$keyValuesCount = count($keyValues);

 
已邀请:

fanta - 亡羊补牢,为时不晚

赞同来自: minhthanhqnv

感谢分享,给👍

Satyr

赞同来自: minhthanhqnv

大神牛了

洪晓露

赞同来自:

说真的,为什么我没有这个问题呢

一杯咖啡就瞌睡

赞同来自:

那么着急升到7.2干啥,哈哈

zgq

赞同来自:

刚好碰到这个问题,感谢分享

jiekii - Coder

赞同来自:

赞!~💘

要回复问题请先登录注册