composer create-project 后的目录名是强制创建的子目录名,非路径;必须先 cd 到目标父目录再执行,且需确保 web 服务器 DocumentRoot 指向 project/public。

composer create-project 命令本身不支持用 --directory 或类似参数直接指定安装路径,它只能在当前工作目录下新建子目录。所谓“指定目录”,实际是靠先 cd 到目标父目录,再执行命令来实现的。
composer create-project 后面的目录名不是可选参数,而是强制创建的子目录名
- 命令形如:
composer create-project topthink/think tp6 -
tp6是当前目录下将被创建的新文件夹名,不是路径;它不能包含/或../ - 如果你当前在
D:\phpstudy\www,执行该命令就会生成D:\phpstudy\www\tp6 - 如果你误在
C:\下执行,项目就会落到C:\tp6—— 这会导致 web 服务器无法正确指向public/,后续 404 风险极高
常见错误现象:
- 浏览器访问时空白页或报
Class 'think\App' not found -
php think报错Command "make:controller" is not defined -
public/index.php提示require(): Failed opening required '.../vendor/autoload.php'
所以必须:
-
cd切换到你希望存放项目的父目录(通常是 web 服务器的站点根目录,比如D:\phpstudy\www或/var/www/html) - 确认该目录有写权限(Windows 一般无感;Linux/macOS 注意
runtime后续需chmod -R 777 runtime) - 再运行命令,例如:
composer create-project "topthink/think:^6.1" myapp
为什么必须显式指定版本号 ^6.1
TP6 已进入维护期,topthink/think 包的 dev-main 分支已指向 TP8,latest 标签也常被误推为 TP5 的旧版。
立即学习“PHP免费学习笔记(深入)”;
不加版本约束的后果:
-
composer create-project topthink/think demo→ 可能拉下 TP5.1 或 TP8-alpha -
composer create-project topthink/think(无项目名)→ 报错或创建空目录
正确写法只有两种:
-
composer create-project "topthink/think:^6.1"(推荐,拉最新 TP6 稳定版) -
composer create-project "topthink/think:6.1.2"(锁定小版本,适合生产环境)
注意双引号:Windows CMD 中若不用引号,^ 会被系统当作转义符吃掉,导致版本解析失败。
安装后不能直接运行,public/ 必须设为 Web 根目录
ThinkPHP6 不再允许把整个项目根目录当 web 入口。所有 HTTP 请求必须经由 public/index.php 转发,否则:
- 路由匹配失效(
Route::get()不触发) - 静态资源(CSS/JS)返回 404
-
<strong>ROOT</strong>变量为空或错乱 -
.env文件无法加载(因未经过入口文件初始化环境)
配置要点:
- Apache:虚拟主机
DocumentRoot指向your_project/public - Nginx:
root配置项设为/path/to/your_project/public - phpstudy / 小皮面板:“网站目录”填
tp6/public(不是tp6)
漏掉这步,哪怕 composer 成功、php -v 正常,页面也一定打不开。
composer create-project 的“指定目录”本质是路径控制权移交给了 shell 的当前工作目录,而不是命令本身的参数能力。最容易被忽略的其实是第三步——web 服务器是否真的指向了 public/。很多人反复重装 TP6,其实只差改一行配置。



















