[Emlog教程]Gravatar头像被墙的解决方法

2014-11-18 / 12 评论 / 10352 阅读

方法一:如何你不想改程序内核,建议你使用以下代码,直接将下面的代码复制到模板文件module.php中

<?php
//blog-tool:获取Gravatar头像
function myGravatar($email, $s = 40, $d = 'mm', $g = 'g') {
$hash = md5($email);
$avatar = "http://cn.gravatar.com/avatar/$hash?s=$s&d=$d&r=$g";
return $avatar;
}?>

将module.php中所有的getGravatar替换为myGravatar。

方法二:将多说的头像缓存到本地 将下面的代码复制到模板文件module.php中

<?php
//Custom:获取模板目录名称
function get_template_name(){
    $template_name = str_replace(BLOG_URL,"",TEMPLATE_URL);
    $template_name = str_replace("content/templates/","",$template_name);
    $template_name = str_replace("/","",$template_name);
    return $template_name;
}
?>
<?php
//blog-tool:获取Gravatar头像并缓存到本地
function MyGravatar($email, $s=40, $d='monsterid', $r='g') {
    $f = md5($email);
    $a = TEMPLATE_URL.'avatar/'.$f.'.jpg';
    $e = EMLOG_ROOT.'/content/templates/'.get_template_name().'/avatar/'.$f.'.jpg';
    $t = 1296000; //15天,单位:秒
    if (empty($d)) $d = BLOG_URL.'avatar/default.jpg';
    if (!is_file($e) || (time() - filemtime($e)) > $t ) {
        //当头像不存在或者超过15天才更新
        $g = sprintf("http://gravatar.duoshuo.com",(hexdec($f{0})%2)).'/avatar/'.$f.'?s=48&d='.$d.'&r='.$r;
        copy($g,$e); $a=$g; //新头像copy时, 取gravatar显示
    }
    if (filesize($e) < 500) copy($d,$e);
    return $a;
}
?>

在模板文件夹新建名为avatar的文件夹,将module.php中的getGravatar替换为MyGravatar。
修改完成后刷新两次网页,查看头像路径为本地路径即设置成功。

如gravatar网站恢复正常,不需使用上述功能时,删除上述代码,将MyGravatar或者DuoshuoGravatar替换为原来的getGravatar即可。

本教程由 冷猫 发布于em论坛,舍力测试5.3.1正常使用


修改位置在/include/lib/function.base.php,找到以下代码

/**
 * 获取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 = "http://www.gravatar.com/avatar/$hash?s=$s&d=$d&r=$g";
    return $avatar;
}

其实有两种方法

1.把其中的红色字体修改为 多说的缓存   http://gravatar.duoshuo.com/avatar/$hash?s=$s&amp;d=$d&amp;r=$g

2.把其中的红色字体修改为 国内Gravatar头像   http://cn.gravatar.com/avatar/$hash?s=$s&amp;d=$d&amp;r=$g

亲测两种方法都是可行的,据说多说的缓存访问速度更快

评论一下?

OωO
取消
    1. 头像
      yoyo.
      第7楼
      cn.gravatar这个地址好像也被墙了,现在完全不能显示头像...(ㄒoㄒ)
      回复
      1. 头像
        舍力
        @yoyo.:这个就没办法了
        回复
      1. 头像
        舍力
        @yoyo.:用QQ头像把,$avatar = "https://q1.qlogo.cn/g?b=qq&nk=$email&s=$s";
        回复
    1. 头像
      厦门维护网
      第6楼
      舍力,你好,原来我的网站有跟你互换过友情链接,现我的 厦门维护网 www.xmweihu.com 跟你互换一下友情链接!你的我已经添加好了!
      回复
      1. 头像
        舍力
        @厦门维护网:已加
        回复
    1. 头像
      起点终站
      第5楼
      多说头像缓存貌似不能用了。。是不是api换了
      回复
    1. 头像
      极客卡盟
      第4楼
      还是没有弄懂,没有发现这些代码
      回复
      1. 头像
        舍力
        @极客卡盟:请用默认模版测试。
        回复
    1. 头像
      兰州SEO
      地板
      我又来支持啦,哈哈哈,感谢舍力大神的分享
      回复
    1. 头像
      冷夜
      板凳
      感谢分享
      回复
    1. 头像
      知道91博客
      沙发
      不知道Wordpress有没有这个问题呢
      回复
      1. 头像
        舍力
        @知道91博客:全部被墙了
        回复