Gravatar 目前新手要去玩耍已经比较麻烦了,而老鸟的头像想在博客中正常的显示也成了一大问题,说道镜像大家首先想到的肯定是多说的,可问题是多说的镜像不支持 HTTPS 啊,全站 HTTPS 的网站必须是挂的。所以我们搬出更多的镜像。
镜像大全
引用以下是部分 Gravatar 镜像地址:Https源:https://secure.gravatar.com (兼容性最高,国内可以访问)
CN源:http://cn.gravatar.com (兼容性最高,国内可以访问,其实也支持 HTTPS)
@源:http://gravatar.com (兼容性最高,国内部分可以访问,其实也支持 HTTPS)
多说源:http://gravatar.duoshuo.com (延时较低,不支持 HTTPS,兼容性一般)
七牛镜像源:http://avacdn.qiniudn.com (延时较低,不支持 HTTPS,兼容性较低)
七牛镜像 HTTPS 源:https://dn-avacdn.qbox.me (延时较低,支持 HTTPS,兼容性较低)
解决大全
WordPress
1. 使用未被墙的地址(非七牛源)
注:'你要使用的源' 替换成 '上面的源,注意 http://或者 https://
- function unblock_gravatar( $avatar ) {
- $avatar = str_replace( array( 'http://www.gravatar.com', 'http://0.gravatar.com', 'http://1.gravatar.com', 'http://2.gravatar.com' ), '<strong>你要使用的源</strong>', $avatar );
- return $avatar;
- }
- add_filter( 'get_avatar', 'unblock_gravatar' );
2.使用未被墙的地址(七牛源)
引用请参考:http://devework.com/qiniu-cache-acceleration-gravatar-problem.html
或者:http://immmmm.com/use-qiniu-cache-gravatar.html
3.通过代码缓存 Gravatar 头像到本地
注意:下面的代码加到functions.php中,此法支持国内主机。在WP根目录下新建avatar文件夹并给予写权限。在avatar文件夹下上传一张default.jpg的图片作为默认头像。另外在WP后台默认头像最好设置为空。 此法来自:http://fatesinger.com/76006function
- function fa_cache_avatar($avatar, $id_or_email, $size, $default, $alt)
- {
- $avatar = str_replace(array("www.gravatar.com", "0.gravatar.com", "1.gravatar.com", "2.gravatar.com"), "cn.gravatar.com", $avatar);
- $tmp = strpos($avatar, 'http');
- $url = get_avatar_url( $id_or_email, $size ) ;
- $url = str_replace(array("www.gravatar.com", "0.gravatar.com", "1.gravatar.com", "2.gravatar.com"), "cn.gravatar.com", $url);
- $avatar2x = get_avatar_url( $id_or_email, ( $size * 2 ) ) ;
- $avatar2x = str_replace(array("www.gravatar.com", "0.gravatar.com", "1.gravatar.com", "2.gravatar.com"), "cn.gravatar.com", $avatar2x);
- $g = substr($avatar, $tmp, strpos($avatar, "'", $tmp) - $tmp);
- $tmp = strpos($g, 'avatar/') + 7;
- $f = substr($g, $tmp, strpos($g, "?", $tmp) - $tmp);
- $w = home_url();
- $e = ABSPATH .'avatar/'. $size . '*'. $f .'.jpg';
- $e2x = ABSPATH .'avatar/'. ( $size * 2 ) . '*'. $f .'.jpg';
- $t = 1209600;
- if ( (!is_file($e) || (time() - filemtime($e)) > $t) && (!is_file($e2x) || (time() - filemtime($e2x)) > $t ) ) {
- copy(htmlspecialchars_decode($g), $e);
- copy(htmlspecialchars_decode($avatar2x), $e2x);
- } else { $avatar = $w.'/avatar/'. $size . '*'.$f.'.jpg';
- $avatar2x = $w.'/avatar/'. ( $size * 2) . '*'.$f.'.jpg';
- if (filesize($e) < 1000) copy($w.'/avatar/default.jpg', $e);
- if (filesize($e2x) < 1000) copy($w.'/avatar/default.jpg', $e2x);
- $avatar = "<img alt='{$alt}' src='{$avatar}' srcset='{$avatar2x}' class='avatar avatar-{$size} photo' height='{$size}' width='{$size}' />";
- }
- return $avatar;
- }
- add_filter('get_avatar', 'fa_cache_avatar',1,5);
4. 使用 WordPress 插件缓存头像到主机空间
注:只有主机空间能够访问 Gravatar 才可以使用,当然国内也可以通过修改源地址实现,但是此方法容易占用储存和增加服务器压力
插件:FV Gravatar Cache
本文来自:https://www.vobe.io/37
Typecho
参考:http://www.gsky.org/2014/2730.html
打开 /var/Widget/Abstract/Comments.php 文件
在第 397 行找到 $url = Typecho_Common::gravatarUrl($this->mail, $size, $rating, $default, $this->request->isSecure());
修改为:
- $mailHash = NULL;
- if (!empty($this->mail)) {
- $mailHash = md5(strtolower($this->mail));
- }
- $url = 'https://secure.gravatar.com/avatar/';
- if (!empty($this->mail)) {$url .= $mailHash;}
- $url .= '?s=' . $size;
- $url .= '&r=' . $rating;
- $url .= '&d=' . $default;
- //$url = Typecho_Common::gravatarUrl($this->mail, $size, $rating, $default, $this->request->isSecure());
Emlog
打开 /include/lib/function.base.php 文件,在 640 行附近,找到如下代码:
- * 获取Gravatar头像
- * http://en.gravatar.com/site/implement/images/
- * @param $email
- * @param $s size
- * @param $d default avatar
- * @param $g
- */
- function getGravatar($email, $s = 40, $d = 'mm', $g = 'g') {
- $hash = md5($email);
- $avatar = "<strong>http://www.gravatar.com</strong>/avatar/$hash?s=$s&d=$d&r=$g";
- return $avatar;
- }
将 http://www.gravatar.com 替换为上面的源。