博客主机迁移到赤鱼网络,顺便写了个新的 Gravatar 头像缓存本地函数

» 2024-12-14 WordPress 41条评论

我博客放在 kvmla 应该有 10 多年了,从 2011 年就开始使用,当时用法就多样性了,毕竟还是那个稍微宽松的年代。现在想想那时的博客环境、氛围是多么美好。敲了一篇自我感觉良好的文章就傻傻地每天都去关注 Google 的 PR 值,后来因为写了 WordPress 免费主题上架 WordPress.org 后,博客 PR 升到当时令个人博客羡慕的 7,没想到迎来了 7 也迎来了 Google 退出了厉害之国。

扯远了,感觉岁数上来了就容易感慨……

这次搬迁主要是换机房,其实还是同一个服务商的新虚拟服务器网站:赤鱼网络

服务商老板也认识 10 多年了,无条件信赖,直接开通。赤鱼网络提供亚太地区和北美地区,我肯定是选择亚太地区了,而且还是香港机房:

有兴趣的朋友可以去价格页面查看。至于评测,不是我专长,直接观察我博客即可,而我能使用 10 年以上的服务商是否值得信赖可想而知。

然后开始久违的网站搬迁,因为同服务器还有几个老博友的博客,所以搬迁起来其实还是要保持头脑清醒,毕竟现在已经把 linux 命令都忘得差不多了,安装配置过程时不时还要问一下旁边的 AI 同志。

在配置网站环境时,使用了最新的 Nginx 和 PHP8,我的博客还好,主要是保持更新。但其他几位博友由于常年未更新,蹦出好多 WordPress、PHP 的兼容性错误,于是顺手帮他们解决了。毕竟最近被新台机、Win11 虐习惯了,这点折腾没感觉。于是也遇到了我博客和 ashun 博客使用的《重新整理: willin简单头像缓存函数my_avatar()》(想想这文章也是14年前写的,真是时光飞逝,而博客就是台时光机,时不时让我享受时光旅行的快乐)出现网站卡死(超时)现象,应该是 PHP8 有些函数需要兼容处理,但懒得再去分析具体原因。于是动手重写了一个出来,目前运行稳定,有需要的朋友可以换下。

直接上代码:注意是 1. 直接缓存到 WordPress 的上传目录的 avatar_cache 目录(例如你的图片上传目录是 wp-content/uploads,那么就会在此目录下面新建一个 avatar_cache 目录)2. 是博客所在服务器本身能访问 Gravatar 头像,不然就没意义了

/**
 * 自定义头像缓存功能 by zwwooooo
 *
 * @param string $avatar 生成的头像 HTML
 * @param mixed  $id_or_email 用户ID或邮箱
 * @param int    $size 头像大小
 * @param string $default 默认头像URL
 * @param string $alt 头像alt属性
 * @return string 修改后的头像HTML
 */
function zfunc_custom_cached_avatar($avatar, $id_or_email, $size, $default, $alt) {
    // 从原始头像HTML提取URL
    if (preg_match('/src=["\\\']([^"\\\']+)["\\\']/', $avatar, $matches)) {
        $avatar_url = $matches[1];
        
        // 本地缓存目录
        $upload_dir = wp_upload_dir();
        $cache_dir = $upload_dir['basedir'] . '/avatar_cache/';
        $cache_url = $upload_dir['baseurl'] . '/avatar_cache/';

        // 确保目录存在
        if (!file_exists($cache_dir)) {
            wp_mkdir_p($cache_dir);
        }

        // 生成缓存文件名
        $hash = md5($avatar_url);
        $cached_file = $cache_dir . $hash . '-' . $size . '.jpg';
        $cached_url = $cache_url . $hash . '-' . $size . '.jpg';

        // 如果缓存文件不存在或过期(如30天),下载头像到本地
        if (!file_exists($cached_file) || filemtime($cached_file) < time() - 30 * DAY_IN_SECONDS) {
            $response = wp_remote_get($avatar_url);
            if (is_array($response) && !is_wp_error($response)) {
                $body = wp_remote_retrieve_body($response);
                file_put_contents($cached_file, $body);
            }
        }

        // 如果缓存文件存在,使用本地缓存
        if (file_exists($cached_file)) {
            $avatar = '<img class="avatar avatar-' . $size . ' photo" src="' . esc_url($cached_url) . '" alt="' . esc_attr($alt) . '" width="' . $size . '" height="' . $size . '" />';
        }
    }

    return $avatar;
}
// 添加 get_avatar 过滤器
add_filter('get_avatar', 'zfunc_custom_cached_avatar', 10, 5);

假如 + 如果真的有朋友拿去用,那么有什么问题可以在评论区反馈。

zww
or
oooo

“博客主机迁移到赤鱼网络,顺便写了个新的 Gravatar 头像缓存本地函数”有41条评论

  1. 刘郎 says:

    这个价格说句实在话 都可以在腾讯阿里买了 不过就如你说的 "服务商老板也认识 10 多年了,无条件信赖,直接开通……"

    1. zwwooooo says:

      @刘郎 其实这个是适合不备案和外贸网站用的。国内垄断带宽真是太贵。

  2. ACEVS says:

    pr7 牛。我当时才pr4.

    1. zwwooooo says:

      @ACEVS 当时博客 PR3、4 的非常多

  3. 连续在一家放十年,还真是厉害

    1. zwwooooo says:

      @白熊阿丸 对啊,其实2011年就认识了

  4. Google 的 PR 值到7都是牛逼网站了,我那个时候最高到5,我觉得对我来说已经相对了不起了。

    1. zwwooooo says:

      @威言威语 PR最主要的就是别站有你博客的链接,这个多的话,权重就高。

  5. 别的不说,这图片终于不是叉叉了。

    1. zwwooooo says:

      @不亦乐乎 好像福建那边无法访问,任何没有备案的都直接掰掉

  6. zmj says:

    试一下新的头像缓存

    1. zwwooooo says:

      @zmj 这个版本比较简单化

  7. 预算超过我的预期 当然一分钱一分货 :lol:

    1. zwwooooo says:

      @灰常记忆 其实还好,不过国内经常有一些针对活动的优惠主机,所以会觉好像有点贵。如果正常去ali、tx那里去购买是很贵的——加上考虑到带宽的话就是超贵。

  8. Daley Lu says:

    阿里云的199一年,用得蛮爽的,现在备案也容易。

    1. zwwooooo says:

      @Daley Lu 嗯,这个得看业务,我这种老博客没啥业务,所以放在比较随意的地方感觉比较舒服,非常主观。

  9. 大致 says:

    我当时对更新这件事的解决方案是,WP这边只负责取。然后在服务器上写了一个shell加到crontab里,定期删旧头像。好处是没人访问的页面,空间就省下来了……

    1. zwwooooo says:

      @大致 其实这点头像不占什么空间,除非是有大量评论的网站

      1. 大致 says:

        @zwwooooo 哦对还有一个原因是我没在get_gravatar的时候进行获取和检查,而是用wp_schedule_event起了个任务,然后又看option表里的这条记录非常不顺眼。总之就是闲的。

  10. You&FM says:

    大佬真牛。这主机推广做得不行,在NS都看不到。

    1. zwwooooo says:

      纯人情自己博客推一下给有需要的老朋友而已,至于 NS,我都不知道什么是 NS,不在意。

  11. 佐仔 says:

    最令我佩服的是你今年博客的更新频率...几乎每个月都有更新,不像我,一年就几篇水文。

    1. zwwooooo says:

      @佐仔 好吧,其实是隔了9年的新台机的功劳 :cool:

      1. axiu says:

        @zwwooooo 懂了,台机自动写的

  12. ip-detail says:

    厉害了,坚持下来就不容易,厉害
    好多好多年没见php了,,,哈哈哈

    1. zwwooooo says:

      @ip-detail php一直被人弊病但它还活得好好的 :mrgreen:

  13. 秦大叔 says:

    这个价格真心是用不起或者说舍不得,现阶段每年花大几百在没任何回报的个人博客上我是真做不到了。

    1. zwwooooo says:

      @秦大叔 这个就看你当博客是什么了,例如比起钓具,博客这点开支啥也不是

  14. Alex Gao says:

    我还在用十年前的搬瓦工传家宝,一年200多RMB,感觉也找不到更便宜的了,但愿能一直续下去

    1. zwwooooo says:

      @Alex Gao 搬瓦工便宜的现在很难抢了,也懒得去抢,所以抢到的就不要放弃。

  15. EEE.ME says:

    你这主机好快啊,比我腾讯云轻量香港还快感觉,线路不错

    1. zwwooooo says:

      @EEE.ME 还好吧,都是香港

    2. Huilang says:

      @EEE.ME 你的上了CDN不是起飞了吗

      1. EEE.ME says:

        @Huilang 并没有啊...有时候高峰期打开还是慢,我是挂了VPN才快

  16. 沉沦 says:

    为了 gravatar 头像尝试换了好几个镜像源地址,都不是很完美。正好我用的服务器也是香港的,试试这个直接缓存头像的方法。

    1. zwwooooo says:

      @沉沦 嗯,可以试试,本博一直用这种方式

  17. 4585_5360 says:

    所以 Gravatar 也已经被墙了么?一个头像服务也要墙,真是莫名其妙……

    冒出来留言是因为自己千年不遇地改了头像,然后想起 Z 叔前几天好像写了Gravatar 相关的一篇技术文。所以只要接下来的三十天里每天过来踩点就能知道Z叔的头像缓存是什么时候更新啦(但这么做的意义是?

    1. zwwooooo says:

      @4585_5360 好像Google撤离后不久就墙了啊,反正墙了起码10年以上了吧

    2. zwwooooo says:

      @4585_5360 我的缓存时间是30天,但还是可以经常来踩点,最简单就是我把你的头像缓存文件删除就会变成新的,哈

  18. ejsoon says:

    倒是首次聽說赤魚。

  19. kn007 says:

    以前可以追求的东西多,总感觉。现在网速快了后,都不考虑那么多了。

发表评论

昵称 *

网址

B em del U Link Code Quote