thinkphp部署后白屏本质是php致命错误被静默屏蔽,须四步解决:一、在public/index.php最顶部(任何require前)加error_reporting(e_all)、ini_set('display_errors','1')、ini_set('log_errors','0');二、确保web根目录指向public/;三、赋予runtime/目录775权限并chown为web进程用户;四、注释think\initializer\error::register()禁用框架错误拦截。

ThinkPHP项目部署后白屏,本质不是代码没运行,而是PHP致命错误被静默吞掉或框架初始化卡在第一步。关键要绕过所有中间层,直接暴露原始报错。
一、强制让错误显示出来
APP_DEBUG设为true没用——它只管框架层异常,底层错误(如语法错、扩展缺失、autoload失败)照样白屏。必须在public/index.php最顶部、任何require之前插入:
- error_reporting(E_ALL);
- ini_set('display_errors', '1');
- ini_set('log_errors', '0');
注意:这三行必须在require __DIR__ . '/../vendor/autoload.php';之前,否则autoload失败就中断了,根本执行不到。
二、确认Web根目录指向public
90%的白屏源于此。ThinkPHP 6+要求Web服务器根目录必须是public/,而不是项目根目录(含app/、config/、vendor/的那一层)。否则:
- vendor/autoload.php路径错乱,报
Class 'think\App' not found - app/和config/目录可能被直接访问,造成源码泄露
- 静态资源(如public/static/)全部404
宝塔用户:网站设置 → 根目录 → 改为/www/wwwroot/your-site/public;Nginx用户:检查root指令是否指向.../public;Apache用户:确认DocumentRoot正确且.htaccess未被禁用。
三、检查runtime目录权限与写入能力
框架启动时需在runtime/下创建缓存、日志、模板编译文件。若不可写,初始化直接中断,连500都不返回。
- 仅对
runtime/执行写权限:chmod -R 775 runtime - 所属用户组必须匹配PHP进程用户(宝塔默认是
www,Nginx常为nginx):chown -R www:www runtime - 检查
runtime/log/下是否有按日期生成的日志文件;没有,说明写入失败
四、临时禁用ThinkPHP错误处理器
ThinkPHP 5.1+ 默认注册think\initializer\Error::register(),会拦截E_ERROR并转成500或静默丢弃。你看到的“空白”,其实是框架把原始致命错误吃了。
- 打开
thinkphp/base.php(TP6)或thinkphp/start.php(TP5) - 找到
think\initializer\Error::register();这一行,前面加//注释掉 - 保存后刷新,看是否出现红色堆栈
不复杂但容易忽略
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











