composer怎么安装thinkphp6_composer怎么快速部署tp6【实操】

2次阅读

应使用 composer create-project topthink/think tp6-demo 直接创建TP6项目,避免手动初始化导致结构缺失;装完须配置 .env 启用调试并设置数据库参数,注意编码与权限;运行前确保 think 可执行、PHP版本≥7.2.5且扩展启用;上线前清理 runtime 和 vendor,用 composer install –no-dev 部署。

composer怎么安装thinkphp6_composer怎么快速部署tp6【实操】

直接用 composer create-project 装 TP6,别手动生成 composer.json

TP6 官方早就不推荐手动 init 再 require 的方式了——容易漏掉 thinkphp/think 的根目录结构、自动加载配置和内置命令行入口。直接拉完整项目骨架最稳。

实操命令:
composer create-project topthink/think tp6-demo

  • 默认装最新稳定版(目前是 v6.3.x),加 @v6.2 可指定小版本,比如 topthink/think@v6.2.10
  • 别用 --prefer-dist 强制走压缩包:TP6 有些测试文件或 stub 在 dist 包里被删了,会导致 php think make:controller 报错
  • 如果卡在 Cloning into... 或提示 gitHub rate limit,换国内镜像源:composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/

装完必须立刻改 .env,否则 php think 会报错或连不上数据库

TP6 启动时默认读 .env,但新项目生成的 .env 是空的,且没开启 APP_DEBUG,导致错误全被吞掉,只看到白屏或 500。

最小可用配置(放到项目根目录):

APP_DEBUG = true APP_ENV = local DATABASE_HOST = 127.0.0.1 DATABASE_PORT = 3306 DATABASE_NAME = your_db_name DATABASE_USER = root DATABASE_PASS =
  • DATABASE_PASS 留空也要写出来,否则框架解析失败,报 undefined index: password
  • windows 下用记事本保存 .env 必须选「UTF-8 无 bom」,否则 think 命令直接退出不报错
  • 别把 .env 提交到 Git:TP6 默认已加进 .gitignore,但第一次初始化时有人会手动生成并 commit

php think 命令不生效?检查 think 文件权限和 PHP CLI 配置

linux/macos 下装完运行 php thinkPermission denied,或 Windows 下提示“不是内部或外部命令”,基本就两个原因。

立即学习PHP免费学习笔记(深入)”;

  • Linux/macOS:chmod +x think,TP6 的 think 是可执行脚本,不是纯 PHP 文件
  • Windows:确保 PHP 的 php.exe 在系统 PATH 里,且 think 文件末尾是 n(不是 rn),否则 shebang 行失效
  • PHP CLI 版本必须 ≥ 7.2.5,且开启 mbstringopenssl 扩展,缺一个 php think 就直接 exit
  • 别在子目录下运行 php ../think:TP6 依赖当前工作目录为项目根,否则 app 目录定位失败

部署到线上前删掉 runtimevendor,用 composer install --no-dev

本地开发装了一 phpunitpsysh,上线还留着不仅占空间,某些扩展(比如 symfony/var-dumper)在生产环境触发 dump 会暴露路径。

  • 先清空 runtime/ 全部内容(日志、缓存、模板编译文件),不然旧缓存可能让新代码不生效
  • composer install --no-dev --optimize-autoloader:省掉 dev 依赖,同时生成静态类映射,启动快 10%~20%
  • 别用 composer update 上线:它会改 composer.lock,线上环境必须锁定依赖版本
  • 如果用宝塔或 cPanel,注意 public 目录要设为网站根目录,runtimevendor 必须不可通过 URL 访问(nginx/apache 需额外屏蔽)

实际跑起来后最容易忽略的是 runtime 目录权限和 .env 的环境变量继承逻辑——比如用 Supervisor 启动队列,它不读 shell 的环境变量,必须在配置里显式传入 ENV=production,否则还是走 local 配置。

text=ZqhQzanResources