必须确保php -v≥8.0.0,否则composer create-project会静默降级到tp6.x导致class 'think\app' not found;需同时验证cli与fpm版本一致,并启用mbstring、openssl、pdo、pdo_mysql、fileinfo、curl扩展,用create-project初始化项目且web根目录必须指向public子目录。

php -v 必须 ≥ 8.0.0,否则 composer create-project 会静默降级到 ThinkPHP 6.x,后续所有命令(如 php think)都会报 Class 'think\App' not found —— 这不是安装失败,是根本没装对版本。
确认 PHP CLI 和 PHP-FPM 是同一版本
很多人在宝塔里选了 PHP 8.1,但终端执行 php -v 显示 7.4,或者 Nginx 实际跑的是另一套 FPM。必须同时满足:
- 终端运行
php -v输出 ≥ 8.0.0(推荐 8.1 或 8.2) - 查 PHP-FPM 进程用的二进制:运行
ps aux | grep php-fpm,看到类似/usr/bin/php-fpm81,再用它验证:/usr/bin/php-fpm81 -v - 缺一不可,否则
composer安装时会按 CLI 版本决策,而网页请求却由低版本 FPM 执行,直接报错
装完 PHP 后必须启用这些扩展
ThinkPHP 8.0 不会明确报“缺 mbstring”,但路由加载失败、数据库连接中断、日志写不进 runtime/ 都可能源于此。验证命令:
php -m | grep -E "mbstring|openssl|pdo|pdo_mysql|fileinfo|curl"
常见漏项和处理:
-
fileinfo:CentOS 7 默认不带,需yum install php-fileinfo;Alibaba Cloud Linux 3 还要先装compat-openssl10 -
pdo_mysql:不是mysql,也不是mysqli,必须是pdo_mysql;Ubuntu 用户注意/etc/php/8.1/fpm/php.ini和/etc/php/8.1/cli/php.ini是两个文件,Nginx 只读 FPM 的配置 - 改完
php.ini后,必须重启 PHP-FPM:systemctl restart php81-fpm(或对应服务名),不重启等于没改
用 create-project 初始化,别 require
composer require topthink/think 只拉核心包,没有 public/、没有 think 命令入口、没有默认路由,必然报错。正确做法:
- 进目标目录(如
/www/wwwroot/myapp),执行:composer create-project topthink/think . --no-interaction -vvv - 加
-vvv能看到实际下载的包名和版本,确认末尾是topthink/framework v8.x.x,不是v6.x.x - 国内务必提前设镜像:
composer config -g repo.packagist https://mirrors.aliyun.com/composer/ - 如果中途断网或权限不足,
vendor/可能残缺——不要删整个项目,进根目录直接运行composer install
public 目录必须设为 Web 根,且 runtime 可写
Nginx 把 root 指向项目根目录(含 app/、config/)是高危操作,敏感文件可被直接下载。必须:
- 站点配置中
root设为/www/wwwroot/myapp/public,不是/www/wwwroot/myapp -
runtime/目录需由 PHP-FPM 进程用户(如www或www-data)可写:chown -R www:www runtime/,并确保存在子目录:mkdir -p runtime/log runtime/cache runtime/session - 如果
public/index.php报Failed to open stream: No such file or directory,说明vendor/autoload.php没生成,90% 是网络中断或权限问题,不是代码问题
composer create-project 成功后,public/ 下的 index.php 能访问只是第一步;真正容易被忽略的是:PHP-FPM 用户对 runtime/ 的属主权限、fastcgi_param SCRIPT_FILENAME 是否用了 $realpath_root、以及 .env 里 APP_DEBUG=true 是否开启——没开的话,所有错误都被吞掉,只剩白屏或 500。php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











