Gravatar为“全球通用头像”,多数前沿网站和博客程序都支持Gravatar头像,不过有时候Gravatar的网站会被墙(我相信很多人完全不理解这个网站为啥会享此“殊荣”),而且Gravatar在不同地区速度不一样会导致使用Gravatar头像的网站不稳定,尤其是国内的网站,缓存用户的头像到本地可以极大提高页面加载速度。
function getAvatar( $email, $expired=2592000 ){ $str = md5($email); //CACHE_PATH是一个全局变量,设置缓存目录 $file = CACHE_PATH . 'avatar/' . substr($str,0,2) . '/' . $str . '.jpg'; $relativeFile = '/cache/avatar/' .substr($str,0,2) . '/' . $str . '.jpg'; //如果头像不存在或者缓存过期,则重新获取 if( !file_exists($file) && ( time()-filemtime($file)>$expired ) ){ cacheAvatar($str); } //返回相对路径 return $relativeFile; } function cacheAvatar( $str, $size=50, $time_out=1 ){ $url = 'http://0.gravatar.com/avatar/'.$str.'?s='.$size; $path = CACHE_PATH . 'avatar/' . substr($str,0,2); $file = $path . '/' . $str . '.jpg'; if( !is_dir($path) ){ mkdir($path,0755,true); } $fp = fopen($file,'wb'); $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_HEADER, 0); curl_setopt($ch, CURLOPT_TIMEOUT, $time_out); curl_setopt($ch, CURLOPT_FILE, $fp); curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); curl_exec($ch); curl_close($ch); fclose($fp); }
不使用curl也可以使用fopen打开远程图片然后保存到本地,不过curl可以设置超时,对于未知内容的抓取,要预防任何可能存在的不稳定因素。
function cacheAvatar( $str, $size=50, $time_out=1 ){ $url = 'http://0.gravatar.com/avatar/'.$str.'?s='.$size; $path = CACHE_PATH . 'avatar/' . substr($str,0,2); $file = $path . '/' . $str . '.jpg'; if( !is_dir($path) ){ mkdir($path,0755,true); } $fp = fopen($url,'rb'); if( $fp ){ $newfp = fopen($file,'wb'); if( $newfp ){ while( !feof($fp) ){ fwrite($newfp,fread($fp,8192),8192); } } if( $fp ){ fclose($fp); } if( $newfp ){ fclose($newfp); }; } }
最后是后台对Gravatar头像进行批量删除和生成的操作方法:
class ReecCache extends ReecNode { public function __construct(){ parent::__construct(); } public function createAvatar(){ //将会删除所有头像后重新生成 $this->deleteAvatar(); $sql = 'SELECT DISTINCT(comment_email) AS email FROM comments ORDER BY id ASC'; $res = $this->db->getAll($sql); if( !empty($res) ){ foreach( $res as $row ){ cacheAvatar(md5($row['email'])); } } echo "已重新生成全部头像缓存!\n"; } public function deleteAvatar(){ //将会删除所有头像 foreach( glob(CACHE_PATH.'avatar/*') as $dir ){ if( is_dir($dir) ){ foreach( glob($dir.'/*.jpg') as $file ){ unlink($file); } rmdir($dir); } } echo "已删除全部头像缓存!\n"; } }
相关推荐
如果你需要更高级的功能,例如缓存Gravatar图片,可以自定义服务提供者,继承`GrahamCampbell\Gravatar\GravatarProvider`并覆盖其方法,然后注册你的服务提供者。 **6. 注意事项** - 为了保护用户隐私,不要直接...
为了实现更高级的功能,比如缓存 Gravatar 图片,你可以利用 Laravel 的缓存系统。例如,可以在获取头像时将结果存储在 Redis 或 Memcached 中,减少不必要的网络请求。 此外,你还可以扩展 Gravatar 服务,添加...
总的来说,通过本地缓存Gravatar头像和管理代理服务器的缓存更新,可以显著提升WordPress网站的性能和用户体验。同时,正确地使用WordPress的脚本和样式表注册功能,能确保浏览器和代理服务器正确处理文件更新,保持...
`gravatar-php` 是一个基于 PHP 的库,专门用于生成 Gravatar(全球统一头像服务)的URL。Gravatar 是一个服务,它允许用户通过他们的电子邮件地址关联一个头像,并在多个网站上显示该头像,例如在博客评论、论坛...
3. **缓存机制**:为了提高性能和减少对 Gravatar 服务器的依赖,GravatarServer 插件通常会使用本地缓存来存储头像图片。这意味着即使在 Gravatar 服务不可用时,用户也能看到他们的头像。 4. **安全与隐私**:...
WordPress默认采用的是Gravatar头像,但很多人可能没有设置Gravatar头像,因此只能显示出替换的头像。本插件就是将无头像用户的头像显示成动态生成的昵称首字符头像。 说到字母头像,实际上之前已有多种方案。本...
在 `config/gravatar.php` 文件中,可以配置默认头像、大小、默认图片样式等参数。例如,设置默认头像为马赛克风格: ```php 'default_image' => 'wavatar', ``` 2. **获取头像 URL** 通过 `Gravatar` ...
Typecho读者墙+头像缓存插件Avatars 2018年6月22日更新至v1.2.5: 更新模版钩子及国内镜像服务 修正action的安全校验等bug 增加tooltip效果支持css定制 详细说明与效果演示见blog发布地址:
2.Gravatar全球通用图片调用 duoshuo多说的服务器缓存文件.防止主网站被强之后无法加载的问题,同时也解决了加载速度慢的问题 3.列表日志页面分2栏显示。如果大家想要一栏的,可以自己修改css参数就可以。直接更改...
在Laravel框架中开发avatar功能,主要是为了提供一种方式来生成或显示用户的个性化头像,类似于Gravatar服务。Gravatar是一种全球通用的头像服务,它通过用户邮箱地址来关联和显示头像。然而,如果你想要在自己的...
后台接收到请求后,会验证数据,然后调用WordPress内置的`get_avatar()`函数,该函数根据邮箱地址查找Gravatar服务(一个全球通用的头像服务)上的头像,并返回HTML代码。前端再将返回的HTML代码加载到页面中,显示...
主站加载Gravatar头像修改程序默认的服务器,或者启用头像缓存插件:推荐几款Gravatar头像缓存插件 ■ 如果想在文章列表中显示指定的摘要,可以在文章编辑页面下面的“摘要”中输入摘要内容,如无“摘要”项目,在...
2. **兼容Gravatar**:与Gravatar服务无缝对接,如果用户已经在Gravatar上设置了头像,WP-Avatar会自动调用,无需额外操作。 3. **本地存储**:对于没有Gravatar账户或希望使用本地头像的用户,插件提供了本地存储...