«

»

Nov 30 2014

搞定被墙的Gravatar头像服务

以前还想着一周更新一次博客,两周更新一次博客,至少也要一个月一更吧,结果一拖就是拖了快两个月。image

题材想法什么的有得是,但是除了没时间和工作不顺的原因之外,主要还是,懒。

这几个月工作很不顺,这个就先不聊了。

这次主要说一下Gravatar,也就是wordpress自带评论的头像系统。

这里我就不再解释Gravatar了吧,总之是wordpress评论系统自带的的头像功能就是了

image

前一阵子某关部门在黑名单里又新添了一堆……算了,总之Gravatar是挂了。

一开始是Google的字库,接下来又是Gravatar,wordpress的服务是一个接一个挂啊。

不过我是不会去使用多说或者其他第三方评论系统的,原因参见之前的文章《致安装第三方社交评论插件的博主们》

继续使用Gavatar的思路有两种:

1、继续找寻Gavatar还没有被墙的可用服务器

2、让wordpress反向代理获取Gavatar的头像(仅适用于在墙外的wordpress)

方法一就是个权宜之计。目前看来某关部门是把一部分Gavatar服务器封掉了,但是不是全部,还有一部分服务是能用的,只要把wordpress取头像的地址换成能用的服务器地址就行了。

简单办法:

在wordpress目录下有一个wp-includes目录,里面有一个pluggable.php文件,在其约1723行(wordpress 3.8.5版本),将其if ( is_ssl()  )修改为if ( is_ssl() || true )

这段代码是为了判断你的服务器是否是使用https的(大概),如果是使用https的话,那么就会从Gravatar的https服务上取头像图片,反之就走http服务。加了一个true,就表示永远取https的。

至少还没被墙,能用。

image

优点:改动最小

缺点:1、wordpress更新了就会变,还得手动改。现在wordpress的自动更新停不下来。2、万一这个服务器被墙了还是会失效。

 

方法二又分为两种

a、每次都做反向代理

b、请求后做缓存

 

先说一下方法a,总之我是没搞定。我不会php也不会js,编程、脚本什么的我都不会。自己找了个php代理脚本结果差点把虚拟主机的http服务跑挂了。而且貌似很多虚拟主机都声明过严禁使用虚拟空间做代理服务,所以这个方法最后没搞定。

 

方法b,其实和方法a没什么区别,唯独就是会把访问过的头像缓存到wordpress服务的路径下。不过这样一来,向外的请求会大幅减少,比纯的方法a安全一点,流量消耗也会变小,还算不错。

(此方法来自v7v3)

此方法分三步:

1、在wordpress网站根目录新建一个名为avatar的文件夹,并分配可写权限(比如分个755啥的,一般主机默认目录都是755)

2、在这个目录下放一张Gravatar默认头像图片,命名为default.jpg。(这个文件用于给没有Gravatar头像的用户显示头像),注意图片大小最好对应你网站的评论头像图片大小,比如我的评论系统头像是40×40的,于是我就用这个

image

3、编辑wordpress使用的主题,编辑 模板函数 (functions.php) ,在其内容下新增如下代码:

function v7v3_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 ) { //头像超过设定时间或不存在则更新
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’, ‘v7v3_avatar’);

image

点击更新文件,搞定。

再去看页面上的评论,现在图片是avatar目录下已缓存的图片了。

优点:不是很担心Gravatar又被墙

缺点:1、仅适合wordpress服务器也在墙外的服务器;2、增大服务器开销,会向Gravatar做请求,并且每个用户都会缓存图片到本地;3、虽然能避免wordpress更新,但是这样的话主题更新了还是会失效,不过至少主题更新是手动的;4、头像默认缓存14天,14天之内如果有用户更新了Gravatar头像,在你的网站上会没有体现;5、发现了一个BUG,首次看没有Gravatar头像的用户头像,其头像url地址还是指向Gravatar服务器的,会图裂,再次刷新页面,头像才会变成default.jpg。

 

总之目前不论方法1还是方法2,都是很不完善,都是权宜之计,使用不当都会造成缺点大于优点,得不偿失。均仅建议有经验的用户使用。当然我是不会推荐第三方评论系统的。

目前本站是方法1和方法2双管齐下了,对付用吧。

 

 

9 comments

Skip to comment form

  1. Glegoo

    最要命的是好多国外的主题用了 Google 的东西,我感觉我真心没有那个时间去全部改成本地的………

    1. 石樱灯笼

      还好,用软件把所有文件打开,用搜索把相关字段批量替换,再用浏览器分析一下看看还有没有超时就行了

  2. Thiece

    救命啊,我还在用多说

    1. 石樱灯笼

      多说那么不好用

      1. Thiece

        懒,不想自己捣鼓

        1. 石樱灯笼

          不要说得好像多说能用似的

          1. Thiece

            至少看起来比wp默认的好看

  3. an9

    收藏备用。

    1. 石樱灯笼

      这个方法开始不靠谱了,还是建议用插件

发表评论

电子邮件地址不会被公开。 必填项已用*标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据