ThinkPHP开发与生产环境核心区别在于配置行为、加载顺序和运行约束:开发重迭代调试,生产重稳定安全;配置优先级为.env>运行时设置>PHP配置文件>框架默认值;入口必须限定public目录,权限需严格管控;数据库读写分离、多应用配置、调试关闭、定时任务及备份均须按生产规范执行。
ThinkPHP部署和开发环境的核心区别不在代码本身,而在配置行为、加载顺序与运行约束。开发环境追求快速迭代和调试便利,生产部署则必须确保稳定、安全与可追溯。两者配置逻辑一致,但生效方式、优先级和校验要求完全不同。
ThinkPHP的配置不是“改完就生效”,而是按固定顺序逐层覆盖:
config('app.debug', true) 可临时修改,但仅对当前请求有效常见问题:改了 config/database.php 却连不上库?先检查 .env 是否存在同名键,再清空 runtime/config.php 和 runtime/cache/ ——否则缓存会持续生效。
开发环境常把整个项目根目录设为 Web 入口,便于调试;但生产环境必须锁定在 public/ 目录:
立即学习“PHP免费学习笔记(深入)”;
public/,而非项目根目录thinkphp/、apps/、vendor/ 等目录对外不可访问,这是基础安全防线public/ 可读可执行,runtime/ 和 config/ 目录需可写(但禁止 Web 用户写入),建议用 chown -R www-data:www-data 统一属主开发时随便写的配置,在生产环境可能直接报错:
'deploy' => 1 和 'rw_separate' => true 写在同一连接配置内(如 connections.mysql),且 'read' 是数组套数组,'write' 是单层数组app_multi => true),子应用配置(如 app/admin/config/app.php)不会自动合并进全局配置,只有被路由命中时才加载;想全局生效,必须放在根目录 config/ 下APP_DEBUG,并确认 app.trace 为 false,避免敏感信息泄露开发环境可以临时跑个 php think timer 测试,但生产环境必须有可持续机制:
php think queue:listen)要配合 supervisor 或 systemd 管理进程生命周期,防止意外退出