前一篇文章介绍了如何将Gravatar全球通用头像缓存到本地,但对于SAE这样的云主机来说,由于没有读写权限,我们是无法直接用这种方法来缓存Gravatar头像的。不过我们可以将Gravatar头像缓存到Storage中,从而达到相同的目的。方法也很简单,只需要在主题目录下function.php中最后一个?>前加入以下的代码即可:
function get_avatar_cache($avatar){ if($_SERVER['PHP_SELF'] == '/wp-admin/options-discussion.php')return $avatar; $s = new SaeStorage(); $tmp = strpos($avatar, 'avatar/') + 7; $avatar_id = substr($avatar, $tmp, strpos($avatar, '?') - $tmp); $tmp = strpos($avatar, 'avatar/') + 7; pattern = "/(<img.* src=\')([^\']*)(\'.*)/"; $avatar_url = preg_replace($pattern, "$2", $avatar); $avatar_url = str_replace("&", "&", $avatar_url); $avatar_file = 'avatars/' . $avatar_id . '.png'; //echo '<!--' . $avatar_url . '--> // <!--' . $s->getUrl('wordpress', $avatar_file) . '-->'; if(!$s->fileExists('wordpress', $avatar_file)){ $content = @file_get_contents($avatar_url); if(!$content) return $avatar; $attr = array('expires' => 'now plus 14 day'); $result = $s->write('wordpress', $avatar_file, $content, -1, $attr); if ($result != true) var_dump($s->errno(), $s->errmsg()); } $avatar = preg_replace($pattern, "$1" . $s->getUrl('wordpress', $avatar_file) . "$3", $avatar); return $avatar; } add_filter('get_avatar', 'get_avatar_cache');
Storage是不是性能不如KVDB或Memcache啊
是的。