必须用官方脚本安装Composer,因apt版长期滞留在2.2.22等旧版本,不支持PHP 8.3+、^2.5依赖约束及self-update,且路径不可写、未加入PATH;需校验SHA384、启用zip/phar/mbstring/xml/curl扩展,并配置国内镜像源。

别用 apt install composer —— 它装的不是你项目要的 Composer,而是个“半残”版本,连 composer self-update 都会失败。
为什么 apt 安装的 Composer 一定不能用
Ubuntu 官方源里的 php-composer 包长期卡在 2.2.22 或更老版本(截至 2026 年 6 月仍普遍如此),它不支持 PHP 8.3+ 的 autoloader 行为,也解析不了 ^2.5 这类依赖约束。更致命的是:/usr/share/php/composer/composer 路径不可写,self-update 永远报 Permission denied;它还不自动加进 $PATH,装完 composer --version 很可能直接报 command not found。
常见错误现象:
-
Command "create-project" is not defined(其实是版本太老,不认识新命令) -
Could not open input file: composer.phar(误以为要手动调 php 执行,实际已部署为命令) -
The zip extension is missing(apt版没检查扩展,但后续install必崩)
必须校验 SHA384 后再安装官方 PHAR
跳过校验 = 主动交出整个 PHP 生态的信任链。中间人劫持下载后,所有依赖包、autoload 文件、甚至 vendor/bin 下的二进制都可能被篡改。
执行以下命令(可直接复制粘贴):
EXPECTED_CHECKSUM="$(curl -sS https://composer.github.io/installer.sig)"
php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
ACTUAL_CHECKSUM="$(php -r "echo hash_file('sha384', 'composer-setup.php');")"
if [ "$EXPECTED_CHECKSUM" != "$ACTUAL_CHECKSUM" ]; then
echo 'Integrity check failed' >&2; rm composer-setup.php; exit 1
fi
sudo php composer-setup.php --install-dir=/usr/local/bin --filename=composer
rm composer-setup.php
验证是否成功:composer --version 应输出类似 Composer version 2.9.6(当前最新稳定版)。
PHP 扩展缺失会导致 install 直接中断
composer --version 成功 ≠ 环境就绪。install 阶段需要解压 ZIP、生成 autoload、处理 JSON 配置,缺一不可。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
必须确保启用的扩展:
-
zip(解压依赖包) -
phar(加载和执行 PHAR 文件) -
mbstring(处理多字节字符路径名) -
xml(解析某些 composer 插件或 legacy 包) -
curl(连接 Packagist 和镜像源)
检查方式:php -m | grep -E "zip|phar|mbstring|xml|curl"。若缺失,例如 PHP 8.2 环境需装 php8.2-zip,而非笼统的 php-zip。确认 CLI 使用的配置:php --ini,避免 Web 和 CLI 加载不同 .ini 文件。
国内用户必须配阿里云或腾讯云镜像源
不配镜像,composer create-project 卡在 Downloading https://packagist.org/packages.json 是常态,本质是 DNS 污染 + TLS 握手超时,不是你网络差。
全局启用阿里云镜像:composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/
验证是否生效:cat ~/.config/composer/config.json 中应有 "repo.packagist" 条目指向镜像地址。
注意:如果项目 composer.json 里已声明 repositories,全局镜像会被覆盖 —— 这是设计行为,不是失效。临时切回官方源:composer config -g --unset repos.packagist。
最后提醒一句:装完别急着跑 create-project,先执行 composer diagnose。它会真实暴露 PATH、权限、扩展、网络连通性等隐藏问题 —— 这一步跳过,90% 的后续报错其实早就能避免。

















