Driftbottle 是一个基于 Web 技术的匿名社交漂流瓶系统,将传统的"漂流瓶"概念数字化,为用户提供一个安全、私密的情感分享平台。
| 🎨 用户体验 | 🔒 安全可靠 | 🚀 高性能 | 💎 丰富功能 |
|---|---|---|---|
| 现代化 UI 设计 | 多重安全防护 | 轻量级架构 | 语音漂流瓶 |
| 响应式布局 | XSS/SQL 注入防护 | 优化数据库查询 | 评论回复系统 |
| 流畅交互体验 | CSRF 令牌验证 | 缓存机制 | VIP 会员系统 |
| 个性化设置 | 会话安全保护 | 异步处理 | 用户等级系统 |
- 🔐 隐私优先 - 支持匿名发送,IP 地址保护,VIP 用户完全隐藏
- 💬 深度互动 - 二级评论回复系统,让交流更有层次
- 🎤 多媒体支持 - 文字与语音双重表达方式,传递更丰富的情感
- ⚡ 轻量高效 - 纯 PHP + MySQL 架构,无需复杂依赖
- 🛡️ 安全可靠 - 多重安全机制,保护用户数据与隐私
- 📱 响应式设计 - 完美适配桌面端与移动端
- 🎯 用户成长 - 经验值等级系统,让每一次互动都有意义
- 💎 会员特权 - VIP 系统提供更多功能与权限
- 🚨 内容审核 - 完善的举报系统,支持屏蔽、删除等操作,维护社区环境
漂流瓶系统采用现代化的 Web 技术栈,构建了一个轻量级但功能丰富的社交平台。系统设计遵循简洁、安全、高效的原则,为用户提供流畅的交互体验。
- 🌊 数字海洋 - 将互联网比作海洋,每个漂流瓶都是用户情感的载体
- 🔗 情感连接 - 通过随机匹配,让陌生人之间产生有意义的交流
- 🛡️ 隐私保护 - 在开放交流的同时,最大程度保护用户隐私
- 📈 持续成长 - 通过等级系统和积分机制,激励用户持续参与
- 前后端分离 - 清晰的 API 设计,便于扩展和维护
- 模块化架构 - 功能模块独立,易于定制和二次开发
- 安全第一 - 从输入验证到输出过滤,全方位安全防护
- 性能优化 - 数据库索引优化,查询性能提升
- 注册与登录:快速创建账户,安全登录。
- 个人资料:管理个人信息,设置个性签名。
- 漂流瓶操作:
- 扔瓶子:写下心情或想法,投入大海。
- 语音漂流瓶:🎤 录制语音消息,发布语音漂流瓶(支持录音、播放、时长显示)。
- 捡瓶子:随机捡起他人的漂流瓶(支持文字和语音两种类型)。
- 互动:评论、点赞漂流瓶,支持二级评论回复。
- 记录:查看自己扔出和捡到的瓶子(支持语音播放和评论查看)。
- 评论管理:评论后可以选择"仅评论"或"评论并丢回大海"。
- 性别标识:男性漂流瓶 (蓝色 🔵),女性漂流瓶 (粉色 🌸)。
- 匿名选项:可选择匿名发送,保护隐私。
- VIP 会员:购买 VIP 享受更多特权(如:更多扔/捡瓶次数、专属标识)。
- 签到系统:每日签到获取积分,连续签到有额外奖励。
- 积分系统:通过多种方式赚取积分,兑换系统特权。
- 用户等级系统:🎯 通过发漂流瓶、捡漂流瓶、评论等操作获得经验值,自动升级等级,在个人主页显示等级和经验条。
- IP 保护:VIP 用户 IP 地址完全隐藏,普通用户部分隐藏。
- 消息中心:接收系统通知和互动消息,支持点击标记已读。
- 防 XSS 攻击:严格的输入过滤和内容安全策略 (CSP)。
- 防 SQL 注入:使用参数化查询和输入验证。
- 防 CSRF 攻击:实施 CSRF 令牌验证。
- 会话安全:防止会话固定攻击。
- 数据验证:前后端双重数据校验。
- 用户管理:查看、封禁/解封用户,重置密码,设置用户经验值和等级。
- 内容管理:管理漂流瓶、评论,发布公告。
- 系统设置:配置基础参数、积分规则、经验值规则、VIP 特权、安全策略、备案信息、版权信息。
- 数据统计:监控用户活跃度、漂流瓶数据、系统运行状态。
| 类型 | 技术 |
|---|---|
| 前端 | HTML, CSS, JavaScript |
| 后端 | PHP 7.3+ |
| 数据库 | MySQL 5.6+ |
| Web 服务器 | Apache/Nginx |
系统主要数据表如下:
| 表名 | 描述 |
|---|---|
users |
用户信息 |
bottles |
漂流瓶内容(支持文字和语音两种类型) |
comments |
评论数据(支持二级回复) |
likes |
点赞记录 |
pick_records |
捡瓶记录 |
checkins |
签到记录 |
points_history |
积分历史 |
experience_history |
经验值历史 |
announcements |
系统公告 |
admin_roles |
管理员角色 |
admins |
管理员账号 |
admin_login_logs |
管理员登录日志 |
admin_operation_logs |
管理员操作日志 |
daily_limits |
用户每日限制 |
messages |
消息中心 |
system_settings |
系统配置 |
- PHP: 7.3 或更高版本 (推荐 7.4 / 8.0)
- MySQL: 5.6 或更高版本 / MariaDB 10.3+
- Web 服务器: Apache 2.4+ / Nginx 1.18+
- PHP 扩展:
mysqli,mbstring,json
-
获取代码
# 克隆仓库 git clone https://github.com/kggzs/Driftbottle.git /path/to/web/driftbottle # 或者下载 ZIP 包解压
-
配置 Web 服务器
- 将网站根目录指向
/path/to/web/driftbottle。 - (可选) 配置 URL 重写规则(如果需要伪静态,但当前版本已不推荐)。
- 将网站根目录指向
-
数据库设置
- 创建数据库和用户:
CREATE DATABASE driftbottle CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; CREATE USER 'driftbottle_user'@'localhost' IDENTIFIED BY 'your_secure_password'; GRANT ALL PRIVILEGES ON driftbottle.* TO 'driftbottle_user'@'localhost'; FLUSH PRIVILEGES;
- 导入数据库结构:
mysql -u driftbottle_user -p driftbottle < driftbottle.sql - 配置数据库连接:
- 编辑
includes/config.php文件,修改以下常量:define('DB_HOST', 'localhost'); define('DB_USER', 'driftbottle_user'); define('DB_PASS', 'your_secure_password'); define('DB_NAME', 'driftbottle');
- 编辑
- 创建数据库和用户:
-
设置目录权限
- 确保 Web 服务器用户对以下目录有写入权限:
# 根据您的服务器环境调整命令 chmod -R 755 /path/to/web/driftbottle chmod -R 777 /path/to/web/driftbottle/assets/images/uploads # 如果有上传功能 chmod -R 777 /path/to/web/driftbottle/uploads/audio # 语音文件存储目录 chmod -R 777 /path/to/web/driftbottle/logs
- 确保 Web 服务器用户对以下目录有写入权限:
-
IP 地址定位配置
- 项目使用高德地图 IP 定位 API 进行 IP 地址归属地查询。
- API Key 可在后台管理系统 → 系统设置 → 基本设置中配置。
- 首次安装时,API Key 已包含在数据库初始化脚本中,无需额外配置。
-
访问测试
- 打开浏览器访问您的网站地址。
- 默认管理员账号:
admin/admin - 重要: 首次登录后请务必修改管理员密码!
- 安全提示:
admin/test_admin.php和admin/reset_password.php是密码重置工具,生产环境请务必删除!
- 项目包含一些用于更新早期数据库结构的 SQL 脚本(位于
sql/目录或根目录)。 - 如果您是从旧版本升级,请按需执行这些脚本:
mysql -u driftbottle_user -p driftbottle < sql/update_script_name.sql - 主要更新脚本包括:
update_user_status.sql: 添加用户封禁状态。update_admin_roles.sql: 更新管理员角色权限。system_settings.sql: 初始化或更新系统设置。vip_points_settings.sql: VIP 和积分相关配置。update_announcements.sql: 公告系统相关更新。add_voice_bottle_fields.sql: 添加语音漂流瓶功能(bottle_type、audio_file、audio_duration字段)。add_user_level_system.sql: 添加用户等级系统(experience、level字段和experience_history表)。- 注意: v1.3.0 版本已包含IP追踪功能,
add_user_ip_tracking.sql已合并到主数据库文件driftbottle.sql中,无需单独执行。
-
页面显示空白或 500 错误?
- 检查 PHP 错误日志 (
logs/php_errors.log或服务器配置的日志路径)。 - 确认 PHP 版本和所需扩展已安装并启用。
- 检查文件和目录权限。
- 检查 PHP 错误日志 (
-
无法连接数据库?
- 仔细核对
includes/config.php中的数据库连接信息。 - 确保 MySQL 服务正在运行。
- 检查数据库用户权限是否正确授予。
- 仔细核对
-
图片上传失败?
- 检查
assets/images/uploads(或实际上传目录) 是否存在且具有写入权限。 - 检查 PHP 配置中的
upload_max_filesize和post_max_size限制。
- 检查
-
语音功能无法使用?
- 确保
uploads/audio/目录存在且具有写入权限(755 或 777)。 - 检查是否已执行
sql/add_voice_bottle_fields.sql数据库更新脚本。 - 语音录制功能需要 HTTPS 环境(生产环境要求)。
- 首次使用需要用户授权麦克风权限。
- 检查浏览器是否支持
MediaRecorder API(Chrome、Firefox、Edge 等现代浏览器)。
- 确保
-
IP 地址归属地显示不正确?
- 项目使用高德地图 IP 定位 API,需要确保服务器能够访问外网。
- 检查后台管理系统 → 系统设置 → 基本设置中的"高德地图API Key"是否配置正确且有效。
- 查看 PHP 错误日志确认是否有网络请求失败的错误。
-
API 调用失败或无响应?
- 确认 API 请求格式为
api.php?action=your_action。 - 打开浏览器开发者工具 (F12),检查“网络 (Network)”和“控制台 (Console)”选项卡是否有错误信息。
- 检查服务器端的 PHP 或 Web 服务器错误日志。
- 尝试清除浏览器缓存。
- 确认 API 请求格式为
系统 API 通过 api.php 文件提供服务,使用 action GET 参数指定调用的端点。
调用格式:
GET /api.php?action=endpoint_name¶m1=value1&...
POST /api.php?action=endpoint_name (with POST data)
主要端点示例:
check_auth: 检查登录状态login: 用户登录register: 用户注册logout: 用户登出create_bottle: 创建漂流瓶(支持文字和语音两种类型)upload_audio: 上传语音文件(用于语音漂流瓶)pick_bottle: 捡起漂流瓶(自动识别文字/语音类型)comment_bottle: 评论漂流瓶(支持回复,支持仅评论或评论并丢回大海)like_bottle: 点赞漂流瓶user_bottles: 获取用户扔出的瓶子user_picked_bottles: 获取用户捡到的瓶子get_announcements: 获取系统公告get_basic_settings: 获取系统基本配置get_experience_config: 获取经验值规则配置get_user_level_info: 获取用户等级信息- ... (更多接口请参考
api.php源码)
driftbottle/
├── admin/ # 管理员后台模块
│ ├── includes/ # 后台公共文件 (header, footer)
│ ├── *.php # 各管理页面 (用户、瓶子、评论等)
│ └── ...
├── assets/ # 静态资源 (CSS, JS, Images, Fonts)
│ ├── css/
│ ├── js/
│ │ ├── app.js # 主要前端逻辑
│ │ └── utils.js # 工具函数
│ ├── images/
│ └── fonts/
├── docs/ # 文档目录
│ ├── features/ # 功能文档
│ │ ├── voice-bottle.md # 语音漂流瓶功能
│ │ └── vip-system.md # VIP 会员系统
│ ├── installation.md # 安装与部署指南
│ ├── upgrade.md # 升级指南
│ └── troubleshooting.md # 故障排除文档
├── includes/ # 后端核心类库和配置文件
│ ├── config.php # 数据库和系统配置
│ ├── user.php # 用户类
│ ├── bottle.php # 漂流瓶类
│ ├── security.php # 安全处理类
│ ├── validator.php # 数据验证类
│ ├── ip_location.php # IP 定位类
│ ├── admin.php # 管理员类
│ └── ip/ # IP 数据库存放目录
├── ip/ # (可能冗余) IP 数据库目录
├── logs/ # 日志文件目录
├── sql/ # SQL 脚本目录
├── uploads/ # 用户上传文件目录
│ └── audio/ # 语音文件存储目录
├── api.php # API 入口文件
├── index.html # 前台首页
├── login.html # 登录页
├── register.html # 注册页
├── profile.html # 个人资料页
├── throw.html # 扔瓶子页
├── pick.html # 捡瓶子页
├── driftbottle.sql # 完整数据库结构
├── .htaccess # Apache 配置文件 (伪静态已停用)
├── nginx.htaccess # Nginx 配置文件 (伪静态已停用)
├── CHANGELOG.md # 版本更新日志
├── LICENSE # 开源许可证
└── README.md # 本文档
- 安装与部署指南 - 详细的安装步骤和配置说明
- 升级指南 - 版本升级步骤和注意事项
- 故障排除 - 常见问题和解决方案
- 语音漂流瓶功能 - 语音功能使用说明
- VIP 会员系统 - VIP 系统功能说明
- 更新日志 - 详细的版本更新历史
- v1.3.0 (2024-12-20):
- 🔍 IP地址追踪功能:
- 用户注册时自动记录注册IP地址
- 用户登录时自动更新上次登录IP地址
- 发布漂流瓶时自动记录IP地址
- 发表评论时自动记录IP地址
- 后台管理系统可查看用户注册IP、上次登录IP
- 后台管理系统可查看漂流瓶和评论的IP地址
- 用户详情页面显示注册IP、登录IP和评论内容
- 漂流瓶详情页面显示漂流瓶IP和评论IP
- 评论管理页面显示每条评论的IP地址
- 💬 评论回复功能:
- 支持二级评论回复(回复评论)
- 评论以层级结构显示,回复缩进显示
- 在"我扔出的漂流瓶"和"我捡到的漂流瓶"页面都可以查看和回复评论
- 回复评论时显示"回复 @用户名"
- 回复评论会通知被回复的用户
- 📝 评论功能增强:
- "我扔出的漂流瓶"页面显示所有评论内容
- "我捡到的漂流瓶"页面显示所有评论内容
- 评论后可以选择"仅评论"(不丢回大海)或"评论并丢回大海"
- 评论后漂流瓶依然显示在"我捡到的漂流瓶"中
- 丢回大海的漂流瓶别人可以捡起,且能看到所有评论
- 💌 消息中心优化:
- 支持点击未读消息标记为已读
- 优化消息显示样式(蓝色系配色)
- 未读消息徽章样式优化(长方体、渐变背景)
- 消息卡片横排显示,字体调大
- 🐛 Bug 修复:
- 修复"我扔出的漂流瓶"和"我捡到的漂流瓶"页面分页功能失效问题
- 修复点击第二页后内容无变化的问题
- 修复个性签名更新成功弹窗位置问题
- 优化未读消息按钮显示样式
- 🗄️ 数据库更新:
comments表新增字段:parent_id、reply_to_user_id、ip_addressusers表新增字段:register_ip、last_login_ip(已存在,现在会自动更新)- 添加相应的索引和外键约束
- 添加评论IP地址索引
idx_ip_address
- 🗑️ 功能移除:
- 删除"显示全部漂流瓶"按钮(所有漂流瓶默认显示)
- 🔍 IP地址追踪功能:
- v1.2.0 (2024-12-20):
- 🎯 新增用户等级系统:
- 通过发漂流瓶、捡漂流瓶、评论等操作自动获得经验值
- 根据经验值自动计算用户等级(等级公式:level = floor(sqrt(experience / 100)) + 1)
- 在个人主页和用户公开主页显示等级徽章和经验条
- 后台管理员可以查看和设置用户经验值
- 后台系统设置中可以配置各项操作获得的经验值
- 经验值历史记录功能
- 数据库新增字段:
users.experience、users.level - 数据库新增表:
experience_history(经验值历史记录表) - 新增 API 端点:
get_experience_config、get_user_level_info
- 🎯 新增用户等级系统:
- v1.1.0 (2024-12-13):
- 🎤 新增语音漂流瓶功能:
- 支持录制和发布语音漂流瓶
- 支持播放语音内容
- 显示语音时长信息
- 前端页面(扔瓶、捡瓶、个人中心)全面支持语音播放
- 管理员后台支持语音播放和文件管理
- 删除漂流瓶时自动删除关联的语音文件
- 数据库新增字段:
bottles.bottle_type、bottles.audio_file、bottles.audio_duration - 新增 API 端点:
upload_audio(语音文件上传)
- 🎤 新增语音漂流瓶功能:
- v1.0.2 (2025-04-21): 弃用伪静态 URL 格式,改为
?action=参数;优化前端错误处理。 - v1.0.1 (2025-04-20): 增强安全措施;增加 VIP 会员和签到系统。
- v1.0.0 (初始版本): 实现基础的漂流瓶扔/捡、评论、点赞功能。
详细更新内容请查阅 CHANGELOG.md 文件。
-
语音漂流瓶功能✅ 已实现 -
用户等级与成就系统✅ 已实现 - 漂流瓶内容分类/标签系统
- 用户间私信功能
- 更丰富的用户个性化设置
本项目基于 MIT 许可证 开源。详情请见 文件。
- 定期备份: 定期备份数据库和重要文件。
- 强密码: 使用复杂且唯一的数据库密码和管理员密码,并定期更换。
- HTTPS: 部署 SSL 证书,启用 HTTPS 加密传输。
- 删除安装/调试文件: 生产环境中务必删除
admin/test_admin.php,admin/reset_password.php等调试或密码重置工具。 - 更新依赖: 保持 PHP、MySQL、Web 服务器等软件为最新稳定版本。
- 安全审计: 定期审查代码和服务器配置,关注安全漏洞。
- 日志监控: 定期检查
logs/目录下的日志文件,监控异常活动。 - CSP 策略: 根据需要调整
includes/security.php中的内容安全策略 (CSP)。
- QQ: 1724464998
- GitHub Issues: https://github.com/kggzs/Driftbottle/issues
以下为系统部分界面截图:



