[Emlog教程]Gravatar头像被墙的解决方法
0
1416
2017年9月30日
以前分享过一篇文章也是关于类似的,今天又重新分享一篇吧
方法一:如何你不想改程序内核,建议你使用以下代码,直接将下面的代码复制到模板文件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&d=$d&r=$g
2.把其中的红色字体修改为 国内Gravatar头像 http://cn.gravatar.com/avatar/$hash?s=$s&d=$d&r=$g
亲测两种方法都是可行的,据说多说的缓存访问速度更快
这个主题简介啊