ThinkPHP 运行需严格满足 PHP 版本(如 TP6≥7.1、TP8≥8.0.2)、mbstring/pdo/openssl/curl 四大扩展、Web 服务器重写配置及 runtime 目录写权限,缺一即报错或白屏。

ThinkPHP 不是“装上就能跑”,环境不达标会直接报错或白屏,尤其 PHP 版本和几个关键扩展缺一不可。
PHP 版本必须严格匹配框架代际
不同 ThinkPHP 版本对 PHP 的容忍度极低,错一个点就可能 Fatal error: Uncaught Error: Typed property 或 Class 'think\App' not found。
- ThinkPHP 6.0 要求
PHP >= 7.1.0,但实际建议用7.3或7.4—— 7.4.0+ 的某些严格类型变更会让部分核心类加载失败 - ThinkPHP 8.0(已发布)强制要求
PHP >= 8.0.2,依赖属性类型声明(public string $name;)和联合类型(string|int),7.x 全系直接拒绝启动 - 别信“5.6 也能跑 TP6”这种过时说法:Composer 安装阶段就会拦截,
create-project命令直接退出并提示Your requirements could not be resolved
这四个 PHP 扩展一个都不能少
不是“推荐启用”,而是框架启动时就硬校验,缺任意一个都会在 index.php 第一行触发 Fatal error: Uncaught ErrorException: Required extension not loaded: mbstring 类错误。
-
PDO+ 至少一个驱动(如pdo_mysql):数据库连接底层强依赖,没它连database.php都读不到就崩了 -
mbstring:URL 解析、路由分词、中文路径处理全靠它,禁用后常见Route not found或乱码跳转 -
openssl:哪怕你不用 HTTPS,JWT、Session 加密、配置文件解密都默认走它,缺失会导致Unable to generate secure key -
curl:虽标“推荐”,但微信 SDK、支付回调、第三方登录等主流集成模块默认调用curl_init(),不装=功能残废
Nginx/Apache 重写配置写错,首页能开,路由全 404
ThinkPHP 默认用 PATH_INFO 模式解析 URL(如 /index/user/list),Web 服务器若没把请求正确转发给 index.php,所有非根路径请求都会 404。
立即学习“PHP免费学习笔记(深入)”;
- Apache:确认
mod_rewrite已启用,并且项目根目录的.htaccess文件存在且未被AllowOverride None屏蔽 - Nginx:必须在
server块里写try_files $uri $uri/ /index.php?$query_string;—— 少了$query_string,GET 参数会丢失;写成/index.php?/$1是旧版 Apache 规则,Nginx 下无效 - 别用 PHP 内置服务器(
php -S)跑正式开发:它不支持 PATH_INFO,只能靠QUERY_STRING传参,会导致路由行为异常,调试时容易误判逻辑问题
runtime 目录没写权限,缓存不生成,日志不记录,页面静默白屏
ThinkPHP 启动时会在 runtime 目录下自动生成 cache/、log/、route/ 等子目录。如果 PHP 进程用户(如 www-data 或 nginx)无写权限,不会报明显错误,而是直接卡在「空白响应」或返回 500 Internal Server Error 且无日志可查。
- 确保
runtime目录(或config/app.php中定义的root_path . 'runtime'路径)对 Web 用户可写:chmod -R 755 runtime或更安全的chown -R www-data:www-data runtime - 如果用了 Docker,注意挂载卷的 UID/GID 是否与容器内 PHP 进程用户一致,否则权限看似正常实则失效
-
public/static若启用了 Mix 编译,也需同样检查写权限,否则前端资源更新失败却不报错
最常被忽略的是扩展模块的“隐性依赖”——比如你以为只用了 MySQL,但 mbstring 缺失会导致模型查询结果中文字段截断,这种 bug 往往排查半天才想到去翻 phpinfo()。


















