logo
0
0
WeChat Login
init:初始化项目

PHP Upload

基于 OIDC 认证的 PHP 文件上传系统,支持多种文件类型上传,提供友好的用户界面。

功能特性

认证功能

  • OIDC 认证:使用 OpenID Connect 协议进行用户身份验证
  • 会话管理:基于 PHP Session 的登录状态管理
  • 用户信息展示:显示用户名称和邮箱
  • 安全登出:支持一键登出功能

文件上传功能

  • 支持的文件类型
    • 图片:JPEG、PNG、GIF、WebP
    • 文档:PDF、TXT、DOC、DOCX、XLS、XLSX
  • 文件大小限制:最大 10MB(可配置)
  • 安全验证
    • MIME 类型验证
    • 文件扩展名验证
    • 上传错误检查

存储结构

  • 目录格式usr/upload/{年}/{月}/
  • 文件命名{毫秒时间戳}.{扩展名}
  • 自动创建目录:按年月自动创建上传目录

用户界面

  • 拖拽上传:支持拖拽文件到上传区域
  • 粘贴上传:支持 Ctrl+V 粘贴图片
  • 图片预览:点击缩略图可查看大图
  • 文件列表:显示已上传文件,带图标或缩略图
  • 响应式设计:适配不同屏幕尺寸

配置说明

重要提示:为了保护敏感信息,项目中包含 config.php.example 示例配置文件。请勿将实际的 config.php 文件提交到版本控制系统。

首次部署配置步骤

  1. 复制示例配置文件:

    cp config.php.example config.php
  2. 编辑 config.php 文件,填入真实的配置信息

所有配置项均位于 config.php 文件中,主要包含三个配置区块:

网站配置

$siteConfig = [ "title" => "您的网站标题", // 网站标题 "login_title" => "登录 - 您的网站标题", // 登录页标题 "site_url" => "https://your-domain.com/", // 网站URL "app_name" => "您的应用名称", // 应用名称 "max_file_size" => 10 * 1024 * 1024, // 最大文件大小(字节) ];

文件上传配置

$uploadConfig = [ "max_file_size" => 10 * 1024 * 1024, // 最大文件大小(字节) "max_file_size_mb" => 10, // 最大文件大小(MB,用于显示) "upload_dir" => "usr/upload", // 上传目录 "allowed_types" => [ // 允许的MIME类型 "image/jpeg", "image/png", "image/gif", "image/webp", "application/pdf", "text/plain", "application/msword", "application/vnd.openxmlformats-officedocument.wordprocessingml.document", "application/vnd.ms-excel", "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", ], "allowed_extensions" => [ // 允许的文件扩展名 "jpg", "jpeg", "png", "gif", "webp", "pdf", "txt", "doc", "docx", "xls", "xlsx", ], "image_extensions" => [ // 图片扩展名(用于预览) "jpg", "jpeg", "png", "gif", "webp", ], "max_display_files" => 10, // 文件列表最大显示数量 ];

OIDC 配置

$oidcConfig = [ "issuer" => "https://your-oidc-provider.com/api/v1/authorize/your-client-id/oidc", // OIDC提供商URL "client_id" => "YOUR_CLIENT_ID", // 客户端ID(必填) "client_secret" => "YOUR_CLIENT_SECRET", // 客户端密钥(必填) "redirect_uri" => "https://your-domain.com/index.php", // 回调地址 "scope" => "openid profile email", // 权限范围 "response_type" => "code", // 响应类型 "state" => "random_state_string", // 状态参数 "timeout" => 10, // HTTP请求超时时间(秒) ];

目录结构

easy-images/ ├── .gitignore # Git忽略文件配置 ├── config.php.example # 配置文件示例(脱敏) ├── config.php # 配置文件(实际使用,需要从示例复制) ├── index.php # 主程序文件 ├── README.md # 说明文档 └── usr/ # 上传文件根目录 └── upload/ # 上传文件存储目录 └── {年}/ # 按年分类 └── {月}/ # 按月分类 └── {毫秒时间戳}.{扩展名}

使用方法

1. 部署

  1. 将文件上传到支持 PHP 的 Web 服务器
  2. 确保 usr/upload/ 目录可写
  3. 配置文件设置:
    • 复制 config.php.exampleconfig.php
    • 更新 siteConfig 中的网站信息
    • 更新 oidcConfig 中的 OIDC 认证参数(client_id 和 client_secret 必填)
    • 根据需要调整 uploadConfig 中的上传配置

2. 登录

访问系统首页,点击 "OIDC 登录" 按钮,跳转到 OIDC 提供商进行身份验证。

3. 上传文件

  • 方法一:点击上传区域选择文件
  • 方法二:拖拽文件到上传区域
  • 方法三:使用 Ctrl+V 粘贴图片

4. 查看文件

上传成功后,文件会显示在列表中,点击图片缩略图可查看大图。

安全建议

  1. 保护配置文件

    • 不要将 config.php 提交到版本控制系统
    • 确保配置文件无法通过 Web 直接访问
    • 使用 .gitignore 忽略敏感配置文件
  2. 修改默认配置:更新 config.php 中的 OIDC client_id 和 client_secret

  3. 使用 HTTPS:确保在生产环境使用 HTTPS 协议

  4. 设置正确的权限

    • 上传目录权限设置为 755 或更严格
    • 配置文件权限设置为 600(仅所有者可读写)
  5. 定期清理:定期清理不需要的上传文件

  6. 备份重要文件:定期备份上传的文件

  7. 随机生成 state:在生产环境中应动态生成 state 参数以防止 CSRF 攻击

技术栈

  • 后端:PHP 7.0+
  • 前端:HTML5、CSS3、JavaScript
  • 认证协议:OpenID Connect (OIDC)

配置文件说明

config.php 文件包含了系统的所有配置项,各配置区块的详细说明请参考文件内的注释。修改配置后无需重启服务,配置会立即生效。

常见问题

1. 文件上传失败

  • 检查 usr/upload/ 目录是否有写入权限
  • 检查文件大小是否超过限制(默认10MB)
  • 检查文件类型是否在允许列表中

2. OIDC 登录失败

  • 检查 config.php 中的 OIDC 配置是否正确
  • 检查 redirect_uri 是否与 OIDC 提供商处注册的地址一致
  • 检查网络连接是否正常

3. 图片预览不显示

  • 检查上传的文件是否为支持的图片格式
  • 检查文件路径是否正确
  • 检查浏览器控制台是否有错误信息

更新日志

v1.0

  • 初始版本发布
  • 支持 OIDC 认证
  • 支持文件上传
  • 支持拖拽和粘贴上传
  • 将配置项独立到 config.php 文件
  • 添加详细的配置注释
  • 支持自定义上传目录
  • 支持自定义显示文件数量
  • 支持自定义HTTP请求超时时间