# 图片代理与缓存系统 这是一个用于代理和缓存远程图片的系统,主要功能包括: 1. 图片代理:通过URL参数获取远程图片并返回 2. 图片缓存:自动缓存已访问的图片,提高访问速度 3. 防盗链支持:支持设置Referer,解决部分网站的防盗链问题 ## 使用方法 在浏览器中访问: ``` /index.php?url=https://example.com/image.jpg ``` 使用伪静态后的访问方式: ``` /image/https://example.com/image.jpg ``` ## 参数说明 - url: 必填参数,需要代理的远程图片URL ## 技术特点 - 支持多种图片格式(GIF、JPEG、PNG、WebP、BMP、SVG) - 自动创建缓存目录结构 - 支持HTTPS图片获取 - 自动处理重定向 - 合理的超时设置 - 完善的错误处理和日志记录 - 图片数据验证 - 缓存过期控制 ## 安全特性 - 输入验证:确保URL以http或https开头 - 文件类型验证:只允许特定图片格式 - 目录权限控制:缓存目录权限设置 - SSL验证:支持HTTPS图片获取 - 图片数据验证:验证下载的图片数据是否有效 - 错误处理:完善的错误处理和日志记录 - 域名白名单:支持配置允许访问的域名列表,防止服务被滥用 ## 性能优化 - 图片缓存机制:24小时缓存 - 合理的超时设置 - 内存使用优化 - 并发处理能力 - 缓存控制头:支持浏览器缓存 ## 文件说明 - `index.php`: 入口文件,处理请求 - `ImageProxy.php`: 核心类文件,实现图片代理和缓存功能 - `cache/`: 缓存目录 - `cache/logs/`: 日志目录 ## 配置说明 可以通过修改`index.php`中的配置参数来调整系统行为: ```php $proxy = new ImageProxy([ 'cache_dir' => 'cache', // 缓存目录 'timeout' => 30, // 请求超时时间(秒) 'connect_timeout' => 15, // 连接超时时间(秒) 'max_redirects' => 5, // 最大重定向次数 'allowed_domains' => [ // 允许访问的域名白名单 'example.com', 'trusted-site.com', 'images.example.org' // 添加更多允许的域名 ] ]); ``` 白名单配置说明: - 如果 `allowed_domains` 为空数组,则允许访问所有域名 - 支持精确域名匹配(如 `example.com`) - 支持子域名匹配(如 `images.example.com` 会匹配 `example.com`) - 域名比较不区分大小写 - 不在白名单中的域名请求将被拒绝,并记录到日志中 ## 错误处理 系统会自动记录所有错误到日志文件中,日志文件位于`cache/logs/`目录下,按日期命名。系统实现了自动日志轮转功能: - 单个日志文件大小限制:10MB - 日志文件保留时间:30天 - 最大保留日志文件数:10个 - 自动清理过期日志 - 自动轮转超大日志文件 日志文件命名规则: - 当前日志:`YYYY-MM-DD.log` - 轮转后的日志:`YYYY-MM-DD.log.YYYY-MM-DD_HH-mm-ss` ## 注意事项 1. 确保服务器有足够的磁盘空间用于缓存 2. 确保缓存目录有写入权限 3. 建议定期清理缓存文件 4. 日志系统会自动管理日志文件大小和数量,无需手动干预 ## 伪静态配置 ### Apache 配置 在网站根目录创建或编辑 `.htaccess` 文件: ```apache RewriteEngine On RewriteBase / # 图片代理伪静态规则 RewriteRule ^image/(.*)$ index.php?url=$1 [L,QSA] # 禁止直接访问 index.php RewriteCond %{THE_REQUEST} ^[A-Z]{3,}\s/+index\.php [NC] RewriteRule ^ - [F] ``` ### Nginx 配置 在网站配置文件中添加: ```nginx location / { # 图片代理伪静态规则 rewrite ^/image/(.*)$ /index.php?url=$1 last; # 禁止直接访问 index.php location = /index.php { return 403; } } ```