判断是否为Gravatar默认图
序言
为什么突然需要判断Gravatar的头像是否为默认图呢?
最近在写公共头像服务嘛,说实话,Gr的默认头是真的丑,而且好多人都没有注册Gr所以,看到评论区大片的下图
Gravatar 的概念首先是在国外的独立 WordPress 博客中兴起的,当你到任何一个支持 Gravatar的网站留言时,这个网站都就会根据你所提供的 Email 地址为你显示出匹配的头像。当然,这个头像,是需要你事先到 Gravatar 的网站注册并上传的,否则,在这个网站上,就只会显示成一个默认的头像。
当然,由于某些不可说的原因,国内服务是G了,它的全称叫做“Globally Recognized Avatar”,翻译过来叫做全球通用头像
说实话,真的不太美观,下面放出网上的方法以及我自己的方法
贴代码
网上大部分文章都啥通过判断gravatar.com/avatar/[hash]?d=404 取状态码后再取头像,进行缓存,一般这个流程下来要3s左右!效率不高,有点稀碎。
我之前呢看过一篇文章,也是用md5方式判断是否为gr的默认图,但是好久了,原文找不到了,上次逛使用MD5验证文件完整性提高数据安全 - 倾丞の小窝 的时候看到的这篇文章,反正curl都要走一次文件流,干嘛不直接走一遍镜像站判断是否为默认图呢?这样一来,从以上方法3s+,以下方法300ms左右吧,我感觉这个速度,我是可以接受了,嗯,由于cpavatar在备案,着急使用的话可以先使用我的镜像站,avatar.zets.cn 目前使用的百度云CDN 源站提供者打开就能看到,三个源站轮询,可靠性我自认为是目前我见过应该最稳定的了(公司注销了,这个域名估计也要拿去重新备案了emmm头大啊)到时候我直接套层壹盾,预估影响不大
话不多说,贴代码 需引入Curl类,这个类还蛮好用,懒得封装了 Curl https://github.com/php-mod/curl
function g_default($hash){
$Curl = new Curl();
$Curl->setOpt(CURLOPT_RETURNTRANSFER, TRUE); //获取的信息以文件流的形式返回,而不是直接输出。
$Curl->setOpt(CURLOPT_SSL_VERIFYPEER, FALSE); //跳过SSL证书检查
$default = ['9de8c28c6028de09355431e6435015a5','0ed67da44dcb41eef12e1f1acde56f6c']; //经测试,可能是旧的默认图,会存在第二个md5值
$md5_hash = md5($Curl->get('http://avatar.zets.cn/avatar/'.$hash)->response);
return in_array($md5_hash, $default); //默认图md5值是否存在,是默认图则返回true 不是默认图则返回false
}