ThinkPHP新版项目必须用composer create-project初始化,不能用require:前者生成含public/、app/、.env等完整骨架,后者仅装核心包,缺失入口和配置,导致Class 'think\App' not found或404。

ThinkPHP新版项目不能“安装”,必须用 composer create-project 初始化一个完整可运行的项目结构。用 composer require 只会拉取核心类库,缺 public 入口、app 目录、think 命令脚本和路由配置,必然报 Class 'think\App' not found 或 404。
第一步:确认环境并执行 create-project
确保已安装 PHP 8.1+(TP 8 要求)、Composer,并能正常运行 composer --version。在空白目录中执行:
-
composer create-project topthink/think myapp(默认最新稳定版) - 指定版本更稳妥:
composer create-project topthink/think myapp@8.0 - 国内慢可加参数:
--prefer-dist --stability=stable
命令执行完后,myapp 目录下会生成标准结构:public/、app/、config/、runtime/、.env 等一应俱全。进入目录运行 php think version 能输出版本号,说明初始化成功。
第二步:Web 服务器必须指向 public 目录
ThinkPHP 是单入口架构,所有请求必须经 public/index.php 调度。若把整个项目根目录设为网站根目录,会导致:
立即学习“PHP免费学习笔记(深入)”;
- config/、app/ 等敏感目录被直接访问,存在源码泄露风险
- vendor/autoload.php 找不到,启动失败
- 静态资源(如
public/static/)全部 404
实操配置:
-
Apache:虚拟主机
DocumentRoot设为/path/to/myapp/public,对应<Directory>块内启用AllowOverride All -
Nginx:
root指向/path/to/myapp/public,并配置标准重写规则:location / { if (!-e $request_filename) { rewrite ^(.*)$ /index.php?s=$1 last; } } -
宝塔/AMH 等面板:站点设置里手动把“网站根目录”改为
public子目录
第三步:检查 runtime 权限与 .env 配置
runtime/ 是日志、缓存、Session 的存放目录,必须可写:
- Linux/macOS:
chmod -R 755 runtime/(或更宽松的777仅限开发环境) - Windows:确保 Apache/IIS 进程用户对该目录有修改权限
.env 文件默认已生成但全部注释,它优先级高于 PHP 配置文件:
- 不要改
config/database.php—— 改了也不生效 - 打开
.env,取消注释并填写数据库、调试开关等关键项,例如:APP_DEBUG = trueDB_HOST = 127.0.0.1DB_NAME = mydb
第四步:部署时别复制 vendor,要重新 install
本地开发好的 vendor/ 不能直接上传到服务器。原因包括:
- 本地和服务器 PHP 版本、扩展可能不同,autoload 缓存不兼容
- 开发依赖(如 phpunit)不该出现在生产环境
- Git 通常忽略
vendor/,上传后为空
正确做法:
- 上传前删掉本地
vendor/和runtime/ - 只上传
composer.json、composer.lock及其余源码 - 在服务器项目根目录执行:
composer install --no-dev --optimize-autoloader - 确认
vendor/autoload.php存在且可读,opcache.enable_cli=1已启用(否则php think命令失败)



















