Composer安装ThinkPHP5需确保PHP版本(TP5.1需5.6.0–7.x)、指定版本(如5.1.41)、用create-project而非require,并配置runtime权限与.env文件,否则将因版本不兼容、命令误用或权限不足导致失败。

Composer 安装 ThinkPHP5 项目不是“教程问题”,而是“环境与命令组合的精准执行问题”——只要 PHP 版本、Composer 配置、目标版本三者对齐,create-project 一行就能跑起来;错一个,就会卡在 autoload 失败、vendor 缺失或 require 报错。
确认 PHP 版本是否支持 TP5.1/5.0
TP5.0 要求 PHP >= 5.4,但实际部署中,PHP 7.0+ 才稳定;TP5.1 明确要求 PHP >= 5.6.0,且不兼容 PHP 8.0+(官方未适配)。很多报错如 ParseError: syntax error, unexpected token "string" 就是 PHP 8 强制解析了 TP5.1 的字符串类型注解导致的。
- 运行
php -v确认当前 CLI 使用的 PHP 版本 - 若系统有多个 PHP(如 macOS 用 Homebrew 装了 php@8.1),需确保
composer调用的是 PHP 7.4 或 7.3(例如:用php74 -d memory_limit=-1 /usr/local/bin/composer create-project topthink/think=5.1.41) - TP5.1 最后稳定版是
5.1.41,不要用dev-master或无版本号的create-project topthink/think,否则可能拉到破坏性更新
用 create-project 拉取指定版本,别用 require
composer require topthink/think 是给已有项目加依赖,不是初始化 TP5。它不会生成 public/index.php、不会写入基础路由和配置,更不会自动执行 think 命令初始化目录结构——结果就是 vendor 里有代码,但整个项目根本跑不起来。
- 正确命令是:
composer create-project topthink/think=5.1.41 myapp --prefer-dist -
--prefer-dist强制走压缩包而非 Git 克隆,避免因网络问题中断或权限错误 - 如果提示
Could not find package topthink/think,大概率是 Composer 镜像源没切回官方或阿里云(国内推荐composer config -g repo.packagist https://mirrors.aliyun.com/composer/)
安装后必须手动处理 runtime 目录权限和 .env
TP5 启动时会尝试写日志、缓存、模板编译文件到 runtime/,但 Composer 默认拉下来的目录权限属于当前用户,Web 服务器(如 nginx)往往以 www-data 或 _www 运行,没有写入权限。现象是首页白屏,Nginx 错误日志里出现 file_put_contents(/path/runtime/log/...): failed to open stream: Permission denied。
立即学习“PHP免费学习笔记(深入)”;
- 执行
chmod -R 755 runtime/不够,要改成chmod -R 775 runtime/(或更安全地:用chown -R $USER:www-data runtime/ && chmod -R 775 runtime/) -
.env文件默认不存在,需复制.env.example并修改APP_DEBUG=true才能看到错误详情;生产环境务必设为false,否则泄露路径和配置 - 别直接改
config/app.php开启 debug,TP5.1 优先读.env,硬编码会被覆盖
启动前检查 public/index.php 是否指向正确入口
有些镜像或定制版打包会把 index.php 放错位置,或修改了 define('BIND_MODULE', ...) 导致请求不进路由。最常见表现是访问 /public 显示目录列表,或直接 404(Apache 未启用 mod_rewrite)或 500(PHP 解析失败)。
- 确认 Web 根目录指向的是
public/,不是项目根目录(否则vendor/可被直接下载) - 打开
public/index.php,检查第 12 行左右是否为:require __DIR__ . '/../thinkphp/start.php';—— 如果路径是../thinkphp/base.php或其他变体,说明框架结构被破坏 - 用内置服务器快速验证:
cd public && php -S localhost:8000 router.php,能跑通再配 Nginx/Apache
真正卡住人的从来不是“怎么装”,而是 PHP 版本和 TP5 小版本的隐式绑定、create-project 和 require 的语义混淆、以及 runtime 权限这种看似无关却致命的细节。











