Gimhoy's Blog

您曾经浏览过

SAE上WordPress缓存Gravatar全球通用头像

本文最后更新于2013年5月10日,已超过三年没有更新,如果文章内容失效,请反馈给我们,谢谢!

前一篇文章介绍了如何将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("&amp;", "&", $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');


免费获得每月10G空间+10G免费流量
  • Comment (2)
  • Trackback (0)
  • Maple Google Chrome Windows 2014/08/12 20:30 @Ta

    Storage是不是性能不如KVDB或Memcache啊

    #25
  • 还没有Trackback
Leave a Reply

*

*