Gravatar 头像缓存解决 Gravatar 无法访问

非常感谢热心读者赐稿!

作者:
loo2k  来源:http://loo2k.com/gravatar-cache-reset/

如果没有记错的话昨天 10/10/15 Gravatar 的四个存放头像的域名被 GFWed 了;跟着英勇就义的还有 MTime 、玩聚;其实我最想不清楚的就是为什么连一个提供头像服务的网站都会敏感到被封掉;算了,那不是我们能理解的;

Gravatar 被墙,可以暂时用 Gravatar 头像缓存的办法解决,仅限国外主机此方法国内外主机都适用这篇文章里面提及的代码根据 Willin 的 �易的 Gravatar �像�存 提供的代码进行修改,第一部分讲头像缓存原理,第二部分提供一个根据这个方法制作的一个头像缓存插件,方便懒得理解的同学直接使用;

因为各个博客显示的 Gravatar 的头像不一定都是一个大小,最初 Willin 是用 CSS 控制头像大小,后来我修改代码直接缓存不一样大小的头像,显示的效果可能更好一点;

顺便修改了一下复制缓存文件的地址,从被墙的地址换到了没有墙的地址,这样国内或者国外的主机都能正常的使用 Gravatar 的缓存了;

Gravatar 头像缓存原理篇

话说也没什么很复杂的原理(如果你会 PHP 的话,可以继续将这段代码进行改进),通过国外能访问 Gravatar 的主机预先下载评论者的头像到主机上,访客访问的头像使用你主机上的头像就能间接的访问到 Gravatar 的头像了

你可以修改自己的主题实现头像缓存,编辑主题文件夹里面的 functions.php 文件,添加以下代码:

function cache_gravatar($avatar) {
  $tmp = strpos($avatar, 'http'); //76
  $g = substr($avatar, $tmp, strpos($avatar, "'", $tmp) - $tmp);//图像地址
  $tmp = strpos($g, 'avatar/') + 7;//31
  $f = substr($g, $tmp, strpos($g, "?", $tmp) - $tmp);//图像名称
  $s = 'size' . substr($avatar,strpos($avatar, "?s=", $tmp) + 3,2);//图像大小 48
  $nogfw = 'http://www.gravatar.com/avatar/' . $f . '?size=' . $s . '.png';//替换成没有被墙的地址
  $w = get_bloginfo('wpurl').'/wp-content';//博客地址
  $e = ABSPATH .'/wp-content/avatar/'. $f . $s .'.png';//主机图像地址
  $t = 1209600; //14天 单位秒
  if ( !is_file($e) || (time() - filemtime($e)) > $t ) copy($nogfw, $e); //当头像不存在或者图像存在时间超过14天更新
  if ( filesize($e) < 500 ) copy($w.'/avatar/default.png', $e);
  $avatar = strtr($avatar, array($g => $w.'/avatar/' . $f . $s . '.png'));//将原来的地址替换成本地地址
  return $avatar;
}
add_filter('get_avatar', 'cache_gravatar');

然后你需要在你博客的的 FTP 主机博客地址/wp-content/创建一个权限为 755 ,名为 avatar 的文件夹就能使用 Gravatar 的头像缓存了;

Gravatar 头像缓存插件

为了节省大家的时间,我做了一个 Gravatar 的头像缓存插件;上传 - 安装 - 启用,三步就可以了

Gravatar 头像缓存插件下载地址:

Gravatar Cache Plugin (3KB都不到)

对 Gravatar 头像缓存的一些补充

时间仓促,我只在自己的博客上用过,如果你遇到什么问题,欢迎留言讨论;

  • 如果你用的是国内主机,看这条评论
  • 重要更新如果你是国内主机,也可通过本文的方法或插件缓存 Gravatar 头像,10/10/17 下午已对插件进行升级,主要针对国内主机用户无法缓存问题;

1 条评论:

ben西西 说...

-.-你10.17上傳的新的插件了沒有???