系统时间偏差超±900秒(15分钟)导致Signature verification failed,与时区设置无关;需通过timedatectl set-ntp true启用NTP自动校准,而非修改时区。

Composer 报 PharException 或签名验证失败,跟“中文环境”或“时区设置”基本无关——真正触发校验失败的是系统时间偏差超 ±900 秒(15 分钟),不是时区(timezone)本身。
为什么改时区解决不了 Signature verification failed
Composer 2.2+ 校验的是时间戳绝对差值,不是时区偏移量。比如你设为 Asia/Shanghai(UTC+8),但系统硬件时钟慢了 20 分钟,date 输出仍是错误时间;哪怕改成 UTC,只要物理时间不准,Signature verification failed 依然报。
- 时区(
TZ环境变量或/etc/timezone)只影响时间显示格式,不修正底层系统时钟 - Composer 拿
time()和响应头里的Date:直接比对秒级数值,毫秒级偏差都算数,更别说分钟级误差 - 中文 Windows 用户常误以为“系统显示中文时间就代表时区错”,其实只是区域格式(locale)问题,和校验逻辑完全隔离
怎么确认是时间不准,而不是时区配置问题
别看控制面板里选的什么时区,直接比两行真实时间:
- 运行
date -Iseconds,得到本地系统时间(ISO 8601 格式) - 运行
curl -sI https://packagist.org | grep Date,提取响应头里的服务器时间 - 把两行时间粘贴到任意在线时间差计算器里,差值超过 ±900 秒,就是它了
注意:timedatectl status 中的 Local time: 是带时区转换后的显示,不可信;要看 Universal time: 和 RTC time: 是否同步。
围绕关键发现、作用机制、临床相关性及研究局限性展开讨论。适用于撰写或优化任何生物医学论文的“讨论(Discussion)”部分——包括结果解读、与既往文献关联、阐释意外发现、界定研究局限性,以及撰写结论。当用户输入以下任一指令时也会自动触发该功能: - “write my discussion” - “help me discuss my findings” - “how do I compare to prior studies” - “write the limitations par
Linux/macOS 修时间的正确操作顺序
手动 date -s 是临时补丁,下次重启就失效,还可能引发文件时间混乱。必须走 NTP 自动校准:
- 启用 systemd-timesyncd:
sudo timedatectl set-ntp true - 停掉冲突服务(如 chronyd):
sudo systemctl stop chronyd && sudo systemctl disable chronyd - 检查是否真同步:
timedatectl timesync-status,看Offset是否在 ±50ms 内 - 容器内用户:宿主机时间不准,容器必然不准;加
-v /etc/localtime:/etc/localtime:ro只是同步显示,不能修底层时钟
Windows(含 WSL2)常见陷阱
Windows 默认用 Windows Time Service(W32Time),但默认不同步公网 NTP,尤其在域环境中会被组策略锁死:
- WSL2:不能在子系统里跑
ntpd,必须修宿主机。打开 PowerShell(管理员),运行:w32tm /resync /force - 普通 Windows:如果
w32tm /query /status显示Source: Local CMOS Clock,说明根本没连 NTP,需手动指定:w32tm /config /syncfromflags:manual /manualpeerlist:"time.apple.com pool.ntp.org",再/resync - 中文版 Windows 用户容易忽略一点:杀毒软件(如 360、腾讯电脑管家)会劫持系统时间服务,关掉实时防护再试
修完时间后,别急着跑 composer install——关掉所有终端窗口,重开一个,否则旧进程仍缓存错误时间戳。

















