thinkphp 3.2 上线必须关闭日志与编译缓存:先设 app_debug=false,再配置 log_record=false、log_exception_record=false、log_level='',并设 runtime/logs 为只读、runtime 不可写以阻止 common~runtime.php 生成。

ThinkPHP 3.2 默认在调试模式下会记录日志并启用多种缓存机制,但上线部署时必须关闭日志写入和不必要的缓存,否则可能引发磁盘爆满、性能下降或敏感信息泄露。关键不是只改一两个配置,而是同步处理入口开关、日志配置、缓存策略三处。
关闭日志记录(Runtime/Logs)
仅设置 LOG_RECORD => false 不够,因为框架仍可能因异常、SQL 或调试信息触发日志写入。需组合以下配置:
- 在 config.php 中明确关闭日志开关:
'LOG_RECORD' => false,'LOG_EXCEPTION_RECORD' => false,'LOG_LEVEL' => '', // 留空表示不记录任何级别 - 确保 入口文件 index.php 中已禁用调试模式:
define('APP_DEBUG', false);(若为 true,日志系统强制启用) - 检查 Runtime/Logs 目录权限:即使配置关闭,若目录可写且存在残留日志逻辑(如手动调用
Log::record()),仍可能生成文件。建议上线前清空该目录并设为只读(Linux 下chmod 555 Runtime/Logs)
停用编译缓存(common~runtime.php)
编译缓存虽提升性能,但会锁定代码结构,不利于热更新;且一旦生成失败或损坏,反而导致白屏。关闭方式是阻止其生成,而非删除文件:
- 核心前提:保持
define('APP_DEBUG', false);—— 这看似矛盾,实则关键:编译缓存只在APP_DEBUG=false且 Runtime 可写时自动生成;若你不需要它,就让生成条件不满足 - 最稳妥做法:将 Runtime 目录设为不可写(如 Linux 下
chmod 555 Runtime),框架检测失败后自动跳过编译流程 - 若已存在
common~runtime.php,直接删除即可,无需额外操作;后续请求将按常规流程加载类文件
清理与验证是否生效
配置修改后需主动清理旧缓存并观察行为变化:
- 执行一键清空:
可在控制器中临时添加方法:public function clearAllCache() { array_map('unlink', glob(RUNTIME_PATH.'*.php')); $this->deldir(RUNTIME_PATH.'Temp'); $this->deldir(RUNTIME_PATH.'Cache'); echo 'done'; } - 验证日志是否停止:
访问几次页面后检查Runtime/Logs是否无新文件产生;也可在代码中加file_put_contents('/tmp/logtest', 'hit', FILE_APPEND)辅助判断 - 验证编译缓存未加载:
查看Runtime/common~runtime.php是否不存在;或在Think.class.php的加载逻辑处加日志,确认未执行include RUNTIME_PATH.'common~runtime.php'
不复杂但容易忽略:日志和编译缓存的开关依赖同一根“保险丝”——APP_DEBUG。把它设为 false 是前提,再配合针对性配置,才能真正静默运行。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











