




Composer安装ThinkPHP应使用create-project命令创建完整项目结构,而非require;需确保PHP与Composer环境就绪且版本匹配,Web服务器root必须指向public目录,否则导致404等问题。
Composer 安装 ThinkPHP 不需要手动下载 ZIP 或克隆仓库,直接用 create-project 命令即可初始化标准项目结构。但很多人卡在「安装后访问 404」「vendor/autoload.php 找不到」「命令行报错找不到 php」这几处,核心原因是没理清 Composer、PHP 环境和 Web 服务器路径三者的协作关系。
ThinkPHP 6.x 要求 PHP >= 7.2(推荐 7.4+ 或 8.x),TP 7.x 则强制要求 PHP >= 8.1。运行以下命令验证:
php -v composer -V
常见问题:
Command 'composer' not found:未将 Composer 全局 bin 目录加入系统 PATH,Linux/macOS 可执行 export PATH="$HOME/.composer/vendor/bin:$PATH" 临时修复;Windows 需手动添加 %USERPROFILE%\AppData\Roaming\Composer\vendor\bin 到环境变量PHP Startup: Unable to load dynamic library 'xxx':扩展(如 openssl、pdo_mysql)未启用,在 php.ini 中取消对应 ;extension= 行的注释php is not recognized:PHP 安装目录(含 php.exe)未加入 PATH不要用 composer require topthink/think 往空目录里硬塞,那只会拉取核心包,缺框架骨架、入口文件和配置目录。正确做法是让 Composer 自动构建完整项目:
composer create-project topthink/think tp-demo
若需指定版本(例如 TP 6.1 LTS):
composer create-project "topthink/think:^6.1" tp-demo
说明:
tp-demo 是项目根目录名,会自动生成 app/、config/、public/、vendor/ 等标准结构public/ 是 Web 入口目录,所有 HTTP 请求必须指向此处(Nginx/Apache 配置 root 要设为 ./public,不是项目根目录)-vvv 查看详细日志,或换国内镜像:composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/
不配 Nginx/Apache 也能跑起来,进入项目根目录后执行:
cd tp-demo php think run
默认监听 http://127.0.0.1:8000,浏览器打开即可看到 TP 欢迎页。注意:
php think run 是 ThinkPHP 自带的命令,依赖 think 可执行脚本,该脚本在项目根目录下,不能在 public/ 或 app/ 内执行Could not open input file think,说明当前目录不是项目根目录,或 think 文件权限不足(Linux/macOS 下可 chmod +x think)php think run -p 8080
线上部署必须正确设置 document root 和 pathinfo 支持,否则路由 404、静态资源 404、POST 数据为空等问题全来。Nginx 配置片段示例:
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
重点:
$document_root 必须指向 ./public 目录(例如 /var/www/tp-demo/public),不是项目根目录pathinfo 模式,
Nginx 需保证 $query_string 正确传递,不能写成 $args(旧版配置容易错).htaccess 在 public/ 下且 AllowOverride All 已启用最常被忽略的是 public 目录的定位——它既是 Web 入口,又是静态资源(CSS/JS)存放地,也是所有路由请求的统一出口。一旦 Web 服务器 root 设错,整个框架就“看不见”了,连错误提示都不显示,只返回 404 或空白页。