# php-cam **Repository Path**: zesso/php-cam ## Basic Information - **Project Name**: php-cam - **Description**: 一个轻量的 PHP 拍照录像上传系统。无需安装 App,手机扫码即可使用浏览器原生相机进行高清拍照和视频录制,文件自动上传到服务器统一管理。 - **Primary Language**: PHP - **License**: GPL-3.0 - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-08-26 - **Last Updated**: 2026-09-02 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 📸 随身拍照助手 > 手机扫码 → 拍照 / 录像 → 自动上传至服务器 一个轻量的 PHP 拍照录像上传系统。无需安装 App,手机扫码即可使用浏览器原生相机进行高清拍照和视频录制,文件自动上传到服务器统一管理。 ## ✨ 功能特性 - **📱 扫码即用** — 生成二维码,手机扫码直接打开相机,无需安装任何应用 - **📷 高清拍照** — 自动协商最高分辨率(最高支持 4K),JPEG 格式上传 - **🎬 视频录制** — 基于 MediaRecorder API 录制视频,服务器端自动转码为 MP4 - **🖼️ 文件管理** — 登录后台查看所有文件,支持分页、预览、批量删除 - **🎨 青蓝风格** — 年轻化的青蓝色 UI 设计,渐变背景 + 毛玻璃效果 - **🔒 安全防护** — 密码登录、路径遍历防护、文件类型白名单 - **📱 响应式** — 完美适配手机 / 平板 / 桌面浏览器 ## 📂 项目结构 ``` php/ ├── index.php # 主入口(二维码展示 + 相机拍照/录像) ├── view.php # 后台管理(登录、文件列表、预览、删除) ├── js/ │ └── qrcode.min.js # 二维码生成库 ├── upload/ # 上传文件存储目录 ├── .htaccess # Apache 配置 └── nginx.htaccess # Nginx 配置 ``` ## 🚀 快速开始 ### 环境要求 | 依赖 | 要求 | 说明 | |------|------|------| | PHP | ≥ 7.4 | 需开启 session 扩展 | | Web 服务器 | Apache / Nginx | 支持 URL 重写 | | ffmpeg | 可选 | 安装后视频自动转码为 MP4,未安装则保留 webm | | 浏览器 | Chrome / Edge / Safari | 需支持 getUserMedia 和 MediaRecorder | ### 安装部署 1. **将 `php/` 目录部署到 Web 服务器** ``` # 示例:复制到网站根目录 php/ → /var/www/html/picture-tool/ ``` 2. **确保 `upload/` 目录可写** ```bash chmod 755 upload/ chown www-data:www-data upload/ ``` 3. **(推荐)安装 ffmpeg 实现视频转码** ```bash # Windows: 下载 ffmpeg 放入系统 PATH # Linux: apt install ffmpeg # macOS: brew install ffmpeg ``` 4. **访问页面** 打开 `http://你的域名/path/to/php/` 即可看到二维码页面。 5. **管理后台** 访问 `http://你的域名/path/to/php/view.php`,输入密码 `888888` 登录。 > ⚠️ **请及时修改默认密码**:编辑 `view.php` 中的 `$pwd = '888888'`。 ## 📖 使用说明 ### 拍照 / 录像流程 ``` 电脑打开 index.php → 显示二维码 → 手机扫码 → 进入相机模式 ├─ 📷 拍照模式:点击拍照按钮 → 自动上传 JPEG └─ 🎬 录像模式:点击录制按钮 → 自动上传 MP4 ``` ### 文件管理 - **登录** → `view.php` → 输入密码 - **浏览** → 网格视图展示所有文件,支持分页 - **预览** → 点击图片放大 / 点击视频播放 - **删除** → 勾选文件 → 批量删除(支持全选) ### 文件命名规则 所有上传文件按时间命名,格式:`YYYYMMDD_HHMMSS_mmm.ext` ``` 示例:20260716_001530_843.jpg → 2026年7月16日 00:15:30.843 拍摄的照片 20260716_001545_120.mp4 → 2026年7月16日 00:15:45.120 录制的视频 ``` ### 视频转码说明 | 场景 | 录制格式 | 最终格式 | 说明 | |------|---------|---------|------| | 已安装 ffmpeg | webm | **mp4** | 服务器自动转码(H.264 + AAC),转码后删除原 webm | | 未安装 ffmpeg | webm | webm | 保留原始 webm 格式,浏览器可直接播放 | ## 🔧 配置项 编辑 `index.php` 和 `view.php` 顶部变量: | 配置 | 位置 | 默认值 | 说明 | |------|------|--------|------| | 上传目录 | `$uploadFolder` | `'upload/'` | 文件存储路径 | | 管理密码 | `view.php` → `$pwd` | `'888888'` | 后台登录密码 | | 时区 | `date_default_timezone_set` | `'Asia/Shanghai'` | 时间戳时区 | | 录像时长上限 | `index.php` JS | 5 分钟 | 录制到达上限自动停止 | ## 🌐 HTTPS 说明 浏览器的 `getUserMedia` API **要求 HTTPS 环境**(`localhost` 除外)。请确保: - 本地测试:使用 `localhost` 或 `127.0.0.1` 访问 - 线上部署:配置 SSL 证书,通过 `https://` 访问 ## 📋 技术栈 - **后端**:PHP ≥ 7.4($_FILES 上传、$_SESSION 会话、scandir 文件遍历) - **前端**:原生 HTML / CSS / JavaScript(无框架依赖) - **二维码**:qrcode.min.js - **拍照**:getUserMedia + Canvas + toBlob - **录像**:MediaRecorder API - **转码**:ffmpeg(libx264 + aac + faststart) - **UI**:CSS 变量 + Flex/Grid 布局 + 渐变 + 毛玻璃 ## 👨‍💻 开发者 - **抖音**:[@NCYXF](https://www.douyin.com/user/NCYXF) - **GitHub**:[@huwangkeji](https://github.com/huwangkeji)