IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

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

    zwwooooo发表于 2024-12-14 03:42:43
    love 0

    我博客放在 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);

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

    》打赏 | Donation

    转载请注明转自: 《博客主机迁移到赤鱼网络,顺便写了个新的 Gravatar 头像缓存本地函数》



沪ICP备19023445号-2号
友情链接