WC升级php7.2

随着php7.2版本的发布,好多的小伙伴都升级到了7.2版本的,然而对WC的登录功能不兼容,该怎么解呢,两步走:
1.已经安装的小伙伴们,因为php7.2废弃mcrypt,会影响登录功能,可以改用openssl加密方式,需要开启相应的openssl扩展,1).修改/system/Zend/Db/Table/Abstract.php,将 $keyValuesCount = count($keyValues);移动到
          if (!is_array($keyValues)) {
                $keyValues = array($keyValues);
            }
的后面,结果如下:
          if (!is_array($keyValues)) {
                $keyValues = array($keyValues);
            }          $keyValuesCount = count($keyValues);
 
2).替换/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($data, $key = null)
    {
        $iv = openssl_random_pseudo_bytes($this->ivLen);
        $data = openssl_encrypt($data, $this->cipher, $this->key, OPENSSL_RAW_DATA, $iv);
        $data = base64_encode($iv . $data);
        return $data;
    }

    public function decode($data, $key = null)
    {
        $data = base64_decode($data);
        $iv = substr($data, 0, $this->ivLen);
        $data = substr($data, $this->ivLen);
        $decrypted = openssl_decrypt($data, $this->cipher, $this->key, OPENSSL_RAW_DATA, $iv);
        
        return $decrypted;
    }
2.想重新安装的小伙伴,需要修改下安装文件
1).在install/index.php第92行,修改
        if (function_exists('mcrypt_module_open'))
        {
            $system_require['mcrypt'] = TRUE;
        } ,改为
        if (function_exists('openssl_decrypt'))
        {
            $system_require['openssl'] = TRUE;
        }
2).在views/default/install/index.tpl.htm第50行将
        <li>
            <b><?php _e('Mcrypt 支持'); ?></b><?php if (!$this->system_require['mcrypt']) { ?><span class="red">× <?php _e('WeCenter 的加密需要 Mcrypt 支持'); ?></span><?php } else { ?><span class="green">√</span><?php } ?>
        </li>
修改为
        <li>
            <b><?php _e('openssl 支持'); ?></b><?php if (!$this->system_require['openssl']) { ?><span class="red">× <?php _e('WeCenter 的加密需要 openssl 支持'); ?></span><?php } else { ?><span class="green">√</span><?php } ?>
        </li>
如此就OK了

1 个评论

不需要这么麻烦,只需要吧数据库连接pro-mysql改成mysqli就可以用php7.2了

要回复文章请先登录注册