composer diag仅显示Packagist连接是否超时及HTTP状态码,不提供DNS解析、TLS握手、TTFB等分阶段耗时;需配合curl -w自定义格式测全链路,或检查Last-Modified头验证镜像同步时效。

composer diag 能查延迟但不直观,得配合 timing 分析
composer diag 会输出 Packagist 连接状态和基础耗时,但它只显示「是否超时」和「HTTP 状态码」,不直接告诉你 DNS 解析、TLS 握手、首字节(TTFB)各阶段花了多久。真正想定位是镜像慢还是上游卡,得用更底层的手段。
推荐组合:先跑 composer diag 看整体连通性,再手动测 https://packagist.org/packages.json 的完整链路:
- 用
curl -w "@curl-format.txt" -o /dev/null -s https://packagist.org/packages.json(curl-format.txt需包含time_namelookup、time_connect、time_starttransfer等字段) - 如果镜像已配置,把 URL 换成你的镜像地址(如
https://mirrors.aliyun.com/composer/packages.json),对比两组数据 - 注意:Composer 2.2+ 默认启用
https://packagist.org` 的 HTTP/2 支持,某些老旧镜像不支持 HTTP/2,会导致降级或额外重试,表现为 <code>time_starttransfer异常高
composer config -g repo.packagist 是查看当前镜像配置的关键命令
很多人以为 composer config -g 就能一眼看到镜像,其实它只输出全局配置结构,不展开 repo.packagist 的实际值。正确姿势是:
-
composer config -g repo.packagist.url—— 直接输出当前生效的镜像 URL -
composer config -g repo.packagist—— 输出整个对象(含type和url),适合确认是否为composer类型而非artifact或package - 若返回空,说明没设镜像,走的是官方源;若返回
{"type": "composer", "url": "..."},则以该url为准 - 注意:项目级配置(
composer config repo.packagist...不带-g)优先级高于全局,但composer config -g查不到,得进项目目录单独查
packagist.org 延迟高?先排除本地 DNS 和 CA 证书问题
很多「Packagist 慢」其实是本地环境导致的,不是源本身问题。常见干扰点:
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
- DNS 污染:国内部分地区对
packagist.org的 A 记录解析异常,建议用dig packagist.org +short或nslookup packagist.org看返回 IP 是否合理(官方 IP 应接近 Cloudflare 范围,如104.21.32.217) - CA 证书过期:Composer 依赖系统 OpenSSL 或 PHP 内置 cafile,若报
cURL error 60: SSL certificate problem,可能证书库陈旧,需更新系统 ca-certificates 或手动指定openssl.cafile - IPv6 优先导致超时:部分网络 IPv6 不通但系统仍尝试,可临时禁用:
composer config -g github-protocols https并在php.ini加curl.cainfo=/path/to/cacert.pem
镜像同步滞后怎么验证?看 packages.json 的 lastModified 时间戳
镜像是否「新鲜」,不能只看响应快慢,关键看数据时效性。Packagist 官方 packages.json 响应头带 Last-Modified,而主流镜像(阿里云、腾讯、华为)也透传该头 —— 这是最准的同步状态指标。
执行:curl -I https://mirrors.aliyun.com/composer/packages.json | grep Last-Modified,再对比官方源结果:
- 如果镜像的
Last-Modified比官方早 10 分钟以上,基本可判定同步延迟 - 注意:有些镜像(如华为云)用 ETag 替代 Last-Modified,此时需比对
ETag值是否与官方一致 - Composer 自身不会主动校验这个时间戳,它只认 JSON 内容哈希,所以即使镜像滞后,
composer update也不会报错,只会装到旧版本包
真正容易被忽略的是:镜像延迟往往不体现在 composer install 阶段,而是在 composer require 新包时——因为 Packagist 的实时索引更新机制,新包可能几小时后才进镜像的 packages.json,导致 Could not find package xxx。

















