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);
 
    已邀请:

    Satyr

    赞同来自: minhthanhqnv aniuge

    大神牛了

    fanta - 有问题请加qq270294661 建站请保留WeCenter版权信息和链接

    赞同来自: minhthanhqnv

    感谢分享,给?
    说真的,为什么我没有这个问题呢
    那么着急升到7.2干啥,哈哈

    zgq

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

    jiekii - Coder

    赞!~?

    该问题目前已经被锁定, 无法添加新回复