必须用composer create-project初始化ThinkPHP项目,因require仅安装核心包,不生成public/、app/、think脚本及autoload映射,导致Class 'think\App' not found或404;create-project才构建完整骨架并执行post-create脚本。

必须用 composer create-project 初始化项目,不是 composer require —— 后者只会拉核心包,缺入口、路由、命令行工具,启动必报 Class 'think\App' not found 或 404。
为什么 composer require topthink/think 会失败
ThinkPHP 不是普通 Composer 包,而是完整项目骨架。直接 require 只装 topthink/framework,不生成 public/index.php、think 脚本、config/ 目录和自动加载映射。
- 现象:运行
php think make:controller报错Command "make:controller" is not defined;访问首页 404 或白屏 - 原因:没有
think可执行文件,也没有vendor/autoload.php对应的 PSR-4 映射(create-project才会写入composer.json的"autoload"配置) - 补救无效:在已有项目里再跑一次
require不会补全缺失结构,只能删掉重来
composer create-project 的正确用法与版本控制
TP6、TP8 均适用该命令,但默认行为已变:最新 topthink/think tag 指向 TP8,TP6 已进维护期,不指定版本大概率装错。
- 装 TP8 稳定版:
composer create-project topthink/think tp8 - 装 TP6.1(推荐稳定分支):
composer create-project "topthink/think:^6.1" tp6(注意引号,避免 shell 解析^) - 装 TP7(如需尝鲜):
composer create-project "topthink/think:^7.0@beta" tp7 - 目录名
tp8是自定义的,不能是已存在目录;命令执行后,所有框架文件、.env、think脚本都在该目录下
.env 配置不生效?检查三件事
.env 优先级高于 PHP 配置文件,但加载时机早、路径敏感、权限受限,改了没反应基本卡在这三点。
立即学习“PHP免费学习笔记(深入)”;
- 位置必须在项目根目录(和
think文件同级),不是public/下,也不是app/里 - 必须取消注释关键行:
APP_DEBUG=true(否则错误静默)、DB_TYPE=mysql等数据库参数(格式是DB_HOST=127.0.0.1,不是嵌套数组) - 改完要清缓存:
rm -rf runtime/cache/;Linux/macOS 还要确认.env可被 Web 用户读取(ls -l .env,避免 root 创建后 www-data 无权读)
Web 服务器根目录必须设为 public/,否则直接暴露风险
这不是“建议”,是 ThinkPHP 的设计前提。入口统一走 public/index.php,所有敏感目录(.env、config/、app/)都在其上级,若 Web 根设错,这些文件可被直接下载。
- Apache:VirtualHost 的
DocumentRoot指向/path/to/your/project/public,且AllowOverride All - Nginx:配置中
root必须是/path/to/your/project/public,fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name(别漏掉$document_root) - 本地测试:用 PHP 内置服务器时,
php -S localhost:8000 -t public/,-t public/缺一不可 - 现象验证:如果访问
http://localhost/.env能下载文件,说明根目录配错了
最常被忽略的是 APP_DEBUG=true 没开,以及 public/ 根目录没对齐 —— 这两个问题不解决,后面调数据库、写路由全是黑盒。框架不会主动告诉你哪步错了,它只沉默地返回 500 或空白页。



















