2018年10月

  • Yii 2 将 Gravatar 头像图片做本地化缓存

    2018-10-15 18:11:52 1551 0 技术文章

    Gravatar 是全球公认头像,但头像图片有时候访问奇慢无比,将整个页面的加载速度降了下来,如果能将头像图片缓存到本地,并设置过期时间,那性能会飞速提高,以下代码是 Yii2 的自定义 Helper 中的代码片断,用于实现 Gravatar 本地化访问。

    public function gravatar($email, $s = 80, $atts = [], $d = 'mp', $r = 'g')
    {
        $key = md5(strtolower(trim($email)));
        $img_file = Yii::getAlias("@webroot/uploads/avatar/$key.jpg");
        $img_url = Yii::getAlias("@web/uploads/avatar/$key.jpg");
        $noavatar_file = Yii::getAlias('@webroot/images/noavatar.jpg');
        $noavatar_url = Yii::getAlias('@web/images/noavatar.jpg');
    
        // 缓存时间 30 天,超过 30 天会重新到 gravatar.com 去取
        if (!file_exists($img_file) || filemtime($img_file) < time() - 3600 * 24 * 30) {
            file_put_contents($img_file, file_get_contents("https://www.gravatar.com/avatar/$key?s=$s&d=$d&r=$r"));
        }
    
        // 没有设置过头像的用户,显示自定义头像
        if (md5_file($img_file) == md5_file($noavatar_file)) {
            $img_url = $noavatar_url;
        }
    
        return Html::img($img_url, $atts);
    }