Skip to content

高性能附件系统

概述

实现 Discuz 风格的强缓存机制,首次 PHP 鉴权后浏览器永久缓存,后续访问 0 PHP 消耗。

核心机制

缓存流程

首次访问: PHP鉴权 → 输出文件 → 写强缓存(10年)
后续访问: 浏览器/CDN直接读缓存

路由格式

GET /anon/attachment/{filetype}/{filename}/{imgtype?}

参数说明:

  • filetype: 文件类型(image/video/audio/document/other)
  • filename: 文件基础名(不含扩展名)
  • imgtype: 可选,图片转换格式(webp/jpg/jpeg/png)

图片处理功能

1. 格式转换

  • 支持 WebP/JPG/PNG/GIF/AVIF
  • 保持图片质量

2. 尺寸缩放

  • 等比缩放至指定尺寸内
  • 自动保持原图比例
  • 透明度完美支持

处理逻辑:

  • 无尺寸参数: 原图格式转换
  • 有尺寸参数: 等比缩放到指定尺寸内
  • 超出原图尺寸: 按原图输出
  • 小于原图尺寸: 等比缩小

示例URL

# 原始图片访问
/anon/attachment/image/a1b2c3d4e5f67890-1760000000

# WebP格式转换
/anon/attachment/image/a1b2c3d4e5f67890-1760000000/webp

# JPEG格式转换
/anon/attachment/image/a1b2c3d4e5f67890-1760000000/jpg

性能优势

  • CPU降低: 80-90%
  • 内存减少: 70-80%
  • 响应时间: 几十毫秒 → 接近0
  • 并发提升: 10倍+

Nginx配置

nginx
# 强缓存配置
location ~* ^/anon/attachment/ {
    expires max;
    add_header Cache-Control "public, immutable";
    etag on;
}

安全特性

  • 文件名安全过滤
  • MIME类型验证
  • 路径遍历防护
  • 数据库记录验证

主题静态资源

自动注册以下路由:

  • /theme/{theme}/assets/{file}
  • /theme/{theme}/css/{file}
  • /theme/{theme}/js/{file}

手动注册:

php
Anon_Http_StaticResource::registerRoute(
    '/theme/custom/{file}',
    $filePath,
    $mimeType,
    315360000
);

注意事项

  1. 更新文件需改变URL或清缓存
  2. 合理规划存储目录
  3. 定期备份文件和数据库
  4. 监控访问日志

这个高性能附件系统能够显著提升网站性能,特别适合高流量的CMS应用场景。

Released under the MIT License.