🖼️ 图片代理与缓存系统
这是一个用于代理和缓存远程图片的系统,主要功能包括:
- 🔄 图片代理:通过URL参数获取远程图片并返回
- 💾 图片缓存:自动缓存已访问的图片,提高访问速度
- 🔒 防盗链支持:支持设置Referer,解决部分网站的防盗链问题
📝 项目说明:本项目是基于
img.php
的二次开发版本,增加了更多功能和安全性改进。
🚀 使用方法
在浏览器中访问:
/index.php?url=https://example.com/image.jpg
使用伪静态后的访问方式:
/image/https://example.com/image.jpg
⚙️ 伪静态配置
Apache 配置
在网站根目录创建或编辑 .htaccess
文件:
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 配置
在网站配置文件中添加:
location / {
# 图片代理伪静态规则
rewrite ^/image/(.*)$ /index.php?url=$1 last;
# 禁止直接访问 index.php
location = /index.php {
return 403;
}
}
📋 参数说明
- url: 必填参数,需要代理的远程图片URL
💡 技术特点
- 🖼️ 支持多种图片格式(GIF、JPEG、PNG、WebP、BMP、SVG)
- 📁 自动创建缓存目录结构
- 🔐 支持HTTPS图片获取
- 🔄 自动处理重定向
- ⏱️ 合理的超时设置
- 📝 完善的错误处理和日志记录
- ✅ 图片数据验证
- ⏳ 缓存过期控制
🛡️ 安全特性
- 🔍 输入验证:确保URL以http或https开头
- 📝 文件类型验证:只允许特定图片格式
- 🔒 目录权限控制:缓存目录权限设置
- 🔐 SSL验证:支持HTTPS图片获取
- ✅ 图片数据验证:验证下载的图片数据是否有效
- 📝 错误处理:完善的错误处理和日志记录
- 🚫 域名白名单:支持配置允许访问的域名列表,防止服务被滥用
⚡ 性能优化
- 💾 图片缓存机制:24小时缓存
- ⏱️ 合理的超时设置
- 💪 内存使用优化
- 🔄 并发处理能力
- 🌐 缓存控制头:支持浏览器缓存
📁 文件说明
index.php
: 入口文件,处理请求ImageProxy.php
: 核心类文件,实现图片代理和缓存功能img.php
: 原始项目文件,本项目基于此进行二次开发cache/
: 缓存目录cache/logs/
: 日志目录
⚙️ 配置说明
可以通过修改index.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
⚠️ 注意事项
- 💾 确保服务器有足够的磁盘空间用于缓存
- 🔒 确保缓存目录有写入权限
- 🧹 建议定期清理缓存文件
- 📝 日志系统会自动管理日志文件大小和数量,无需手动干预
📄 许可证
本项目采用 MIT License with Attribution Requirement 许可证。详情请查看 LICENSE 文件。
主要条款:
- ✅ 允许非商业用途自由使用
- 🔒 商业用途需要获得授权
- 📝 使用时必须注明原作者
- 🔗 商业使用时必须包含原仓库链接
📧 联系方式
如需商业使用授权,请联系仓库所有者。
Description
Languages
PHP
100%