Composer安装ThinkPHP应使用create-project命令创建完整项目结构,而非require;需确保PHP与Composer环境就绪且版本匹配,Web服务器root必须指向public目录,否则导致404等问题。

Composer 安装 ThinkPHP 不需要手动下载 ZIP 或克隆仓库,直接用 create-project 命令即可初始化标准项目结构。但很多人卡在「安装后访问 404」「vendor/autoload.php 找不到」「命令行报错找不到 php」这几处,核心原因是没理清 Composer、PHP 环境和 Web 服务器路径三者的协作关系。
确认 PHP 和 Composer 已就绪且版本匹配
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=行的注释 - Windows 下提示
php is not recognized:PHP 安装目录(含php.exe)未加入 PATH
用 create-project 创建 TP 项目(推荐方式)
不要用 composer require topthink/think 往空目录里硬塞,那只会拉取核心包,缺框架骨架、入口文件和配置目录。正确做法是让 Composer 自动构建完整项目:
立即学习“PHP免费学习笔记(深入)”;
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
Web 服务器配置关键点(Nginx 示例)
线上部署必须正确设置 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),不是项目根目录 - ThinkPHP 默认开启
pathinfo模式,Nginx 需保证$query_string正确传递,不能写成$args(旧版配置容易错) - Apache 用户请确保
.htaccess在public/下且AllowOverride All已启用
最常被忽略的是 public 目录的定位——它既是 Web 入口,又是静态资源(CSS/JS)存放地,也是所有路由请求的统一出口。一旦 Web 服务器 root 设错,整个框架就“看不见”了,连错误提示都不显示,只返回 404 或空白页。











