两种解决Gravatar挂掉的办法

5

Comments

话说Gravatar挂掉了,大家都做了无头阿凡达.
我这里提供两种办法.都需要一定的php基础哦~

第一种办法:博客服务器的图片代理.

下载一个 GRAVATAR CACHE 的php程序,不是 WordPress 插件,只是一个缓存头像的程序.下载地址:http://scott.yang.id.au/code/gravatar-cache/#toc-download

然后打开index.php,修改代码.假设我就放在我博客根目录 http://minidr.com/gravatar/ 这个路径下.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
$config = array(
'gravatar' => 'http://www.gravatar.com/avatar.php',
'rating' => 'PG', //默认头像等级
'size' => 24, //默认头像宽度高度,依据博客原头像大小的最大值,也就是 get_avatar($rc_comm,$size='24') 这个函数中的那个数字中的最大值
'default' => '',
'border' => '',
'referrer' => '',
'pos_expiry' => 604800,
'neg_expiry' => 43200,
'neg_handler' => 'file',
'proxy' => '',
'basedir' => dirname(__FILE__),
'x-sendfile' => false,
'debug' => false
);

接着,在 profile 目录,创建一个名为 avatar.php 的文件,用非记事本输入以下字符:

1
2
3
4
5
<?php
$config['default'] = 'http://minidr.com/gravatar/gravatar.png'; //无头像时返回的默认头像路径,假设我放了这张照片
$config['rating'] = 'PG';//gravatar的内容级别
$config['size'] = 24;//头像尺寸
>

接着打开 .htaccess 文件,修改:

1
2
3
4
5
6
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>

倒数第二行改成目录 我的是

1
RewriteRule . /gravatar/index.php [L]

然后去修改主题,找到函数get_avatar(),如果皮肤比较规矩的话,应当能找到.

1
<?php echo get_avatar( $comment, 24 ); ?>

改成

1
<img src="http://minidr.com/gravatar/avatar/<?php echo md5(strtolower($comment->comment_author_email)); ?>" alt="" />

如果像我一样,皮肤不规矩,HTML代码是嵌套在php函数里面echo出来的,

1
2
3
$rc_comments .= "<li>". get_avatar($rc_comm,$size='16') ."<span class='zsnos_comment_author'>" . $rc_comm->comment_author . ": </span><a href='"
. get_permalink($rc_comm->ID) . "#comment-" . $rc_comm->comment_ID. "' title='on " . $rc_comm->post_title . "'>" . strip_tags($rc_comm->comment_content)
. "</a></li>\n";

改成

1
2
3
$rc_comments .= "<li><img src='http://minidr.com/gravatar/avatar/". md5(strtolower($comment->comment_author_email)) ."' alt='' /><span  class='comment_author'>" . $rc_comm->comment_author . ":  </span><a href='"
. get_permalink($rc_comm->ID) . "#comment-" .  $rc_comm->comment_ID. "' title='on " . $rc_comm->post_title .  "'>" . strip_tags($rc_comm->comment_content)
. "</a></li>\n";

这样返回的结果是固定大小的,但是文章下面和边栏的头像图片大小有可能不一样大,如返回24,边栏只要16.如果发现浏览时不正常,还要对博客的主题的CSS进行修改,让CSS限制图片大小.
查看图片上一层div的id或者class属性,如id="rc_comment"

那css里就加入

1
2
3
4
#rc_comment img{
height:16px;
width:16px;
}

第二种办法是直接修改 WordPress 的 get_avatar() 函数.因为https还没有挂掉,所以可以换gravatar地址.位于 /wp-includes/pluggable.php 1645 行.

1645
1646
1647
1648
1649
1650
1651
1652
if ( is_ssl() ) {
$host = 'https://secure.gravatar.com';
} else {
if ( !empty($email) )
$host = sprintf( "http://%d.gravatar.com", ( hexdec( $email_hash{0} ) % 2 ) );
else
$host = 'http://0.gravatar.com';
}

这个几行直接去掉,改成

1645
$host = 'https://secure.gravatar.com';

就这么一行,问题解决了.不过,这不是一个长远的办法~~~你懂的.

5 Responses to “两种解决Gravatar挂掉的办法”

  1. Oct 18th, 2010 Chrome 8.0.552.0 Windows XP 21:15 Reply

    这么复杂的方法对我这种懒人不适用,直接装个缓存插件搞定

    • Mini Dragon Says:
      Oct 18th, 2010 Firefox 3.6.10 Fedora  13 23:28 Reply

      @小峰JoysBoy 啥插件啊 我基本抵制插件的

      • Oct 18th, 2010 Chrome 8.0.552.0 Windows XP 23:32

        我基本是插件控,以前让兽兽抓狂过,以前我装了50+插件,我现在用的是GravatarLoaclCache

  2. Mars Says:
    Oct 19th, 2010 Firefox 3.6.8 Windows XP 64-bit/Server 2003 02:47 Reply

    第一种方法不错,我喜欢。

  3. Mar 18th, 2011 MSIE 7.0 Windows 7 09:22 Reply

    嘛嘛咪呀,看得我头晕……

来了你就吐槽我吧!






Note: Commenter is allowed to use '@User+blank' to automatically notify your reply to other commenter. e.g, if ABC is one of commenter of this post, then write '@ABC '(exclude ') will automatically send your comment to ABC. Using '@all ' to notify all previous commenters. Be sure that the value of User should exactly match with commenter's name (case sensitive).