当前位置:秋叶网络博客 WP教程 ◊ WordPress从多说服务器缓存迁移Avatar头像图片至本地

WordPress从多说服务器缓存迁移Avatar头像图片至本地

作者:秋叶 发表时间:2014年11月30日

前不久,avatar头像被墙了,导致wordpress或者emlog等用到avatar头像的开源程序网站打开异常缓慢,头像始终加载不出来,后来网上查找方法,各大博客都在提到这个问题并给出了一致的解决方案,就是用多说缓存的avatar头像替换avatar服务器的图片,速度虽比不上avatar官方服务器的速度,但还算比较好,貌似很不错的样子,我也就用上了,可是现在发现多说服务器越来越慢了,时不时还加载不出来几个头像,我想是因为avatar的事故导致越来越多人调用多说服务器的头像,造成网络拥堵的现象。看来谁都不能信任了~我还是喜欢独占资源~看到网上几年前有人写的从avatar缓存图片到本地的方法。经过测试,已经不能从avatar官网抓到图片了,那就只能从多说服务器去抓取,前后两种方法整合在一起就通了。只要在wordpress主题的functions.php文件里加入以下代码:

//把多说服务器头像迁移至我的服务器
function get_avatar_uctheme( $avatar ) {//用多说缓存头像
$avatar = preg_replace( "/http:\/\/(www|\d).gravatar.com/","http://gravatar.duoshuo.com",$avatar );
return $avatar;
}
add_filter( 'get_avatar', 'get_avatar_uctheme' );
function my_avatar($avatar) {//把多说头像下载到本地
$tmp = strpos($avatar, 'http');
$g = substr($avatar, $tmp, strpos($avatar, "'", $tmp) - $tmp);
$tmp = strpos($g, 'avatar/') + 7;
$f = substr($g, $tmp, strpos($g, "?", $tmp) - $tmp);
$w = get_bloginfo('wpurl');
$e = ABSPATH .'avatar/'. $f .'.jpg';
$t = 1209600; //单位:秒(14天)
if ( !is_file($e) || (time() - filemtime($e)) > $t ) { //不存在或文件超过14天就重新抓取下载
copy(htmlspecialchars_decode($g), $e);
} else $avatar = strtr($avatar, array($g => $w.'/avatar/'.$f.'.jpg'));
if (filesize($e) < 500) copy($w.'/avatar/default.jpg', $e);
return $avatar;
}
add_filter('get_avatar', 'my_avatar');

然后在wordpress安装目录(一般是网站根目录)里面创建一个文件夹并命名为avatar,确保这个文件夹具有可写权限,然后准备一张默认图片avatar.jpg放到该文件夹里面,这样就ok了。最后找一个头像比较集中的页面刷新下,比如说留言板头像墙页面,这样可以把大部分头像预先download下来。以后直接读取本地图片就行了。

优点:独立性强,速度快,图片网址可控。

缺点:第一次加载页面的时候或者更新的时候页面会比较慢,对于大量头像同时缓存会占用服务器大量i/o,当然你可以把更新时间设得很长或者永不更新~本站采用的就是长久性更新,大概一年吧,有换头像的通知我删除。。。。

目录: WP教程 | 标签: | 8172次阅读