CodeIgniter 多说HTTPS头像解决方案

多说其实是个还不错的社会化评论插件

支持多个网站的账号快捷登陆,虽然某些行为有些流氓,但仍旧算是十分流行的一个系统

可是多说在HTTPS下的兼容性十分糟糕,头像仍旧调用HTTP

导致浏览器报出不安全的警告,可以通过下面的办法解决这个问题

首先介绍一下实现原理,我们制作一个php,实时从多说服务器获取最新的js文件,然后实时将js中头像的URL部分修改为自己服务器上的地址,由于新浪的头像服务器并不支持HTTPS,我们必须在自己的服务器上建立一个图片代理php,来解决问题,最后再修改多说插件,让它调用我们的php即可

下来在CodeIgniter框架的controller文件夹创建一个duoshuo.php文件 其中的代码如下

class Duoshuo extends CI_Controller {

    public function __construct()
    {
        parent::__construct();
    }

    public function index()
    {
        $src = $_GET['src'];
        $timeout = stream_context_create(array(
            'http' => array('timeout' => 1.0)
        ));
        $data = file_get_contents($src, 0, $timeout);
        header('Content-Type:image/png');
        if (substr($data, 0, 3) === "\xFF\xD8\xFF" || substr($data, 1, 3) === "\x50\x4E\x47") {
            echo $data;
        } else {
            echo file_get_contents(FCPATH."/static/images/none.jpg", 0, $timeout);
        }
    }
}

以上代理结束。接下来来搞多说的设置

然后把多说的js文件搞到本地

https://static.duoshuo.com/embed.js

在线格式化一下压缩过的js代码方便阅读,找到一下代码进行替换

avatarUrl: function(e) {
    return e.avatar_url || rt.data.default_avatar_url
}

替换后的代码

avatarUrl: function(e) {
    return 'https://www.aladdinnet.com/duoshuo?s='+e.avatar_url || 'https://www.aladdinnet.com?s='+nt.data.default_avatar_url
}

注意,记得将上面替换代码部分的域名更换为你自己的域名即可,然后保存修改后的文件上传到你服务器相对应的地址。

最后修改多说评论框调用js代码部分

代码如下

// 记得做相对应的修改哦
var duoshuoQuery = {short_name:"你的多说ID"};
(function() {
    var ds = document.createElement('script');
    ds.type = 'text/javascript';ds.async = true;
    ds.src = (document.location.protocol == 'https:' ? 'https:' : 'http:') + 'static/js/embed.js';
    ds.charset = 'UTF-8';
    (document.getElementsByTagName('head')[0]
    || document.getElementsByTagName('body')[0]).appendChild(ds);
})();

做完以上处理,你的多说评论就完美支持HTTPS了。

DickerYang