当前位置:首页 »“秋了秋”个人博客 » 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,当然你可以把更新时间设得很长或者永不更新~本站采用的就是长久性更新,大概一年吧,有换头像的通知我删除。。。。

0
文章作者: “秋了秋”个人博客,本站鼓励原创。
转载请注明本文地址:http://netblog.cn/blog/182.html
目录: WP教程标签: Avatar头像本地化 11376次阅读

请求播放音乐,请点击播放

登 录
点击获取验证码
还没账号?点击这里