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

2018-10-15 18:11:52 1714 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);
}
      没有找到数据。
    您的邮箱不会被公开