再谈谈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服务器在国外的原因了。
Tags : Gravatar头像
所有原创文章采用 知识共享署名-非商业性使用 4.0 国际许可协议 进行许可。
您可以自由的转载和修改,但请务必注明文章来源并且不可用于商业目的。
本站部分内容收集于互联网,如果有侵权内容、不妥之处,请联系我们删除。敬请谅解!
已有 3 条评论