开发者社区> 问答> 正文

Gravatar 镜像、解决方法大全

前言

Gravatar 目前新手要去玩耍已经比较麻烦了,而老鸟的头像想在博客中正常的显示也成了一大问题,说道镜像大家首先想到的肯定是多说的,可问题是多说的镜像不支持 HTTPS 啊,全站 HTTPS 的网站必须是挂的。所以我们搬出更多的镜像。

镜像大全

以下是部分 Gravatar 镜像地址:
Https源:https://secure.gravatar.com (兼容性最高,国内可以访问)
CN源:http://cn.gravatar.com (兼容性最高,国内可以访问,其实也支持 HTTPS)
@源:http://gravatar.com (兼容性最高,国内部分可以访问,其实也支持 HTTPS)
多说源:http://gravatar.duoshuo.com (延时较低,不支持 HTTPS,兼容性一般)
七牛镜像源:http://avacdn.qiniudn.com (延时较低,不支持 HTTPS,兼容性较低)
七牛镜像 HTTPS 源:https://dn-avacdn.qbox.me (延时较低,支持 HTTPS,兼容性较低)


解决大全
WordPress
1. 使用未被墙的地址(非七牛源)
注:'你要使用的源' 替换成 '上面的源,注意 http://或者 https://
function unblock_gravatar( $avatar ) {
$avatar = str_replace( array( 'http://www.gravatar.com', 'http://0.gravatar.com', 'http://1.gravatar.com', 'http://2.gravatar.com' ), '<strong>你要使用的源</strong>', $avatar );
return $avatar;
}
add_filter( 'get_avatar', 'unblock_gravatar' );


2.使用未被墙的地址(七牛源)

请参考:http://devework.com/qiniu-cache-acceleration-gravatar-problem.html
或者:http://immmmm.com/use-qiniu-cache-gravatar.html



3.通过代码缓存 Gravatar 头像到本地


注意:下面的代码加到functions.php中,此法支持国内主机。在WP根目录下新建avatar文件夹并给予写权限。在avatar文件夹下上传一张default.jpg的图片作为默认头像。另外在WP后台默认头像最好设置为空。 此法来自:http://fatesinger.com/76006 function
function fa_cache_avatar($avatar, $id_or_email, $size, $default, $alt)
{
$avatar = str_replace(array("www.gravatar.com", "0.gravatar.com", "1.gravatar.com", "2.gravatar.com"), "cn.gravatar.com", $avatar);
$tmp = strpos($avatar, 'http');
$url = get_avatar_url( $id_or_email, $size ) ;
$url = str_replace(array("www.gravatar.com", "0.gravatar.com", "1.gravatar.com", "2.gravatar.com"), "cn.gravatar.com", $url);
$avatar2x = get_avatar_url( $id_or_email, ( $size * 2 ) ) ;
$avatar2x = str_replace(array("www.gravatar.com", "0.gravatar.com", "1.gravatar.com", "2.gravatar.com"), "cn.gravatar.com", $avatar2x);
$g = substr($avatar, $tmp, strpos($avatar, "'", $tmp) - $tmp);
$tmp = strpos($g, 'avatar/') + 7;
$f = substr($g, $tmp, strpos($g, "?", $tmp) - $tmp);
$w = home_url();
$e = ABSPATH .'avatar/'. $size . '*'. $f .'.jpg';
$e2x = ABSPATH .'avatar/'. ( $size * 2 ) . '*'. $f .'.jpg';
$t = 1209600;
if ( (!is_file($e) || (time() - filemtime($e)) > $t) && (!is_file($e2x) || (time() - filemtime($e2x)) > $t ) ) {
copy(htmlspecialchars_decode($g), $e);
copy(htmlspecialchars_decode($avatar2x), $e2x);
} else { $avatar = $w.'/avatar/'. $size . '*'.$f.'.jpg';
$avatar2x = $w.'/avatar/'. ( $size * 2) . '*'.$f.'.jpg';
if (filesize($e) < 1000) copy($w.'/avatar/default.jpg', $e);
if (filesize($e2x) < 1000) copy($w.'/avatar/default.jpg', $e2x);
$avatar = "<img alt='{$alt}' src='{$avatar}' srcset='{$avatar2x}' class='avatar avatar-{$size} photo' height='{$size}' width='{$size}' />";
}
return $avatar;
}
add_filter('get_avatar', 'fa_cache_avatar',1,5);

4. 使用 WordPress 插件缓存头像到主机空间

注:只有主机空间能够访问 Gravatar 才可以使用,当然国内也可以通过修改源地址实现,但是此方法容易占用储存和增加服务器压力
插件:FV Gravatar Cache
本文来自:https://www.vobe.io/37

Typecho

参考:http://www.gsky.org/2014/2730.html
打开 /var/Widget/Abstract/Comments.php 文件
在第 397 行找到 $url = Typecho_Common::gravatarUrl($this->mail, $size, $rating, $default, $this->request->isSecure());
修改为:
$mailHash = NULL;
if (!empty($this->mail)) {
$mailHash = md5(strtolower($this->mail));
}
$url = 'https://secure.gravatar.com/avatar/';
if (!empty($this->mail)) {$url .= $mailHash;}
$url .= '?s=' . $size;
$url .= '&r=' . $rating;
$url .= '&d=' . $default;
//$url = Typecho_Common::gravatarUrl($this->mail, $size, $rating, $default, $this->request->isSecure());

Emlog

打开 /include/lib/function.base.php 文件,在 640 行附近,找到如下代码:
* 获取Gravatar头像
* http://en.gravatar.com/site/implement/images/
* @param $email
* @param $s size
* @param $d default avatar
* @param $g
*/
function getGravatar($email, $s = 40, $d = 'mm', $g = 'g') {
$hash = md5($email);
$avatar = "<strong>http://www.gravatar.com</strong>/avatar/$hash?s=$s&d=$d&r=$g";
return $avatar;
}


http://www.gravatar.com 替换为上面的源。


本文来自:https://www.vobe.io/37

展开
收起
妙正灰 2015-08-06 22:05:34 20106 0
1 条回答
写回答
取消 提交回答
  • ReGravatar镜像、解决方法大全
    不错分享,收下了。
    2015-08-31 18:39:07
    赞同 展开评论 打赏
问答分类:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
Docker 镜像原理和最佳实践 立即下载
Docker镜像原理和最佳实践 立即下载
我的Docker-Docker插件机制详解 立即下载