书犹药也,善读可以医愚

    

再谈谈Gravatar头像

很多做过网站或者博客的站长都知道Gravatar头像这回事,特别是做博客站的,像WordPress、Typecho等博客程序文章后面的评论者头像都是通过邮箱地址调用了Gravatar生成的头像来显示的。

所以基本上也就会碰到以下几个问题:

  • 由于Gravatar官方服务器是在国外,国内访问的时候经常会出现不稳定情况;
  • 并不是所有人都会用邮箱注册Gravatar头像的;
  • 如果没有邮箱地址或者没有注册Gravatar的话,那么显示出来的就是一个难看的默认头像;

一般的解决方法是换一个加载Gravatar头像的镜像站,或者加上缓存,但这只解决了第一条问题,当然你觉得显示默认头像无所谓的话其实这样就可以了。

但是像我这样有着小小强迫症的人来说简直就是一件让人十分纠结的一件事情。

所以我有了一个想法:

  • 当评论者是博主的时候,直接从本地调取头像显示
  • 当游客评论时,判断游客是否有填写邮箱地址,如果邮箱地址为空或者该邮箱地址没有注册Gravatar头像的时候,随机调取本地指定文件夹内的图片作为头像显示
  • 当填写的邮箱地址有注册Gravatar的时候,则显示Gravatar生成的头像

这样应该才是理想的状态吧,但是现在不知道怎么有效地去判断邮箱地址有没有注册了Gravatar头像,方法是有,但是测试了之后严重影响页面加载速度。

这里先记录一下:

关于在php中Gravatar头像是怎么调用的过程,实际上就是通过strtolower()函数将用户输入的邮箱地址全部转为小写字符,然后通过md5()函数转码后生成的字符串跟在Gravatar地址后面,再加上几个参数,就成了头像图片的地址,然后在评论区适当位置将这个图片输出,就变成了头像。图片地址就像下面这个样子,中间那一串就是邮箱地址md5转码后的样子:

https://secure.gravatar.com/avatar/070b46fc4e12d2183b16da2325b78b01?s=80

过程知道了之后,其中有一个关键点就是邮箱地址用md5()函数转换后的字符串,如何利用这个字符串去判断是否存在对应的头像。网上搜了下资料,有一个是利用了php的get_headers()函数去发送请求,从返回的状态码来判断的,这是一个方法,但是这个方法我测试后发现会严重拖慢网站速度,简直不忍直视,直接贴上人家的代码如下,仅供参考:不建议使用,不建议使用,不建议使用!!!

function mochu_gravatar($email) {
 $hash = md5(strtolower(trim($email)));
 $uri = 'http://www.gravatar.com/avatar/' . $hash . '?d=404';
 $headers = @get_headers($uri);
 if (!preg_match("|200|", $headers[0])) {
 $has_valid_avatar = FALSE;
 } else {
 $has_valid_avatar = TRUE;
 }
 return $has_valid_avatar;
}

不过后来又搜索到了另一种方法,据说是不影响速度,但是我还没有测试,这个回头再说。

我也考虑过另一种方式:考虑到国内Gravatar用户少得可怜,而QQ用户多得离谱的情况来看,何不直接调用QQ头像?接口也不难获取到,而且基本上大家都是有QQ的,当然也都有对应的自定义头像了。这个想法应该也不错,有人也早已经用上了,我准备再搞一下Gravatar,如果实在不行,我就转去QQ头像咯。


补充:

研究了一下Gravatar头像地址后面的参数,发现本身就提供了头像不存在时的应对方法,先看一下参数:

http://www.gravatar.com/avatar/参数1?s=参数2&d=参数3&r=参数4

参数1:邮箱地址转换后的md5字符串

参数2:头像尺寸

参数3:这个参数是关键

  • 留空 显示gravatar官方图形
  • 404 直接返回404错误状态
  • mm 神秘人(一个灰白头像)
  • identicon 抽象几何图形
  • monsterid 小怪物
  • wavatar 用不同面孔和背景组合生成的头像
  • retro 八位像素复古头像

参数4:图片限制级(G 普通级、PG 辅导级、R 和 X 为限制级),一般情况下都是G。

发现了第三个参数后,其实我们可以直接在后面跟上自定义的头像图片地址了,例如:

https://www.gravatar.com/avatar/?s=40&d=自定义头像图片地址

这样仍然会对加载速度有一定影响,但尚在可以接受的范围。

其实最主要还是Gravatar服务器在国外的原因了。

所有原创文章采用 知识共享署名-非商业性使用 4.0 国际许可协议 进行许可。
您可以自由的转载和修改,但请务必注明文章来源并且不可用于商业目的。
本站部分内容收集于互联网,如果有侵权内容、不妥之处,请联系我们删除。敬请谅解!

  Previous post 周日例行LSD22公里
Next post   搞了一个小玩意

已有 3 条评论

  1. 爱css 爱css
    这个是有邮件的
    1. 回复 爱css: 嘿嘿,目前就这样了,先用一段时间再说。
  2. 爱css 爱css
    我是爱css,来测试

添加新评论

  Timeline:一生

那一条老街之中
居住着许多老人
每隔一段时间
就有一个生命从老街中逝去
住在这条街道的人渐渐习惯
人到了岁数
是不得不离开的
渐渐消失的生命
无论各自经历了怎样的一生
最终都是安安静静地离去了
留不得一点东西

updated on :

  关于博主

84年,天秤座与处女座交接,有一点点强迫症,性格诡异,情绪复杂多变。爱好健身、跑步,一年必跑一场全程马拉松,N场半程马拉松。也喜欢听歌与阅读,喜欢接触新鲜事物。座右铭:活到老,学到老,生命在于运动!

  近期评论

  •  程志辉: 宇哥的网站啥时候恢复哇
  •  阿怡: 二级分类相册不可以继承。不知道怎么改。
  •  阿怡: 二级分类相册不可以继承。不知道怎么改。
  •  kaio: 这网站真棒。做个参考
  •  姑姑: 这个名字秒啊
  •  Liu先生的故事小屋: 友链更名 原名 -小酱博客 现名-Liu先生的故事小屋 麻烦博主换一下友链名
  •  御宅男: 码农路过,留下一个爪印!!!!
  •  林叶展弟弟: 我自己魔改了一些,都是在文件里直接改的,每次更新还是不辞辛苦改一改。
  •  御宅男: 瓜农路过 留下一个爪印
  •  白: 谢谢你!

  分类目录

很多东西宁缺毋滥,流星的光芒短暂而灼热闪耀。

让你变得更好的那个人,往往是你觉得很难与之相处的那个人。—— by 小宇

觉得自己做的到和不做的到,其实只在一念之间。

路在自己脚下,没有人可以决定我的方向。

你的选择是做或不做,但不做就永远不会有机会。

凡事顺其自然,遇事处于泰然,得意之时淡然,失意之时坦然,艰辛曲折必然,历尽沧桑悟然。