April 23
Gravatar加速CDN,把头像放到墙内
因为特殊情况可能Gravatar会无法访问,这个时候我们就只能换掉Gravatar服务器。
Gravatar备选方案还是很多的,有官方提供备用线路节点及地区节点,还有一些第三方提供的Gravatar加速CDN,以及我们可以自己利用七牛做CDN加速。
七牛 Gravatar镜像:
注册七牛,新建项目,设置绑定网站为cn.gravatar.com,然后拿七牛提供的二级域名直接用
wordpress模板funtions.php设置
镜像方案
// 替换Gravatar为v2ex头像源
function yjl_get_avatar( $avatar ) {
$avatar = preg_replace("/http:\/\/(www|\d).gravatar.com\/avatar\//","http://cdn.v2ex.com/gravatar/",$avatar);
return $avatar;
}
add_filter('get_avatar', 'yjl_get_avatar');
缓存方案
function my_avatar($avatar) {
$tmp = strpos($avatar, 'http');
$g = substr($avatar, $tmp, strpos($avatar, "'", $tmp) - $tmp);
$tmp = strpos($g, 'avatar/') + 7;
$f = substr($g, $tmp, strpos($g, "?", $tmp) - $tmp);
$w = get_bloginfo('wpurl');
$e = ABSPATH .'avatar/'. $f .'.jpg';
$t = 1209600; //設定14天, 單位:秒
if ( !is_file($e) || (time() - filemtime($e)) > $t ) { //當頭像不存在或文件超過14天才更新
copy(htmlspecialchars_decode($g), $e);
} else $avatar = strtr($avatar, array($g => $w.'/avatar/'.$f.'.jpg'));
if (filesize($e) < 500) copy($w.'/avatar/default.jpg', $e);
return $avatar;
}
add_filter('get_avatar', 'my_avatar');
另一个比较笨的方法:
打开wordpress程序目录的wp-includes文件夹,找到pluggable.php(WP4.2之前版本)打开,将大约2150至2157行:
if ( is_ssl() ) {
$host = 'https://secure.gravatar.com';
} else {
if ( !emptyempty($email) )
$host = sprintf( "http://%d.gravatar.com", ( hexdec( $email_hash[0] ) % 2 ) );
else
$host = 'http://0.gravatar.com';
}
替换为:
$host = 'https://secure.gravatar.com';
或者(支持头像缓存插件)
$host = 'http://cn.gravatar.com';
WP4.2之后版本,打开wordpress程序目录的wp-includes文件夹,打开link-template.php,将大约第3604行的:
$url = sprintf( 'http://%d.gravatar.com/avatar/%s', $gravatar_server, $email_hash );
修改为:
$url = sprintf( 'http://cn.gravatar.com/avatar/%s', $email_hash );
之所以说“笨”是因为下次更新程序,还需要再次修改,不过这个方法最实用。
以上方法主要针对使用用国内主机用户,使用国外主机这时优势突显,并不需要修改任何东西,安装头像缓存插件,将头像缓存到本地,并不影响正常使用。
https直接替换国内
$url = 'https://secure.gravatar.com/avatar/' . $email_hash;
修改为:
$url = 'https://gravatar.loli.net/avatar/' . $email_hash;
typecho模板funtions.php设置
修改typecho中Common.php程序文件让gravatar可以正常显示
打开文件var\Typecho\Common.php,找到以下代码(大概在939行)
$url = $isSecure ? 'https://secure.gravatar.com' : 'http://1.gravatar.com';
修改为
$url = $isSecure ? 'https://cn.gravatar.com' : 'http://cdn.v2ex.com';
应该还可以多加几个域名,哈哈!这里就没有去测试了,当然这2个域名可以自行选择以上任意镜像的域名
来源:https://yijile.com/log/503.html
:D 少女祈祷中...