必须加-g,否则仅修改当前项目配置,对新建ThinkPHP5项目无效;全局配置写入~/.composer/config.json,确保create-project走国内镜像,避免卡死或超时。

为什么 composer config -g repo.packagist 必须加 -g
不加 -g 就是当前项目级配置,对后续新建的 ThinkPHP5 项目完全无效。而安装 TP5 前必须先设全局镜像,否则 composer create-project 仍会直连国外源,卡在 Installing topthink/think (v5.0.24) 或直接超时失败。
执行后实际修改的是 Composer 全局配置文件(Windows 在 %USERPROFILE%\AppData\Roaming\Composer\config.json,Linux/macOS 在 ~/.composer/config.json),所有后续 composer 命令都会走这个镜像。
- 必须用管理员权限或当前用户有写入权限,否则报错
Failed to modify global config - 如果提示
No composer.json in current directory,不用管它——这是 Composer 在问你是否用当前目录的配置,直接回车或输Y即可 - 设完可用
composer config -g repo.packagist回车验证,输出应为https://packagist.phpcomposer.com或类似国内地址
create-project 命令里 =5.0.* 和不带版本号的区别
不写版本(如 composer create-project topthink/think tp5 --prefer-dist)默认拉取最新稳定版,但 TP5 官方早已停止维护,现在实际会命中 5.1.x 或更高(取决于 packagist 缓存),而很多老教程、插件、主机环境只兼容 5.0.*。
明确写 =5.0.* 才能锁定 5.0 分支最后一版(如 5.0.24),避免因自动升级引发 Class think\App not found 或路由解析异常。
立即学习“PHP免费学习笔记(深入)”;
-
--prefer-dist强制走压缩包安装,比--prefer-source快得多,也更省空间 - 项目名(如
tp5)不能含空格或中文,否则后续php think命令会报错 - 若提示
Could not find package topthink/think,先确认镜像已生效,再运行composer clear-cache
镜像地址选哪个?phpcomposer.com 还是 laravel-china.org
两个都可用,但 https://packagist.phpcomposer.com 已于 2022 年底停止服务;目前稳定可用的是 https://packagist.laravel-china.org(Laravel China 镜像),它同步频率高、节点稳定,TP5 的所有历史 tag 都完整保留。
别用网上残留的旧教程里的 phpcomposer.com 地址,否则 composer create-project 会返回 Connection refused 或 404。
- 正确命令:
composer config -g repo.packagist composer https://packagist.laravel-china.org - 如果公司内网或某些 Linux 发行版自带旧版 Composer(composer self-update
- 设错后想清除,运行:
composer config -g --unset repo.packagist,再重设
安装后访问 /public/ 报 404 或白屏?检查这三点
TP5 5.0 要求 Web 服务器入口必须指向 public/ 目录,不是项目根目录。直接打开 index.php 或用 php -S 启动会出问题。
- WAMP/XAMPP:把整个
tp5/文件夹放进www/,然后访问http://localhost/tp5/public/(不是/tp5/) - Nginx:root 必须设为
/path/to/tp5/public,且要开启try_files $uri $uri/ /index.php?$query_string - Apache:确保
.htaccess在public/下且未被忽略;若用子目录部署,需改public/.htaccess里的RewriteBase /为RewriteBase /tp5/public/
最常被忽略的是 PHP 扩展:TP5 5.0 依赖 openssl 和 fileinfo,Windows 下要检查 php.ini 里这两行前面的分号是否已去掉。



















