写在前面
在您使用ffmpeg扩展时,在本程序上传视频进行转码时会占用cpu非常多的资源,视频文件越大所转码时间也越长,cpu越好转码越快,虽然这会占用您极大部分的服务器性能,但是仍然建议您使用ffmpeg,在您进行转码时,可能会短暂出现站点无法访问的情况,但这不影响其他站点和项目的正常运行
I Love Day 情侣成长记录小站
一个为情侣/伴侣设计的轻量级「私密小站」,用于记录在一起的每一天:纪念日、相册、日记、留言等内容都集中在一个温馨的小空间里。
本项目包含前台展示站点和后台管理系统,适合部署在个人服务器上供两人共同使用。
本项目由多种 AI 模型与人工协作开发,代码贡献度大致为:
- GPT 5.1:约 60%
- Claude 4.5:约 35%
- Gemini 3 Pro:约 2%
- 人工手动调整与纠错(MiTao):约 3%
项目发起与维护者:MiTao
一句话概括:这是一个自带安装向导的情侣共创 + 相册 + 日记小站,安装完成后就可以在自己的域名下长期保存你们的爱情记录。
功能概览
前台功能
首页 Dashboard
- 展示「在一起的天数」及实时计时器(天/小时/分钟/秒)。
- 统计文章数量、相册数量、纪念事件数量、留言数量。
- 展示近期纪念事件,以色彩丰富的胶囊卡片形式呈现。
- 展示最新文章、相册和公开留言。
文章 / 日记
- 文章列表页面,支持查看已发布的文章。
- 文章详情页支持友好的排版(包括对富文本/Markdown 内容的渲染)。
- 可用于写日记、情书、重要记录等。
相册
- 相册列表页面,以卡片形式展示各个相册。
- 单个相册详情页面可查看图片和视频内容。
- 静态文件存储在
uploads/albums/等目录中。
纪念事件时间线
- 记录恋爱过程中重要的纪念日,如在一起、表白、旅行、生日等。
- 支持普通事件和每年重复的纪念事件(如每年纪念日)。
- 首页展示近期/重要事件,单独页面展示完整时间线。
留言板
- 公开留言板,可记录彼此的小心事。
- 支持区分登录用户和访客留言。
- 留言可设置是否公开,仅自己可见的留言不会对外展示。
用户登录/登出
- 登录页面
/login.php用于情侣双方登录后台。 - 支持安全的会话管理及登出操作
/logout.php。
共创功能(情侣共同写作)
情侣双人账号体系
- 系统默认面向两位固定用户使用(例如「你」和「另一半」)。
- 登录后可在同一空间中查看和管理你们共同的内容。
文章共创 / 协作写作
- 支持对同一篇文章进行协作创作,以「积木式写作」的方式按内容块来搭建整篇文章。
- 在后台可以为每篇文章设置另一半是否拥有编辑权限,从而控制哪些内容可以共同修改。
- 提供灵活的内容块排序与管理方式,把一次次「聊天式创作」的片段沉淀成完整长文。
专属互动体验
- 在撰写内容的过程中,可以像聊天一样你一句我一句地补充内容,形成类似「聊天式创作」的体验。
- 当文章开启共创后,在前台会以特殊样式展示(例如显眼的标记或视觉强调),读者一眼就能看出这是「两个人一起写」的内容。
- 共创文章最终是对所有访客可见的公开内容,但只有情侣双方可以参与编辑和共创。
加密与隐私空间
加密文章 / 加密相册
- 在后台创建或编辑文章、相册时,可以勾选「加密内容 / 加密相册」开关。
- 被加密的内容仅在情侣双方登录后完整展示;未登录或普通访客只能看到「加密内容,请登录后查看」的提示,不会暴露正文、描述和真实封面等细节。
访问控制与展示细节
- 加密内容在列表和详情页都会有明显的锁标记和特殊样式,方便区分哪些是公开内容,哪些是仅情侣可见的私密空间。
- 对于加密相册,如果用户未登录,系统会刻意隐藏真实预览图和部分元数据,只保留必要的标题/占位,避免敏感信息被意外窥探。
配合登录与密码保护
- 登录密码在后台统一管理,支持修改密码和基础复杂度校验。
- 建议将真正私密的照片、文字放入加密文章和加密相册中,配合账号密码保护,共同构成情侣专属的「半公开 + 私密」两层空间。
后台管理功能(/admin)
仪表盘
- 总览文章、相册、事件、留言等数量。
- 对图片资源进行采样统计,估算平均体积,帮助了解存储占用情况。
- 检测服务器上的视频处理工具(如 ffmpeg)可用性,用于视频相册相关能力。
文章管理
- 新增、编辑、删除文章。
- 控制文章状态(例如已发布、草稿等)。
- 可设置情侣双方的协作编辑方式,适合作为共享日记。
相册管理
- 创建与管理相册。
- 上传图片与视频,支持基础的媒体管理。
- 提供图片统计工具,估算图片数量和平均大小。
纪念事件管理
- 新增、编辑、删除纪念事件。
- 支持标记事件为「重要」或「每年重复」。
- 自动计算距离下一次事件的天数或距离已过去的时间。
留言管理
- 查看前台所有留言。
- 支持将留言标记为删除(后台为软删除逻辑)。
- 可从后台跳转到前台留言页面。
个人资料与系统设置
- 修改个人昵称、头像等信息。
- 配置站点名称、恋爱开始日期等基础信息。
- 调整与文件上传、展示样式等相关的常规设置。
技术栈与目录结构
技术栈
- 语言:PHP(适用于常见的 PHP 7+ 环境)
- 数据库:MySQL / MariaDB
- 前端:HTML + CSS + JavaScript + Font Awesome
- 环境要求(建议):
- PHP 7.4 或以上,启用 PDO 等常用扩展
- MySQL 5.7 / MariaDB 及以上版本
- Web 服务器:Nginx / Apache 任一
- 可选但强烈推荐:服务器安装
ffmpeg命令行工具(用于视频转码和封面图生成)
关于 ffmpeg 依赖
ffmpeg 在本项目中的作用(做什么)
- 为相册和文章中上传的视频做一次统一转码,输出为更通用的 H.264 + AAC 格式,尽量减少「有声黑屏」等兼容性问题。
- 为视频自动截取封面图,用于相册卡片、灯箱预览等位置的封面展示,让相册在有视频时也有统一的缩略图体验。
- 在后台工具页中,对历史视频进行一键批量转码,方便你在更换服务器或导入旧视频后,一次性提升兼容性。
后台提示与排查
- 后台仪表盘会自动检测服务器上 ffmpeg 的可用状态,并以醒目的提示卡片展示(例如:已正常可用、已安装但无法调用、未检测到等)。
- 管理员可以通过这块提示快速判断当前服务器是否需要安装或调整 ffmpeg,从而决定是否开启视频转码与封面自动生成等增强能力。
ffmpeg 的可选性(必装吗)
- 不是强制依赖:不安装 ffmpeg,系统依然可以正常运行,图片和大部分浏览器支持的视频依然可以正常上传和播放。
- 强烈推荐安装:安装并正确配置 ffmpeg 后,视频相关体验会显著提升,特别是在移动端和部分旧设备上。
不安装 ffmpeg 时会有什么影响
- 上传视频时:
- 视频文件会按原始格式保存,不做自动转码;如果某些设备/浏览器对该格式支持不好,可能出现无法播放或「有声黑屏」的情况。
- 自动生成视频封面图的功能不可用,相册中部分视频可能没有预览封面。
- 后台工具方面:
- 视频一键批量转码工具不可用。
- 总体而言:
- 不影响图片与大多数视频的基础上传和观看(前提是浏览器本身支持该视频格式)。
- 主要损失的是「兼容性优化」和「自动封面」等增强型能力。
目录结构(简要)
/index.php
前台首页入口,负责加载配置、核心组件、获取首页统计数据并渲染首页模板。/admin/
后台管理入口及所有管理页面(仪表盘、文章管理、相册管理、事件管理、留言管理、系统设置等)。/api/
提供接口端点,比如异步操作、AJAX 请求等。/views/
前台页面模板,包括头部、尾部、首页、文章列表、相册、事件、留言等视图文件。/assets/
静态资源目录(CSS、JavaScript、字体、图片、第三方前端库等)。/uploads/
用户上传资源目录,包含相册图片、视频、文章封面等媒体文件。/config/
全局配置和数据库配置:config.php:调试模式、错误处理、时区、上传路径、站点名称、安全相关配置等。database.php:数据库连接信息(主机、端口、数据库名、用户名、密码、字符集等),支持通过环境变量覆盖。
/core/
核心业务基础设施,主要包含:- 数据库访问封装(统一管理连接与查询)。
- 用户认证和会话管理(登录校验、当前用户、权限等)。
- 内容解析与渲染组件,用于文章内容的友好显示。
- 通用工具与辅助方法(日期格式化、CSRF 处理等)。
/database/
数据库脚本目录,包含:schema.sql:数据库表结构定义和基础数据,用于初始化数据库。
- 其他文件:
install.php:安装向导(首次运行时用于初始化系统)。robots.txt:搜索引擎爬虫控制文件。sitemap.php:站点地图生成。404.html:自定义 404 错误页面。favicon.ico:站点图标。
部署与安装
推荐安装流程(简化版):
1)准备好 PHP + MySQL 环境 → 2)在数据库中创建一个空库 → 3)在站点根目录创建enable_install.lock→ 4)浏览器打开https://你的域名/install.php跑完 3 个步骤 → 5)删除(或移走)install.php,开始愉快使用小站。
下文提供的是更细致的分步说明,你也可以按自己的习惯选择手动建库 / 手动改配置的方式完成安装。
以下步骤不会暴露任何代码实现细节,仅从使用者角度说明操作流程。
1. 准备运行环境
- 在服务器上安装并配置:
- PHP(建议 7.4+,启用 PDO 和常见扩展)。
- MySQL / MariaDB。
- Nginx 或 Apache。
- 确认 Web 根目录已经指向本项目所在目录(例如
/www/wwwroot/yc.miccuc.com)。 - 确保 PHP 进程对
uploads/等上传目录具有写权限(至少uploads/需要写权限)。
2. 创建数据库
提示:如果你准备使用安装向导(install.php),安装过程会尝试自动创建数据库并导入表结构,你可以直接跳到「5. 解锁并使用安装向导」,本节仅适合希望提前手动建库的用户。
- 在数据库中创建一个新的空库,例如:
i_love_day(名称可以自定义)。 - 如需完全自行控制数据库结构,也可以使用命令行或图形化工具(如 phpMyAdmin)手动导入
database/schema.sql中的表结构和基础数据:- 例如(在项目根目录):
mysql -u your_user -p your_db < database/schema.sql
- 注意将
your_user、your_db替换为实际的数据库用户名和库名。
- 例如(在项目根目录):
- 如果你打算交给安装向导自动导入表结构,可以只创建一个空库,无需手动导入
schema.sql。
3. 配置数据库连接
一般情况下,推荐在安装向导的「数据库配置」步骤中填写数据库信息,由系统自动生成 / 覆盖config/database.php。
如果你更习惯提前手动编辑配置文件,或安装向导无法写入文件,可以参考本节进行配置。
- 打开(或创建)
config/database.php文件。 - 根据实际情况修改:
- 数据库主机(如
localhost) - 数据库端口(默认 3306)
- 数据库名称
- 数据库用户名
- 数据库密码
- 数据库主机(如
- 正式环境建议:
- 通过环境变量(如
DB_HOST、DB_NAME、DB_USER、DB_PASSWORD等)提供敏感信息。 - 避免在代码仓库中提交真实账号与密码。
- 通过环境变量(如
4. 配置基础信息
- 打开
config/config.php:- 根据需要设置站点名称。
- 根据环境调整调试模式(开发环境可开启调试,上线环境建议关闭并记录日志)。
- 根据服务器环境设置时区、上传目录、最大上传大小等。
- 为安全密钥设置随机且足够长度的字符串(建议使用随机生成工具)。
- 首次安装时,访问前台首页如检测到未安装,会自动跳转到安装向导页面,引导完成初始化。
5. 解锁并使用安装向导
出于安全考虑,安装向导默认是「上锁」状态,需要手动解锁后才能访问。
- 在站点根目录创建一个空文件:
enable_install.lock- 例如通过命令行创建:
touch enable_install.lock - 或在面板/FTP 中新建同名空文件。
- 例如通过命令行创建:
- 确认根目录下不存在
.installed文件(如果是全新部署通常本来就没有)。 - 在浏览器中访问:
https://你的域名/install.php- 步骤 1:填写数据库连接信息并测试/初始化数据库。
- 步骤 2:创建第一个账号(情侣中的一方)。
- 步骤 3:设置站点标题、描述、恋爱开始时间等信息。
- 安装完成后:
- 系统会自动写入
.installed标记文件,并自动删除enable_install.lock,防止被误重复安装。 - 建议同时手动删除
install.php或将其移出 Web 可访问目录,进一步降低风险。
- 系统会自动写入
- 如果已经存在
config/database.php且站点处于「非调试模式」(config/config.php中将调试开关关闭),同时.installed被误删,为了安全系统会自动禁用安装向导:- 此时直接访问
install.php会得到禁止访问(403)提示。 - 如确需重新安装,请临时将
config/config.php中的调试模式打开(例如将调试常量改为开启),完成安装后务必再改回关闭状态。
- 此时直接访问
6. 访问站点
- 前台首页:在浏览器访问绑定的域名(如
https://your-domain.com/)。 - 后台登录:
- 访问
https://your-domain.com/admin/或https://your-domain.com/login.php。 - 使用数据库初始化脚本中预置的账户,或在安装向导中设置的情侣账号登录。
- 访问
- 登录后可在后台进行:
- 撰写文章/日记
- 创建相册并上传图片/视频
- 添加纪念事件
- 管理留言
- 调整系统设置和个人信息
安全与隐私说明(高层)
- 会话安全
系统使用服务端 Session 管理登录状态,并对 Session Cookie 做基础安全加固(如只允许通过 HTTP/HTTPS 访问、禁止前端脚本获取、必要时开启安全标记等)。 - 登录保护
通过限制一定时间窗口内的登录失败次数、记录登录尝试等方式,降低暴力破解风险;登录失败时加入微小延迟,进一步减缓攻击节奏。 - 数据库访问
数据库访问统一通过封装层进行,配合预处理语句,有利于避免常见注入问题。 - CSRF 防护
对后台敏感操作(如删除、修改)使用表单令牌机制进行校验,以减少跨站请求伪造的风险。 - 文件上传与存储
上传目录独立于代码目录管理,并对上传文件大小进行限制。生产环境应再结合 Web 服务器配置限制可执行脚本类型,避免上传脚本被执行。
开发与二次开发建议
以下内容仍保持高层次描述,不涉及具体函数或内部实现。
- 前后端结构清晰
- 请求入口文件负责加载配置、初始化核心组件,然后分别引入对应的视图模板。
- 数据库查询和业务逻辑集中在少量核心组件中,视图层主要负责渲染页面和输出数据。
- 模板与样式定制
- 前台样式集中在
assets/css和views/模板中,适合进行 UI 改造。 - 可根据情侣喜好调整颜色、字体、布局,或增加动画效果。
- 前台样式集中在
- 功能扩展
- 可以在
admin/和api/中新增管理功能和接口。 - 如需扩展标签系统、更多类型的相册展示方式、提醒/倒计时模块等,可在现有结构基础上扩展。
- 可以在
- 部署运维建议
- 使用 HTTPS 访问站点,保障传输安全。
- 定期备份数据库和
uploads/目录,避免数据丢失。 - 对后台地址进行访问控制(比如仅在特定 IP 段允许访问
/admin,或增加额外验证)。
授权与二次开发说明
二次开发许可
- 允许在遵守本说明的前提下对本项目进行修改、扩展和二次开发,用于自用或部署给他人使用。
- 建议在进行深度改造前,先阅读本 README 及项目结构说明,避免误删安装向导、配置文件等关键部分。
署名与原项目信息(必须保留)
- 无论是原版使用还是二次开发版本,都需要在以下任一位置清晰保留署名信息:
- 项目根目录的
README/ 说明文档中; - 或网站关于页 / 页脚等明显位置。
- 项目根目录的
- 推荐保留的内容包括:
- 原项目名称:
I Love Day 情侣成长记录小站 - 原项目地址:
https://github.com/MiTaosot/I_Love_Day - 作者:
MiTao - 主要 AI 代码贡献者:
GPT 5.1(约 60%)、Claude 4.5(约 35%)、Gemini 3 Pro(约 2%)
- 原项目名称:
修改版本说明
- 如果你对项目进行了较大改动(例如更换品牌名、界面整体重构、增加大量新功能),建议:
- 在你的 README 中增加「基于 I Love Day 二次开发」的说明;
- 简要列出你添加或修改的主要功能,便于后续维护者理解差异。
常见问题(FAQ)
Q:首次访问为什么会跳转到安装页面?
A:如果系统检测到数据库未配置或未完成安装初始化,会自动跳转到安装向导页面,引导你完成数据库配置和基础信息设置。完成安装后,首页会正常显示内容。
Q:可以把站点当作公开博客吗?
A:可以,但本项目设计初衷是情侣/伴侣之间使用,很多文案与界面更偏向私密小站风格。你可以通过修改文案和样式来适配公开博客场景。
Q:图片和视频会存在哪里?
A:上传的文件保存在项目的 uploads/ 目录(如相册图片在子目录中),注意部署时应为该目录设置足够的存储空间和备份策略。
文件改动说明
本文档为项目根目录下新增的 README.md,用于说明整体功能、部署方式与使用建议,不包含任何具体函数或内部实现细节。