ThinkPHP3.2编译缓存仅在部署模式(APP_DEBUG=false)且Runtime目录可写时首次自动生成;可通过访问入口URL、命令行执行php index.php或临时添加Think::buildApp()手动触发;验证需清空临时缓存、测响应时间、查日志及修改核心文件确认是否加载缓存。

ThinkPHP3.2项目首次运行时,框架会自动检测并生成编译缓存文件,该过程仅触发一次,后续请求直接加载缓存以跳过大量文件IO,提升执行速度;若Runtime目录不可写、应用模式配置错误或处于调试模式,编译缓存将不会生成。
确认编译缓存触发前提
确保当前为部署模式(【APP_DEBUG必须为false】),且应用目录Application及其子目录Runtime具备可写权限。Windows系统下需检查目录属性,Linux/macOS下需执行chmod -R 755 Application/Runtime;若Runtime不存在,框架会在首次访问时尝试自动创建,但失败则整个编译流程终止。
检查入口文件index.php中是否定义了define('APP_DEBUG', false);,此项为硬性开关——只要为true,编译缓存机制完全禁用,无论其他条件是否满足。
手动触发编译缓存生成
方法一:直接访问应用入口URL(如http://localhost/index.php),页面正常显示欢迎内容后,立即检查Application/Runtime/common~runtime.php是否存在。此文件即普通模式下的编译缓存主体,包含合并压缩后的核心类、函数库与行为定义。
立即学习“PHP免费学习笔记(深入)”;
方法二:在命令行中进入项目根目录,执行php index.php(需PHP CLI环境)。该方式绕过Web服务器限制,对权限和路径更敏感,适合排查Web方式失败原因。
方法三:在任意控制器中临时加入强制编译逻辑:if (!is_file(RUNTIME_PATH.'common~runtime.php')) { \Think\Think::buildApp(); }。注意此代码仅用于调试,上线前必须删除,否则每次请求都尝试重建缓存,彻底失去性能优势。
验证编译缓存是否生效
第一步:清空Runtime/Temp和Runtime/Cache目录,避免旧缓存干扰判断。
第二步:打开调试工具(如Chrome DevTools),切换到Network标签,刷新首页,观察首屏响应时间是否明显缩短(通常下降30%以上)。
第三步:查看服务器端日志或在ThinkPHP/Library/Think/Think.class.php第127行附近添加file_put_contents('/tmp/think_debug.log', "Loaded: ".RUNTIME_PATH.'common~runtime.php'."\n", FILE_APPEND);,再次访问后检查/tmp/think_debug.log中是否出现“Loaded”记录——有则说明框架确实加载了编译缓存文件,而非逐个引入源文件。
第四步:修改一个核心类(如ThinkPHP/Library/Think/Model.class.php)中的任意注释,保存后刷新页面;若页面内容未变且无报错,证明编译缓存已生效——因为框架不再读取原始Model.class.php,而是使用缓存中已合并的版本。



















