From 6919ecb650d30323ff7cae6483ecf39682c68844 Mon Sep 17 00:00:00 2001 From: Snowz <372492339@qq.com> Date: Wed, 28 May 2025 02:11:02 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=96=B0README=E6=96=87=E6=A1=A3?= =?UTF-8?q?=EF=BC=8C=E5=A2=9E=E5=8A=A0=E9=A1=B9=E7=9B=AE=E8=AF=B4=E6=98=8E?= =?UTF-8?q?=E3=80=81=E4=BD=BF=E7=94=A8=E6=96=B9=E6=B3=95=E3=80=81=E4=BC=AA?= =?UTF-8?q?=E9=9D=99=E6=80=81=E9=85=8D=E7=BD=AE=E3=80=81=E5=8F=82=E6=95=B0?= =?UTF-8?q?=E8=AF=B4=E6=98=8E=E3=80=81=E5=AE=89=E5=85=A8=E7=89=B9=E6=80=A7?= =?UTF-8?q?=E3=80=81=E6=80=A7=E8=83=BD=E4=BC=98=E5=8C=96=E3=80=81=E6=96=87?= =?UTF-8?q?=E4=BB=B6=E8=AF=B4=E6=98=8E=E3=80=81=E9=94=99=E8=AF=AF=E5=A4=84?= =?UTF-8?q?=E7=90=86=E5=92=8C=E6=B3=A8=E6=84=8F=E4=BA=8B=E9=A1=B9=E9=83=A8?= =?UTF-8?q?=E5=88=86=EF=BC=8C=E4=BD=BF=E7=94=A8=E5=9B=BE=E6=A0=87=E5=A2=9E?= =?UTF-8?q?=E5=BC=BA=E5=8F=AF=E8=AF=BB=E6=80=A7=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- LICENSE | 31 +++++++++ README.md | 205 +++++++++++++++++++++++++++++------------------------- 2 files changed, 142 insertions(+), 94 deletions(-) create mode 100644 LICENSE diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..a935fb4 --- /dev/null +++ b/LICENSE @@ -0,0 +1,31 @@ +MIT License with Attribution Requirement + +Copyright (c) 2025 ImageProxy SnowZ + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software for non-commercial purposes, subject to the following conditions: + +1. The above copyright notice and this permission notice shall be included in all + copies or substantial portions of the Software. + +2. Any commercial use of this Software must be explicitly authorized by the + copyright holder and must include proper attribution to the original author. + +3. The Software may be used for commercial purposes only if: + a) Written permission is obtained from the copyright holder + b) The original author is properly credited + c) A link to the original repository is included in the project documentation + +4. The Software may be used for non-commercial purposes without explicit + permission, but must still include proper attribution. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +For commercial use inquiries, please contact the copyright holder. \ No newline at end of file diff --git a/README.md b/README.md index ef25751..3fdb452 100644 --- a/README.md +++ b/README.md @@ -1,12 +1,14 @@ -# 图片代理与缓存系统 +# 🖼️ 图片代理与缓存系统 这是一个用于代理和缓存远程图片的系统,主要功能包括: -1. 图片代理:通过URL参数获取远程图片并返回 -2. 图片缓存:自动缓存已访问的图片,提高访问速度 -3. 防盗链支持:支持设置Referer,解决部分网站的防盗链问题 +1. 🔄 图片代理:通过URL参数获取远程图片并返回 +2. 💾 图片缓存:自动缓存已访问的图片,提高访问速度 +3. 🔒 防盗链支持:支持设置Referer,解决部分网站的防盗链问题 -## 使用方法 +> 📝 项目说明:本项目是基于 `img.php` 的二次开发版本,增加了更多功能和安全性改进。 + +## 🚀 使用方法 在浏览器中访问: ``` @@ -18,94 +20,7 @@ /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` 文件: @@ -135,4 +50,106 @@ location / { return 403; } } -``` \ No newline at end of file +``` + +## 📋 参数说明 + +- 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`中的配置参数来调整系统行为: + +```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. 📝 日志系统会自动管理日志文件大小和数量,无需手动干预 + +## 📄 许可证 + +本项目采用 MIT License with Attribution Requirement 许可证。详情请查看 [LICENSE](LICENSE) 文件。 + +主要条款: +- ✅ 允许非商业用途自由使用 +- 🔒 商业用途需要获得授权 +- 📝 使用时必须注明原作者 +- 🔗 商业使用时必须包含原仓库链接 + +## 📧 联系方式 + +如需商业使用授权,请联系仓库所有者。 \ No newline at end of file