Gravatar加速CDN,把头像放到墙内

因为特殊情况可能Gravatar会无法访问,这个时候我们就只能换掉Gravatar服务器。
Gravatar备选方案还是很多的,有官方提供备用线路节点及地区节点,还有一些第三方提供的Gravatar加速CDN,以及我们可以自己利用七牛做CDN加速。

Gravatar官方镜像:

cn.gravatar.com/avatar/

www.gravatar.com/avatar/

secure.gravatar.com/avatar/

en.gravatar.com/avatar/

0.gravatar.com/avatar/

1.gravatar.com/avatar/

2.gravatar.com/avatar/

3.gravatar.com/avatar/

V2EX Gravatar镜像:

cdn.v2ex.com/gravatar/

七牛 Gravatar镜像:

注册七牛

新建项目,设置绑定网站为cn.gravatar.com,然后拿七牛提供的二级域名直接用

已失效Gravatar镜像:

  • 多说Gravatar镜像:gravatar.duoshuo.com/avatar/
  • CSS.net Gravatar镜像:cdn.css.net/avatar/

blog按照Gravatar插件

wordpress上的Gravatar插件

FV Gravatar Cache

blog模板funtions.php设置

通过对blog模板functions.php文件设置可以做到不修改源程序、不使用插件达到替换的目的,可以根据需求替换其中的cdn.v2ex.com/gravatar/内容。

wordpress模板funtions.php设置

镜像方案

1
// 替换Gravatar为v2ex头像源
2
function yjl_get_avatar( $avatar ) {
3
    $avatar = preg_replace("/http:\/\/(www|\d).gravatar.com\/avatar\//","http://cdn.v2ex.com/gravatar/",$avatar);
4
    return $avatar;
5
}
6
add_filter('get_avatar', 'yjl_get_avatar');

缓存方案

1
function my_avatar($avatar) {
2
  $tmp = strpos($avatar, 'http');
3
  $g = substr($avatar, $tmp, strpos($avatar, "'", $tmp) - $tmp);
4
  $tmp = strpos($g, 'avatar/') + 7;
5
  $f = substr($g, $tmp, strpos($g, "?", $tmp) - $tmp);
6
  $w = get_bloginfo('wpurl');
7
  $e = ABSPATH .'avatar/'. $f .'.jpg';
8
  $t = 1209600; //設定14天, 單位:秒
9
  if ( !is_file($e) || (time() - filemtime($e)) > $t ) { //當頭像不存在或文件超過14天才更新
10
    copy(htmlspecialchars_decode($g), $e);
11
  } else  $avatar = strtr($avatar, array($g => $w.'/avatar/'.$f.'.jpg'));
12
  if (filesize($e) < 500) copy($w.'/avatar/default.jpg', $e);
13
  return $avatar;
14
}
15
add_filter('get_avatar', 'my_avatar');

typecho模板funtions.php设置

修改typecho中Common.php程序文件让gravatar可以正常显示

打开文件var\Typecho\Common.php,找到以下代码(大概在939行)

1
$url = $isSecure ? 'https://secure.gravatar.com' : 'http://1.gravatar.com';

修改为

1
$url = $isSecure ? 'https://cn.gravatar.com' : 'http://cdn.v2ex.com';

应该还可以多加几个域名,哈哈!这里就没有去测试了,当然这2个域名可以自行选择以上任意镜像的域名

本文更新中