thinkphp空白页主因是错误被屏蔽、入口目录错误、runtime不可写或nginx伪静态配置不当;需开启php错误显示、确保documentroot指向public、chmod 775 runtime并chown为www、改用try_files替代if重写。

ThinkPHP空白页不是代码没运行,而是错误被压住了、入口走错了、缓存写不进、或路由没接上——四类问题覆盖九成以上白屏场景。直接暴露报错、切对public目录、锁死runtime权限、换掉伪静态规则,基本就能恢复。
让PHP把错误打出来
默认display_errors=Off,语法错、类找不到、扩展缺失全被吞掉,页面就静默变白。光开APP_DEBUG没用,得让PHP底层说话:
- 改php.ini或宝塔站点PHP配置:把display_errors = Off改成On,同时确认error_reporting = E_ALL(不能带
& ~E_NOTICE这类过滤) - 改完必须点「保存」+「重启PHP服务」,只重载不生效
- 实在找不到配置位置,临时在
public/index.php第一行加两行:ini_set('display_errors', '1');<br>error_reporting(E_ALL);
上线前务必删掉
Web根目录必须落在public里
ThinkPHP 6+ 强制要求DocumentRoot指向public/,设成项目根目录(含app、config、vendor那层)会导致自动加载失败,直接Fatal error: Class 'think\App' not found且不报错。
- 宝塔用户:网站 → 设置 → 根目录 → 改为
/www/wwwroot/your-site/public - Nginx用户:检查server块里的
root指令,必须是root /path/to/your-project/public;(末尾分号不能漏) - 确认
public/index.php真实存在,权限至少644 - 别用
php think run测试——它走CLI模式,和Web环境完全隔离
runtime目录要可写,但只限它自己
框架运行时生成日志、缓存、模板编译文件全靠runtime/。给整个项目递归755不仅无效,还可能触发安全警告。
- 只对
runtime及其子目录赋权:chmod -R 775 runtime - 确保属主与PHP进程用户一致:宝塔默认是
www,执行chown -R www:www runtime - 检查
runtime/log/下是否有按日期命名的日志文件,没有说明不可写或日志类型被设成test - 刚部署建议先删掉整个
runtime目录,让框架重新生成干净缓存
Nginx伪静态别用if,改用try_files
老式if (!-e $request_filename) { rewrite ... }在Windows和部分Nginx版本下极易导致$_SERVER['PATH_INFO']为空,ThinkPHP 8.0依赖它解析路由,一空就静默失败。
- 删除所有
if重写块 - 在
location / { }里写标准规则:try_files $uri $uri/ /index.php?$query_string; - 子目录部署(如
/myapp/)时,location要带前缀,且APP_URL或url_domain配置需同步补上前缀
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











