应明确指定ThinkPHP稳定版本,如用composer create-project topthink/think tp6 ^6.3安装TP6.3 LTS版,避免因dev-master已切至TP8预览版导致拉取非生产就绪的beta版本。

composer install 时提示 “Could not find package topthink/think”
这是最常见的起步卡点,本质是 packagist.org 镜像源未配置或已失效。国内直连官方源经常超时或返回空结果,composer install 就会找不到 topthink/think。
实操建议:
立即学习“PHP免费学习笔记(深入)”;
- 运行
composer config -g repo.packagist composer https://packagist.phpcomposer.com(旧镜像,已停用)→ 改用composer config -g repo.packagist composer https://packagist.org并加代理,或更稳妥地换为阿里云镜像:composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/ - 确认 PHP 版本 ≥ 7.2.5(TP6 要求),运行
php -v检查;低于该版本会静默跳过匹配,导致“找不到包”假象 - 不要手动创建空目录后执行
composer install——它只装composer.lock里已记录的依赖。新项目必须用composer create-project
用 create-project 创建 TP6 项目却生成了 TP8 目录结构
ThinkPHP 官方在 2023 年底将 topthink/think 的 dev-master 切到了 TP8 预览版,而 TP8 尚未正式发布、文档缺失、路由和生命周期大幅变更。直接跑 composer create-project topthink/think 很可能拉下不稳定的开发分支。
实操建议:
立即学习“PHP免费学习笔记(深入)”;
- 明确指定稳定版本:例如安装 TP6.3(当前 LTS)用
composer create-project topthink/think tp6 ^6.3,其中^6.3是版本约束,防止升到 7.x 或 8.x - 避免省略版本号。不写版本时 Composer 默认取 latest stable,但
topthink/think的 latest stable 已被设为v8.0.0-beta,不是生产就绪状态 - 创建后立刻检查
think文件内容:TP6 的入口文件第一行是,TP8 则含App::run()和Runtime类加载逻辑
vendor/autoload.php 无法自动加载 TP 类(Class not found)
常见于手动移动了 think 入口文件、或把项目目录嵌套进其他 Web 根目录时。Composer 自动加载机制依赖 vendor/autoload.php 的相对路径和 PSR-4 映射,一旦入口脚本位置变动,require 路径没同步更新就会报错。
实操建议:
立即学习“PHP免费学习笔记(深入)”;
- 确认
think文件(或你重命名的入口)中这行没被改错:require __DIR__ . '/vendor/autoload.php';。如果把think移到public/下,就得改成require __DIR__ . '/../vendor/autoload.php'; - 别用
include 'vendor/autoload.php'—— 缺少__DIR__会导致路径解析失败,尤其在 CLI 和 Web 环境下行为不一致 - 运行
composer dump-autoload强制重生成自动加载映射,适用于你手动改过composer.json里的autoload配置后
Apache 下访问 public/index.php 正常,但去掉 index.php 出 404
这不是 Composer 或 TP 安装问题,而是 Web 服务器 URL 重写未生效。TP 的「隐藏入口」依赖 Apache 的 .htaccess 规则把请求转发给 index.php,但很多虚拟主机默认禁用 AllowOverride,导致规则不执行。
实操建议:
立即学习“PHP免费学习笔记(深入)”;
- 检查 Apache 配置中对应目录是否启用了重写:
AllowOverride All(不能是None) - 确认
mod_rewrite已启用:a2enmod rewrite(Ubuntu/Debian)或在httpd.conf中取消#LoadModule rewrite_module modules/mod_rewrite.so的注释 - TP6 的
public/.htaccess第一行是RewriteEngine on,如果日志里出现Invalid command 'RewriteEngine',说明模块根本没加载
runtime/ 目录必须可写,且权限不能太松(比如 777)。有些运维习惯性 chmod -R 777 整个项目,反而触发某些安全策略拦截自动加载——类文件读取失败,错误却只报 Class not found,排查方向全偏了。











