简介
本指南面向部署与运维 DouPHP 的工程师,聚焦常见安装问题、日志查看与分析、调试模式启用、性能诊断优化以及多环境(Windows、共享主机等)特殊问题的处理。内容基于仓库中的入口引导、配置、重写规则、权限检查、数据库连接与小程序调试能力进行系统化梳理,并提供可操作的排错步骤。
项目结构
DouPHP 采用“前台/后台/API 三端入口 + 核心框架”的分层组织:
- 根入口 index.php 负责加载核心引导、设置路由并统一异常处理。
- core/bootstrap.php 完成 PHP 版本检测、路径常量定义、站点配置文件加载、自动加载与容器初始化。
- config/config.php 集中数据库连接、表前缀、字符集、应用密钥与调试开关等关键配置。
- .htaccess 提供 Apache URL 重写规则,将请求转发到前台、后台与 API 入口。
- admin/service/tool/ToolService.php 提供运行时存储与图片目录的权限检查逻辑。
- core/support/FileHelper.php 提供文件/目录读写权限探测工具。
- plugin 中保留部分历史 SDK 的 DB/Router/Cache 实现,用于兼容或插件场景。
- miniprogram 侧提供小程序运行环境与调试开关探测能力。
graph TB
A["浏览器"] --> B[".htaccess<br/>URL 重写"]
B --> C["前台入口 index.php"]
C --> D["核心引导 core/bootstrap.php"]
D --> E["站点配置 config/config.php"]
C --> F["路由分发与业务控制器"]
F --> G["数据库连接(DOUBLE/适配器)"]
F --> H["文件系统(storage/images/theme)"]
F --> I["日志与审计(登录失败/管理日志)"]
图表来源
- index.php:1-126
- core/bootstrap.php:19-113
- config/config.php:15-52
- .htaccess:10-45
章节来源
- index.php:1-126
- core/bootstrap.php:19-113
- config/config.php:15-52
- .htaccess:10-45
核心组件
- 入口与引导:index.php 统一捕获未处理异常并按 site.debug 输出调试页或错误响应;core/bootstrap.php 加载配置、注册自动加载与全局助手。
- 配置中心:config/config.php 集中数据库、字符集、模块目录、调试开关等。
- URL 重写:.htaccess 将 /api/、/admin/、前台路由统一转发至对应入口。
- 权限检查:ToolService 扫描 storage、images、theme 等目录是否具备写权限;FileHelper 提供通用权限探测。
- 数据库连接:通过 PDO/MySQLi 等适配器建立连接,并在连接失败时触发错误。
- 登录与安全:LoginService 记录登录失败原因;AdminLogDetail 收敛后台审计细节标签;security.php 提供可信代理、Host、限流与会话安全配置。
- 小程序调试:env.ts 提供 isDebugEnv/isServerDebug 判断,便于在小程序端显示调试 UI。
章节来源
- index.php:38-75
- core/bootstrap.php:59-113
- config/config.php:15-52
- .htaccess:17-45
- admin/service/tool/ToolService.php:79-109
- core/support/FileHelper.php:319-347
- plugin/alipay/sdk/lotusphp_runtime/DB/Adapter/ConnectionAdapter/DbConnectionAdapterPdo.php:5-34
- front/service/user/LoginService.php:113-162
- core/service/admin/AdminLogDetail.php:21-34
- config/security.php:51-87
- miniprogram/company/utils/env.ts:1-37
架构总览
下图展示从浏览器请求到后端处理的完整链路,包括 URL 重写、入口引导、路由调度、异常处理与日志落盘的关键节点。
sequenceDiagram
participant U as "用户"
participant A as ".htaccess"
participant R as "前台入口 index.php"
participant B as "核心引导 bootstrap.php"
participant S as "服务/控制器"
participant D as "数据库"
participant L as "错误日志/审计"
U->>A : 访问 /xxx
A-->>R : 重写为 index.php?route=xxx
R->>B : 加载核心与配置
B-->>R : 返回已就绪的请求上下文
R->>S : 路由调度执行业务
S->>D : 查询/写入数据
D-->>S : 返回结果
S-->>R : 生成响应
R-->>U : 返回页面/JSON
Note over R,L : 未捕获异常会写入 error_log 并渲染调试页或错误响应
图表来源
- .htaccess:17-45
- index.php:16-75
- core/bootstrap.php:59-113
详细组件分析
数据库连接与连接池
- PDO 适配器根据配置选择 mysql/sqlite/pgsql/odbc,并支持持久连接选项。
- 连接管理器在无法获取连接时触发错误,便于快速定位网络/凭据问题。
- 升级脚本在安装阶段直接以 mysqli 校验数据库连通性并输出连接信息,便于排查 host/port/dbname/prefix。
flowchart TD
Start(["开始"]) --> LoadCfg["读取数据库配置"]
LoadCfg --> BuildDSN{"构建DSN"}
BuildDSN --> |PDO| NewPDO["new PDO(...)"]
BuildDSN --> |MySQLi| NewMysqli["new mysqli(...)"]
NewPDO --> ConnOK{"连接成功?"}
NewMysqli --> ConnOK
ConnOK --> |是| Ready["进入业务逻辑"]
ConnOK --> |否| Err["记录错误并中止"]
Err --> End(["结束"])
Ready --> End
图表来源
- plugin/alipay/sdk/lotusphp_runtime/DB/Adapter/ConnectionAdapter/DbConnectionAdapterPdo.php:5-34
- _'\tool/upgrade_v1.9.php:104-135
章节来源
- plugin/alipay/sdk/lotusphp_runtime/DB/Adapter/ConnectionAdapter/DbConnectionAdapterPdo.php:5-34
- _'\tool/upgrade_v1.9.php:104-135
URL 重写与路由解析
- .htaccess 将 /api、/admin 与前台路由统一转发至对应入口,静态资源直接放行。
- 历史 Router 支持 REWRITE/PATH_INFO/STANDARD 三种协议模式,便于在不同服务器环境下解析 PATH_INFO 或 REQUEST_URI。
flowchart TD
Req["请求到达"] --> CheckStatic{"是否静态资源?"}
CheckStatic --> |是| Serve["直接返回文件"]
CheckStatic --> |否| Rewrite[".htaccess 重写规则"]
Rewrite --> Route["入口解析 route 参数"]
Route --> Dispatch["路由调度到控制器"]
图表来源
- .htaccess:17-45
- plugin/alipayf2f/sdk/lotusphp_runtime/Router/Router.php:40-66
章节来源
- .htaccess:17-45
- plugin/alipayf2f/sdk/lotusphp_runtime/Router/Router.php:40-66
权限检查与常见问题
- ToolService 会检查 storage、images、theme 等目录的写权限,缺失会导致上传、模板下载等功能失败。
- FileHelper 提供统一的权限探测方法,可用于自定义诊断脚本。
flowchart TD
Start(["启动/功能调用"]) --> CheckDir["检查目录是否存在"]
CheckDir --> TryWrite{"尝试写入测试文件"}
TryWrite --> |成功| OK["权限正常"]
TryWrite --> |失败| Fail["标记 no_write 并提示修复"]
图表来源
- admin/service/tool/ToolService.php:79-109
- core/support/FileHelper.php:319-347
章节来源
- admin/service/tool/ToolService.php:79-109
- core/support/FileHelper.php:319-347
登录失败与审计日志
- LoginService 在密码错误、账号不存在、账号锁定等场景记录失败原因,并写入审计日志。
- AdminLogDetail 收敛后台审计 details 列的离散标签,便于统一分析与检索。
sequenceDiagram
participant U as "用户"
participant L as "LoginService"
participant DB as "数据库"
participant A as "审计日志"
U->>L : 提交用户名/密码
L->>DB : 查询用户
DB-->>L : 用户信息
L->>L : 校验密码/状态
alt 失败
L->>A : 记录 LOGIN_FAIL + 详情标签
L-->>U : 返回错误
else 成功
L->>A : 记录 LOGIN_SUCCESS
L-->>U : 返回成功
end
图表来源
- front/service/user/LoginService.php:113-162
- core/service/admin/AdminLogDetail.php:21-34
章节来源
- front/service/user/LoginService.php:113-162
- core/service/admin/AdminLogDetail.php:21-34
小程序调试与环境探测
- env.ts 提供 isDebugEnv() 与 isServerDebug(),用于在非正式版或服务端开启调试时显示调试 UI。
- 结合后台同步的 debug_enable,可在小程序端感知服务端调试状态。
章节来源
- miniprogram/company/utils/env.ts:1-37
依赖关系分析
- 入口与引导强耦合:index.php 依赖 core/bootstrap.php 完成环境准备;bootstrap.php 依赖 config/config.php 提供数据库与系统常量。
- URL 重写与路由:.htaccess 将请求重写到入口,入口再交由路由调度器分派到控制器。
- 权限与文件系统:ToolService 与 FileHelper 共同保障运行时目录可写,影响上传、缓存与模板编译。
- 数据库与适配器:PDO/MySQLi 适配器由配置驱动,连接失败会触发错误,需结合升级脚本输出信息进行定位。
- 安全与会话:security.php 控制可信代理、Host 白名单、限流与会话 Cookie 策略,影响跨域、反代与防刷行为。
graph LR
Index["index.php"] --> Bootstrap["core/bootstrap.php"]
Bootstrap --> Config["config/config.php"]
Index --> HTAccess[".htaccess"]
Index --> Router["路由调度"]
Router --> Controllers["业务控制器"]
Controllers --> DB["数据库适配器"]
Controllers --> FS["文件系统(storage/images/theme)"]
Controllers --> Security["config/security.php"]
图表来源
- index.php:16-75
- core/bootstrap.php:59-113
- config/config.php:15-52
- .htaccess:17-45
- config/security.php:51-87
章节来源
- index.php:16-75
- core/bootstrap.php:59-113
- config/config.php:15-52
- .htaccess:17-45
- config/security.php:51-87
性能注意事项
- 数据库连接:优先使用 PDO 并合理配置持久连接;避免频繁新建连接导致开销增大。
- 文件权限:确保 storage、images、theme 等目录可写,减少因权限检查导致的额外 IO。
- URL 重写:确认 .htaccess 规则生效,避免重复重写或误匹配静态资源。
- 安全限流:在 security.php 中配置 throttle 限制恶意请求对系统的冲击。
- 小程序调试:仅在开发/试用环境开启调试,生产环境关闭以减少额外开销。
故障排除指南
一、数据库连接失败
症状
- 安装或升级时报“数据库连接失败”。
- 前台/后台页面空白或报错。
排查步骤
- 检查站点配置:确认 config/config.php 中的 dbhost、dbname、dbuser、dbpass、prefix 正确无误。
- 验证网络与端口:若 host 包含端口,请确认 MySQL 监听地址与端口可达。
- 使用升级脚本辅助定位:运行 _'\tool/upgrade_v1.9.php,观察其输出的配置来源与连接信息,并核对错误消息。
- 检查适配器与扩展:确认 PHP 已启用 pdo_mysql/mysqli 等扩展;如使用 SQLite/PostgreSQL,确认相应 DSN 与驱动可用。
- 权限与防火墙:确认数据库账户有访问权限,且服务器出站端口未被防火墙拦截。
参考实现
- 升级脚本通过 mysqli 直连并打印连接信息与错误。
- PDO 适配器根据 adapter 类型构造 DSN 并创建连接。
章节来源
- config/config.php:15-52
- _'\tool/upgrade_v1.9.php:104-135
- plugin/alipay/sdk/lotusphp_runtime/DB/Adapter/ConnectionAdapter/DbConnectionAdapterPdo.php:5-34
二、权限错误(上传/缓存/模板下载失败)
症状
- 上传图片失败、模板在线下载失败、缓存写入失败。
排查步骤
- 使用内置检查:访问后台工具页面,查看 storage、images、theme 等目录的权限检测结果。
- 手动验证:使用 FileHelper::permission 或自行创建测试文件验证写权限。
- 修正权限:确保 Web 进程用户对目标目录具有写权限;Linux 下注意所有者与组;Windows 下注意 IIS/PHP 用户权限。
- 清理冲突文件:若出现临时文件(如 .tmp),确认可删除并重试。
章节来源
- admin/service/tool/ToolService.php:79-109
- core/support/FileHelper.php:319-347
三、URL 重写问题(404/路由失效)
症状
- 访问 /admin/ 或 /api/ 报 404。
- 前台路由无法解析。
排查步骤
- 确认 .htaccess 存在且被 Apache 加载(AllowOverride 启用)。
- 检查重写规则:确认静态资源不被误重写;API/后台/前台规则顺序正确。
- 服务器模式:若使用 PATH_INFO 或标准模式,确认 Router 能正确解析 REQUEST_URI 或 PATH_INFO。
- 反向代理/Nginx:若经 Nginx 反代,需配置等价的重写规则并将 Authorization 头透传。
章节来源
- .htaccess:10-45
- plugin/alipayf2f/sdk/lotusphp_runtime/Router/Router.php:40-66
四、登录失败与审计日志
症状
- 登录失败,提示密码错误或账号锁定。
- 需要追踪登录失败原因。
排查步骤
- 检查密码与账号状态:确认密码是否正确,账号是否被锁定。
- 查看审计日志:登录失败会写入审计日志,details 字段包含失败原因标签(如密码错误、账号不存在、账号锁定)。
- 逐步复现:在开发环境开启调试,观察前端返回的错误字段与后端日志。
章节来源
- front/service/user/LoginService.php:113-162
- core/service/admin/AdminLogDetail.php:21-34
五、系统日志查看与分析
- 未捕获异常:入口会将异常写入 PHP 错误日志(error_log),并根据 site.debug 决定是否输出调试页或 JSON 错误。
- 审计日志:登录成功/失败、管理员操作等会写入审计日志,可通过后台界面筛选查看。
- 云服务 API 日志:独立于主站,按 channel 与级别过滤,便于定位 API 请求问题。
建议
- 在生产环境关闭 site.debug,仅保留必要日志级别,避免日志膨胀。
- 定期归档与轮转日志文件,避免磁盘占满。
章节来源
- index.php:69-75
- front/service/user/LoginService.php:145-162
六、调试模式的启用与使用
- 站点调试:config/config.php 中的 DOU_DEBUG 控制是否开启站点调试;开启后未捕获异常会输出详细调试信息。
- 小程序调试:miniprogram/company/utils/env.ts 提供 isDebugEnv()/isServerDebug(),用于在非正式版或服务端调试时显示调试 UI。
- 最佳实践:生产环境务必关闭调试,避免泄露敏感信息。
章节来源
- config/config.php:45-52
- miniprogram/company/utils/env.ts:1-37
七、性能问题诊断与优化
- 数据库:检查慢查询、索引缺失;合理使用连接池与持久连接;避免大事务。
- 文件系统:确保 storage/images/theme 可写,减少权限检查开销;清理无用缓存。
- 安全限流:在 security.php 中配置 throttle,限制高频请求。
- 反向代理:配置可信代理 trusted_proxies,确保 IP 判定准确,避免误封禁。
章节来源
- config/security.php:51-87
八、不同环境的特殊问题处理
- Windows 环境
- 文件权限:确保 IIS/PHP 用户对 storage/images/theme 有写权限;注意大小写与路径分隔符。
- 路径与编码:确认站点根路径与配置文件中的路径一致;必要时调整字符集。
- 共享主机环境
- URL 重写:确认主机支持 .htaccess 与 mod_rewrite;否则需在主机面板配置等价规则。
- 数据库:确认远程访问权限与端口开放;部分主机需使用特定主机名或端口。
- 扩展:确认 PHP 已启用所需扩展(pdo_mysql/mysqli/fileinfo/zip 等)。
九、社区支持与问题反馈
- 官方文档与网站:访问项目官网获取最新文档与支持信息。
- 问题反馈:在官方渠道提交问题时,附上环境信息(PHP 版本、Web 服务器、数据库版本)、相关日志片段与复现步骤。
结论
通过理解入口引导、配置中心、URL 重写、权限检查、数据库连接与小程序调试能力,可以快速定位并解决 DouPHP 的安装与运行问题。建议在生产环境关闭调试、合理配置安全与限流、定期维护日志与缓存,以获得稳定高效的运行体验。
附录
- 常用检查清单
- 数据库连接:host/port/dbname/user/pass/prefix 是否正确。
- 文件权限:storage/images/theme 是否可写。
- URL 重写:.htaccess 是否生效,静态资源是否被误重写。
- 调试模式:生产环境是否关闭 DOU_DEBUG。
- 安全配置:trusted_proxies/trusted_hosts/throttle/session 是否合理。
- 小程序调试:仅在开发/试用环境开启。