# one_blog **Repository Path**: qruansoft_admin/one_blog ## Basic Information - **Project Name**: one_blog - **Description**: 个人博客,开源轻量化、可移植、免安装依赖、直接丢主机就能跑。 - **Primary Language**: PHP - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-08-07 - **Last Updated**: 2026-08-08 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 原生 PHP 博客(零依赖) ![输入图片说明](public/static/ScreenShot_2026-08-07_211829_709.png) 一个**不依赖 Composer、不依赖任何第三方框架**的 PHP 博客。单目录丢到任意支持 PHP 的虚拟主机即可运行,连 `composer install` 都不需要。 - 纯 PHP + PDO,自己实现的轻量 MVC、路由、视图、Markdown 解析 - 前台:文章列表(分页 / 分类筛选 / 标签筛选 / 关键词搜索)、文章详情(伪静态 `/post/:id.html`)、Markdown 渲染、评论、sitemap.xml - 后台:登录(Session 鉴权)、文章增删改查(Markdown 实时预览)、分类管理、评论管理 - 安全:密码 `password_hash`、评论/输出统一转义防 XSS、Markdown 渲染前先转义原始 HTML ## 环境要求 - PHP ≥ 8.1(已用 8.4 验证通过) - 扩展:`pdo_sqlite`(默认)或 `pdo_mysql`、`session`、`mbstring`、`json` - 不需要 Composer,不需要任何 `vendor/` ## 安装(一步) ```bash # 在项目根目录执行,建表 + 创建管理员 + 写入示例文章 php install.php admin yourpassword # 不传参数则默认 admin / admin123 ``` 脚本会按 `.env` 里的 `DB_TYPE` 选择 SQLite 或 MySQL 并自动建库建表。 ## 运行 ```bash # 内置服务器(开发 / 验证) php -S localhost:8000 -t public public/router.php ``` - 前台:http://localhost:8000/ - 文章详情:http://localhost:8000/post/1.html - sitemap:http://localhost:8000/sitemap.xml - 后台登录:http://localhost:8000/admin/login 在线体验 - [http:www.158room.asia](http://www.158room.asia) 生产环境把 `public/` 设为 Web 根目录,`public/.htaccess` 已写好伪静态重写(Apache)。Nginx 自行加 `try_files $uri /index.php;` 即可。 ## 配置(.env) 复制 `.env.example` 为 `.env` 按需修改: | 项 | 说明 | |----|------| | `APP_DEBUG` | true/false,调试模式 | | `SITE_NAME` / `SITE_DESC` | 站点名 / 描述(写入 SEO meta) | | `DB_TYPE` | `sqlite`(默认)或 `mysql` | | `DB_SQLITE_PATH` | SQLite 文件路径,相对项目根 | | `DB_HOST` / `DB_PORT` / `DB_NAME` / `DB_USER` / `DB_PASS` | MySQL 连接信息 | 切到 MySQL:把 `DB_TYPE` 改为 `mysql` 并填好连接信息,再跑一次 `php install.php` 即可(`database/blog.mysql.sql` 会被执行)。 ## 目录结构 ``` core/ 核心(零依赖) Bootstrap.php 配置加载 + 自动加载 Config.php 读取 .env Database.php PDO 单例(mysql/sqlite) Router.php 单一入口分发 View.php 简易模板 Markdown.php 轻量 Markdown 解析(转义防 XSS) Auth.php Session 登录态 Controller.php 控制器基类 helpers.php e() 转义等 app/ controllers/ 前台 + 后台控制器 models/ Article / Category / Tag / Comment / User views/ 前台 + 后台模板 public/ 入口(index.php / router.php / .htaccess)+ 静态资源 database/ blog.mysql.sql / blog.sqlite.sql install.php 安装脚本(CLI) backup.php 数据库备份脚本(CLI,建议加入 cron) ``` ## 功能一览 - 前台:列表分页、`?cat=` 分类筛选、`?tag=` 标签筛选、`?q=` 关键词搜索、详情页伪静态、Markdown 渲染、评论提交/展示、sitemap.xml - 后台:登录鉴权、文章 CRUD(Markdown 实时预览,前后渲染一致)、分类管理、评论管理 - SEO:每页 `title/description/keywords/canonical`、伪静态链接、sitemap ## 安全说明 - 评论内容、所有用户输出统一 `htmlspecialchars` 转义,杜绝存储型 XSS - Markdown 渲染前先对整个正文做 HTML 转义,仅叠加受控的安全标签 - 后台所有写操作、登录、AJAX 上传/预览均经 CSRF token 校验(token 存 Session,表单隐藏域 + `` 供 JS 读取),可抵御跨站伪造请求 - 数据库建议定期备份:`php backup.php`(生成带时间戳副本,可选 `--zip`);生产环境可加入 cron 每日执行 - 链接仅允许 `http(s):/mailto:/data:image/` 等安全协议,拦截 `javascript:` ## 备注 - 早期用 ThinkPHP + Composer 写的版本(因依赖 Composer 被弃用)已彻底移除,当前仓库即为零依赖原生 PHP 实现。 - 本仓库不含 `vendor/`,也不含 `composer.json`——这就是“零依赖”的意义。