在《WordPress中Gravatar头像缓存至本地服务器——暨博客的优化实录》一文中,vfhky谈到了Gravatar头像本地服务器缓存技术。遗憾的是,由于当时考虑得不够周到,使用这里面的代码造成了一个比较严重的问题:那就是从default文件夹随机取出的头像在超过5天的时间后,也会随着拥有gravatar真实头像的用户的头像一起更新。
但是gravatar用户的头像在更新时,由于$default的值是空的,那么更新时$g的值就是类似于
http://www.gravatar.com/avatar/eefdd735a45efc514936a0d0ca7e2511?s=40?d=?r=G
然而没有gravatar头像的“default用户”,他们的头像更新的时候,$g的值就是类似于
http://www.gravatar.com/avatar/eefdd735a45efc514936a0d0ca7e2511?s=30&d=/home4/jinrongi/public_html/hky/wp-content/themes/weisaysimple/avatar/default/default10.jpg&r=G
这个是无法访问的,从而造成了应该显示头像的地方无法正常显示。
—————————————解决方案—————————————
把原文中的代码改成下面的代码。需要说明的是filesize($e) == 2637
是通过 http://www.gravatar.com/avatar/ 访问得到的头像的size值,用它来判断是否是gravatar用户。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29 | //gravatar cache by vfhky 1
function vfhky_avatar( $email, $size, $default , $alt) {
// $alt = (false === $alt) ? '' : esc_attr( $alt );
$alt = ('' == $alt) ? '' : $alt ;//用于设置当鼠标移到头像上显示提示文字
$f = md5( strtolower( $email ) );//根据email的值来生成一个md5变量值,作为本地.jpg头像的名字
$a = get_bloginfo('wpurl') . '/avatar/' . $f. '.jpg';//需要在根目录下面新建一个avatar文件夹
$e = ABSPATH .'avatar/'. $f. '.jpg';//缓存的头像的绝对路径
$default_random_abs = ABSPATH .'wp-content/themes/vfhky/avatardefault/';//在avatar文件夹下新建一个default文件夹,用于保存博客预先自定义的头像
$default_random = array('default1.jpg', 'default2.jpg','default3.jpg','default4.jpg','default5.jpg','default6.jpg','default7.jpg','default8.jpg','default9.jpg','default10.jpg'); //在default文件夹下添加18个自己喜欢的头像,作为没有gravatar头像的人使用
$default_random_num = array_rand($default_random, 1); //随机从上面18张头像中选出一张
$t = 1296000; //单位s,设置更新时间为15天
if ( empty($default) ) $default = $default_random_abs.$default_random[$default_random_num];//设置默认头像
if ( (time() - filemtime($e)) > $t ){ //不是第一次留言留言且留言时间超过5天就更新头像
//$g = sprintf( "http://%d.gravatar.com", ( hexdec( $f{0} ) % 2 ) ). '/avatar/'. $f
// wp 3.0 的服务器
$g = 'http://www.gravatar.com/avatar/'. $f; // 旧服务器 (哪个快就开哪个)
copy($g, $e); //将$g代表的网络图片复制到$e代表的本地服务器中
if (filesize($e) == 2637 ){
copy($default_random_abs.$default_random[$default_random_num], $a);
}
//如果该E-mail未在gravatar官网设置头像,则把官网默认的头像$e改成default中的随机一张图片
else {$a = esc_attr($g);}
}
//如果是第一次留言并且没有官网头像,则直接用default中的随机一张图片替代
if (!is_file($e) || filesize($e) == 2637 ){
copy($default_random_abs.$default_random[$default_random_num], $e);
}
echo "<img title='{$alt}' alt='{$alt}' src='{$a}' class='avatar avatar-{$size} photo' height='{$size}' width='{$size}' />";
}
|
Comments »