页面空白但没报错,首要确认php错误显示是否被关闭:需开启display_errors和error_reporting,或在index.php顶部临时设置;tp6调试失效需检查.env位置、runtime缓存及app_env环境;500空白页优先排查vendor/autoload.php加载失败;路由空白则检查中间件异常、路由文件加载路径及控制器return缺失。

页面空白但没报错?先确认 PHP 错误是否真的被屏蔽了
ThinkPHP 默认在生产环境下关闭错误显示,display_errors 关为 Off,连 Parse error 都不输出,只剩一片白。这不是框架问题,是 PHP 自身的“静默失败”机制在起作用。
实操建议:
- 打开
php.ini,确认display_errors = On且error_reporting = E_ALL - 如果用的是 Nginx + PHP-FPM,还要检查
php-fpm.conf或池配置里是否覆盖了php_admin_flag[display_errors] = on - 实在找不到配置位置,直接在入口文件
public/index.php顶部加两行:error_reporting(E_ALL);<br>ini_set('display_errors', '1');(仅调试用,上线前必须删) - 注意:某些虚拟主机或宝塔面板会强制关闭
display_errors,此时只能靠日志——查php_error.log或 ThinkPHP 自己的runtime/log/下的日期文件
TP6 的 AppDebug 开关没生效?检查环境变量和配置加载顺序
ThinkPHP 6 依赖 APP_DEBUG 环境变量控制调试模式,但它不是写在代码里就生效的——它必须在框架启动前就被读取,且不能被后续配置覆盖。
常见错误现象:
- 改了
.env文件里的APP_DEBUG=true,页面还是白 - 在
index.php里手动putenv('APP_DEBUG=true')没反应
原因和解决:
-
.env文件必须放在项目根目录(与app/、think同级),不是public/下 - 确保
composer install后没有残留旧的runtime/缓存,删掉整个runtime/目录再试 - 检查是否在
config/app.php里硬编码写了'debug' => false,这会覆盖APP_DEBUG - TP6.1+ 支持多环境,如果
APP_ENV=prod,即使APP_DEBUG=true也会被忽略——优先保证APP_ENV=dev
空白页伴随 500 错误?重点排查 vendor/autoload.php 加载失败
ThinkPHP 启动第一步就是加载 Composer 自动加载器,一旦 vendor/autoload.php 找不到、权限不对或 PHP 版本不兼容,就会直接 500 白屏,连框架初始化都进不去。
使用场景:刚执行完 composer install 或迁移服务器后。
实操建议:
- 在
public/index.php最开头加一行:die(file_exists(__DIR__.'/../vendor/autoload.php') ? 'autoload exists' : 'autoload missing');
- Linux 下检查
vendor/目录权限:Web 用户(如www-data)必须有读+执行权限,chmod -R 755 vendor/是安全底线 - 确认 PHP 版本满足要求:TP6.3 要求 PHP >= 7.2.5;若用 PHP 8.2+,留意某些旧扩展(如
ext-mcrypt已移除)导致composer autoload初始化崩溃 - 如果用宝塔或 Docker,注意
vendor/是否被挂载覆盖、或构建时未正确执行composer install --no-dev
路由没匹配到却不出错?可能是 Route::rule() 和中间件冲突
页面空白但 HTTP 状态码是 200,说明请求进了框架,但最终没返回内容——典型表现是控制器方法根本没执行,或者执行了但没 return 或 echo。
容易踩的坑:
- 在全局中间件里抛了异常但没被捕获(比如数据库连接失败),又没开启调试,就吞掉了所有输出
- 自定义路由规则写在了
app/route.php,但该文件没被加载(TP6 默认只加载route/app.php) -
Route::rule('test','index/test')写错大小写(如Index/Test),而 Windows 下不敏感、Linux 下敏感,本地正常上服务器变空白 - 控制器方法没加
return,例如写了$this->success('ok')却忘了这是 ThinkPHP 的响应构造器,必须return $this->success(...)
快速验证:在 app/middleware.php 里临时加个中间件,dump('middleware hit');,看它是否执行——能打出来,说明路由通了;打不出来,问题还在前面环节。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











