ThinkPHP 8.0最低要求PHP 8.0.2,非8.0.0或8.0;需启用mbstring、pdo、openssl、curl四项扩展;Nginx重写规则必须含$query_string;禁用php -S,runtime目录须赋予Web服务器用户读写权限。

PHP 8.0.2 是 ThinkPHP 8.0 的最低要求,不是 8.0.0,也不是 8.0 —— 少一个补丁号就可能启动失败。
php -v 显示 8.0.0 或 8.0.1 就会报错
- ThinkPHP 8.0 使用了 PHP 8.0.2 引入的联合类型(如
string|int)和属性类型声明的修复逻辑,8.0.0/8.0.1中部分反射行为不一致,会导致Class 'think\App' not found或Fatal error: Uncaught Error: Typed property - Composer 安装阶段就会拦截:运行
composer create-project topthink/think时直接退出,并提示Your requirements could not be resolved,不会给你机会进到index.php
四个扩展缺一不可,且版本有隐性依赖
-
mbstring:路由解析、中文路径分词强依赖,禁用后常见Route not found或跳转乱码 -
pdo:数据库驱动基础,没它连Db::table('user')->select()都抛Class 'PDO' not found -
openssl:即使不用 HTTPS,JWT token 生成、Session 加密、配置文件解密都默认启用,缺失会卡在Unable to generate secure key -
curl:微信 SDK、支付回调、第三方登录模块默认调用curl_init(),不装等于砍掉集成能力
注意:
curl不是“可选”,而是「功能级硬依赖」——TP8 的think\facade\Http默认走 cURL,没扩展就直接Call to undefined function curl_init()
Nginx/Apache 重写规则写错,首页能开,其他全 404
- Apache:确认
mod_rewrite已启用,且项目根目录下.htaccess文件存在、未被AllowOverride None屏蔽 - Nginx:必须写成
try_files $uri $uri/ /index.php?$query_string;- 少了
$query_string→ GET 参数丢失,$_GET为空 - 写成
/index.php?/$1→ 这是旧版 Apache 规则,在 Nginx 下完全无效,所有带参数的请求 404
- 少了
别用 php -S 做开发服务器:它不支持 PATH_INFO,TP8 路由默认靠它识别 /index/user/list,强行用会退化成 query string 模式,导致调试时误判业务逻辑。
runtime 目录权限问题最隐蔽:没写权限不会报错,而是静默白屏 + 缓存不生成 + 日志空白。确保 www-data(Ubuntu)或 nginx(CentOS)用户对 runtime/ 有 rwx 权限,且子目录(cache/、log/、route/)能自动创建。
立即学习“PHP免费学习笔记(深入)”;



















