简介
本文件为 DouPHP 的环境要求与部署前置条件说明,覆盖 PHP 版本、数据库、Web 服务器(Apache/Nginx)、必需扩展、文件权限、安装检查与常见问题诊断。内容基于仓库中的引导流程、配置与路由重写规则整理而成,确保在真实代码基础上给出可操作的部署建议。
项目结构
DouPHP 采用多入口架构:前台 index.php、后台 admin/index.php、API api/index.php,统一通过 core/bootstrap.php 进行初始化与环境检测,再交由各自的路由器分发请求。站点根目录的 .htaccess 提供 URL 重写与安全访问控制。
graph TB
A["浏览器"] --> B[".htaccess<br/>URL 重写与安全限制"]
B --> C["前台入口 index.php"]
B --> D["后台入口 admin/index.php"]
B --> E["API 入口 api/index.php"]
C --> F["core/bootstrap.php<br/>PHP 版本检测/路径常量/未安装跳转"]
D --> F
E --> F
F --> G["config/config.php<br/>数据库/字符集/应用密钥等"]
F --> H["路由与门面注册<br/>Request/Route/DB 等"]
核心组件
- PHP 版本检测:启动时强制最低版本,不满足则直接终止。
- 路径与常量:定义 ROOT_PATH、CONFIG_PATH、STORAGE_PATH 等关键路径。
- 未安装保护:若 storage/install.lock 不存在且非安装页面,自动跳转到安装程序。
- 配置加载:读取 config/config.php 中的数据库连接、表前缀、字符集与应用密钥。
- 自动加载与门面:注册 ClassMap/PSR-4 自动加载与常用门面(DB、Session、Storage、Request、Route、Url、Image、Attachment 等)。
- 路由与请求:提前绑定 DelegatingRouter 与 Request 单例,供后续 Init 阶段复用。
架构总览
请求进入后,先经 .htaccess 进行安全限制与 URL 重写,将 /api/、/admin/ 与前台路由转发到对应入口;随后 bootstrap 完成环境检查与基础服务初始化;最终由前端/后端/API 各自的 Router 调度到控制器与服务层。
sequenceDiagram
participant U as "用户"
participant W as "Web 服务器(Apache/Nginx)"
participant R as ".htaccess"
participant I as "入口(index/admin/api)"
participant B as "bootstrap.php"
participant CFG as "config/config.php"
participant RT as "路由/控制器"
U->>W : HTTP 请求
W->>R : 匹配重写规则
R-->>W : 重写到 index.php|admin/index.php|api/index.php
W->>I : 执行入口脚本
I->>B : 引入并执行引导
B->>B : 检查 PHP 版本/定义路径/未安装跳转
B->>CFG : 读取数据库/字符集/密钥
B->>RT : 注册自动加载/门面/路由/请求
RT-->>U : 返回响应
详细组件分析
PHP 版本与运行环境
- 最低版本:PHP 5.6.0+。低于该版本会直接终止并提示升级。
- 建议:使用稳定支持的 PHP 版本以获得更好的性能与安全更新。
数据库要求
- 类型:MySQL(或兼容 MySQL 协议的数据库),通过 PDO 驱动连接。
- 配置项:主机、库名、用户名、密码、表前缀、字符集(UTF-8)均在配置文件中设置。
- 建议:启用 InnoDB 引擎,合理设置字符集与排序规则,确保中文显示正常。
Web 服务器与 URL 重写
- Apache:
- 启用 mod_rewrite。
- 根目录 .htaccess 已包含安全限制与重写规则,用于将 /api/、/admin/ 与前台路由正确转发。
- 对敏感后缀(如 bak、inc、lib、sh、tpl、lbi、dwt、pem)默认拒绝访问。
- Nginx:
- 需实现等价的重写规则,将 /api/、/admin/ 与前台路由转发至对应入口。
- 静态资源与入口分离,避免误拦截。
必需的 PHP 扩展与模块
- PDO 与 MySQL 驱动:用于数据库连接与查询。
- MBString:多字节字符串处理(国际化与编码相关)。
- GD 库:图像处理(缩略图、水印等)。
- CURL:外部 API 调用与网络请求。
- Zip:压缩与归档(导出、备份等)。
- JSON/XML 等基础扩展:JSON 输出、XML 解析等。
- 可选:当启用 Excel 导出功能时,需要 PHPExcel 类库(系统内嵌或外部引入)。
文件权限要求
- storage 目录:必须可读写,用于缓存、会话、授权凭据、模板缓存等运行时数据。
- config 目录:安装与部分工具可能需要写入配置文件(例如模块开关、管理员目录自定义等)。
- 上传目录:图片、附件等上传目录需具备写入权限。
- 敏感文件:确保 .htaccess 生效,禁止直接访问敏感后缀文件。
安装与未安装保护
- 若 storage/install.lock 不存在且当前请求不是安装流程,系统将自动跳转到安装程序。
- 安装完成后会生成 install.lock,防止重复安装。
依赖分析
- 入口依赖:index.php 依赖 bootstrap.php 完成环境检查与基础服务初始化。
- 配置依赖:bootstrap 阶段加载 config/config.php 获取数据库与站点常量。
- 路由依赖:入口在 Init 之前即绑定路由与请求对象,保证语言前缀解析与路由匹配可用。
- 扩展依赖:PDO、MBString、GD、CURL、Zip 等为系统核心能力的基础支撑;Excel 导出依赖 PHPExcel。
graph LR
IDX["index.php"] --> BOOT["core/bootstrap.php"]
BOOT --> CFG["config/config.php"]
BOOT --> EXT["PHP 扩展(PDO/GD/CURL/MBString/Zip)"]
BOOT --> RT["路由/门面/容器"]
RT --> CTRL["控制器/服务"]
性能考虑
- 开启 OPcache 提升 PHP 执行效率。
- 合理配置 PHP-FPM/Apache 进程数与内存限制,避免高并发下 OOM。
- 数据库连接池与慢查询优化,减少 IO 瓶颈。
- 静态资源 CDN 化,减轻服务器压力。
- 按需启用扩展与功能,减少不必要的开销。
故障排查指南
- PHP 版本过低:
- 现象:启动即报错并提示升级。
- 处理:升级到 PHP 5.6.0 或更高版本。
- 数据库连接失败:
- 现象:无法连接数据库或创建表失败。
- 处理:检查 config/config.php 中主机、库名、用户名、密码、表前缀是否正确;确认 MySQL 服务与端口可达;验证 PDO MySQL 驱动是否启用。
- 文件权限不足:
- 现象:缓存写入失败、模板编译失败、附件上传失败。
- 处理:授予 storage 目录及上传目录写入权限;必要时调整 config 目录权限;确保 Web 服务器用户对目录有读写权限。
- URL 重写无效:
- 现象:/api/、/admin/ 或前台路由返回 404。
- 处理:Apache 启用 mod_rewrite 并确保 .htaccess 生效;Nginx 配置等价重写规则;检查静态资源未被错误拦截。
- 扩展缺失:
- 现象:图像处理失败、外部 API 调用失败、压缩导出失败。
- 处理:安装并启用 GD、CURL、Zip、MBString 等扩展;确认 PHP 扩展目录与 php.ini 配置正确。
- 未安装保护导致跳转:
- 现象:访问首页跳转到安装程序。
- 处理:完成安装流程以生成 install.lock;或临时跳过(仅开发环境)。
结论
DouPHP 的运行环境以 PHP 5.6+ 为基础,配合 MySQL(PDO)、必要的 PHP 扩展以及正确的 Web 服务器重写与安全配置即可稳定运行。部署时应重点关注 PHP 版本、数据库连接、文件权限与 URL 重写规则,并通过内置的安装保护机制确保站点安全上线。
附录
- 环境检查命令(示例):
- PHP 版本:php -v
- 扩展列表:php -m | grep -E 'pdo|gd|curl|mbstring|zip'
- Apache 模块:apachectl -M | grep rewrite
- Nginx 配置:nginx -T | grep -A 10 'location'
- 常见配置位置:
- 数据库与站点常量:config/config.php
- URL 重写与安全:.htaccess(Apache)或 Nginx 站点配置
- 运行时存储:storage/(缓存、会话、授权凭据等)