空白页主因是错误被隐藏,需开启php错误显示:在public/index.php最开头启用display_errors并设error_reporting(e_all)。

空白页不是代码没输出,而是错误被吞了、路径错了、权限卡了,或者重写规则根本没生效——先暴露报错,再逐层验证。
让 PHP 错误直接炸出来
ThinkPHP 默认关掉 display_errors,白屏其实是“有错不吭声”。光改 APP_DEBUG => true 不够,得让 PHP 本身把错误打到页面上:
- 在
public/index.php最开头(<?php后第一行)、任何require前插入:error_reporting(E_ALL); ini_set('display_errors', '1'); - 刷新页面:如果出现红色
Fatal error: Class 'think\App' not found,说明已暴露问题;如果还是空白,说明错误发生在更早阶段(比如vendor/autoload.php加载失败或 PHP 版本不兼容) - 上线前必须删掉这两行——生产环境不能暴露错误信息
确认 Web 根目录是否真指向 public
ThinkPHP 6+ 强制要求 Web 服务器的根目录落在 public/ 下,设错会导致自动加载器路径崩坏,直接静默失败:
- 宝塔用户:站点 → 设置 → 网站目录 → 运行目录选
/public(用下拉菜单选,别手动输) - Nginx 用户:检查
server块里的root指令,必须是root /path/to/your-project/public;(末尾分号不能漏) - Apache 用户:确保
DocumentRoot指向public目录,且.htaccess文件存在并生效 - 快速验证:访问
http://你的域名/public/index.php,能打开说明入口路径没问题
检查 runtime 目录是否可写且属主正确
框架启动时要生成日志、缓存、模板编译文件,全靠 runtime/ 目录。给整个项目递归赋权不仅无效,还可能触发安全警告:
- 只对
runtime执行写权限:chmod -R 775 runtime - 确保属主与 PHP 进程用户一致:宝塔默认是
www,执行chown -R www:www runtime - 删除整个
runtime目录,让框架重新生成干净缓存(首次部署推荐) - 检查
runtime/log/下是否有按日期命名的日志文件,没有说明仍不可写
Nginx 伪静态必须用 try_files,别碰 if
老式 if (!-e $request_filename) { rewrite ... } 在 Windows 和部分 Nginx 版本下极易导致 $_SERVER['PATH_INFO'] 为空,ThinkPHP 8.0 依赖它解析路由,一空就静默失败:
- 删除所有
if重写块 - 在
location / { }里写标准规则:try_files $uri $uri/ /index.php?$query_string;(漏掉$uri/会导致/admin/这类带斜杠路径直接 404) - 快速验证:访问
http://你的域名/index.php/test,能通说明路由正常,问题纯属重写配置
真正卡住的地方往往不是报错内容本身,而是错误根本没显示出来——display_errors 没真开、root 指向错了一级、runtime 属主和 PHP 进程用户不一致、或者 try_files 少写了 $uri/。这四点顺序查下来,基本就见着底了。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











