简单使用 php 获取 gravatar 头像
Gravatar 头像已经成为了博客、论坛等非常流行的通用头像,他能使你的网站的留言者根据自己的邮箱匹配不同的 Gravatar 头像。但不可否认的是 Gravatar 头像的服务器及缓存服务器位于国外,由于受到了干扰,国内无法打开 Gravatar 头像服务器及缓存服务器,导致了 Gravatar 头像无法显示,这样严重的拖累了网站的打开速度,甚至会因为一篇文章的留言非常多,需要加载几百个 Gravatar 头像图片,大量 HTTP 请求的发送,直接导致了网页加载缓慢、网站出现打不开的现象。
po 主之前用的是 v2ex 的源,感觉速度不太理想,所以以下代码就诞生了。
header("Content-type:image/png");
$path_info = $_SERVER['PATH_INFO'];
$path_array = explode('/', $path_info);
$m = ($path_array[2] != null) ? $path_array[2] : $_GET['m'];
$s = isset($_GET['s']) ? $_GET['s'] : '60';
$r = isset($_GET['r']) ? $_GET['r'] : 'g';
$query = http_build_query(array(
'gravatar_id' => $m,
'size' => $s,
'rating' => $r,
));
$url = 'https://secure.gravatar.com/avatar/index.php?' . $query;
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5);
$res = curl_exec($ch);
echo $res;
curl_close($ch);
演示地址:
http://api.kotori.love/gravatar/06a2950d128ec9faf155e28d9e889baa?s=100&r=g
如果要使用缓存的话,Github 上有一个现成的项目。
要应用在 WordPress 中,将以下代码加入 functions.php 中:
function MyAvatar($avatar) {
$avatar = str_replace(array("www.gravatar.com/avatar","0.gravatar.com/avatar","1.gravatar.com/avatar","2.gravatar.com/avatar","secure.gravatar.com"),"beta.api.kotori.love/gravatar",$avatar);
return $avatar;
}
add_filter('get_avatar', 'MyAvatar');
最后附上一个 Nginx 反代的配置:
http {
proxy_cache_path /var/cache/nginx levels=1:2 keys_zone=gravatar:8m max_size=10000m inactive=600m;
proxy_temp_path /var/cache/nginx/tmp;
server {
listen 80;
server_name ruby-china.org;
location /avatar {
proxy_redirect off;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Server $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_pass http://gravatar.com;
proxy_cache ruby_china;
proxy_cache_valid 200 302 300d;
proxy_cache_valid 404 502 1m;
expires 7d;
}
}
}