系统时间偏差超2–5分钟会导致SSL证书验证误报“certificate has expired”,应执行sudo timedatectl set-ntp true和sudo systemctl restart systemd-timesyncd,并用timedatectl status | grep "System clock synchronized"确认输出yes。

报“SSL certificate problem: certificate has expired”先看系统时间
这不是证书真过期了,而是服务器系统时钟快了或慢了超过 2–5 分钟,OpenSSL 校验证书 notBefore/notAfter 时直接失败。
执行 date 对比 time.is,偏差 > 2 分钟就必须校准:
- 推荐用
sudo timedatectl set-ntp true+sudo systemctl restart systemd-timesyncd - 验证:运行
timedatectl status | grep "System clock synchronized",输出yes才算生效 - 别信
ntpd或手动date -s—— 容器/云主机里容易回跳,必须靠 NTP 服务持续同步
报“Could not resolve host: packagist.org”大概率是 DNS 污染
国内运营商劫持或本地 DNS 缓存异常,导致域名根本解析不出 IP,和 Composer 版本、PHP 配置无关。
别急着改 /etc/resolv.conf 全局 DNS,优先走 Composer 自身镜像配置:
- 设阿里云镜像:
composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/ - 设清华镜像:
composer config -g repo.packagist composer https://mirrors.tuna.tsinghua.edu.cn/composer/ - 设完立刻清缓存:
composer clear-cache,否则旧失败记录还在,重试仍走原地址 - 验证是否生效:
composer config -g repo.packagist应输出带 URL 的 JSON 对象
报“Permission denied”别 chmod -R 777,先查属主
90% 的权限错误不是缺写权限,而是目录被 sudo composer install 污染过,属主变成 root,而你正以普通用户运行。
工作流任务拆解与模型编排技能。使用场景:(1) 收到复杂工作任务需要拆解为可执行步骤,(2) 需要为不同步骤选择最合适的模型,(3) 需要跟踪工作流进度和模型使用情况,(4) 长时间任务卡住需要问题诊断和解决方案。
用这三行命令定位问题路径:
ls -ld vendor/ls -ld composer.lockls -ld $(composer config --global cache-dir)
只要任意一行第三列(属主)不是你的用户名,就说明归属错位。修复命令:
- 项目目录:
sudo chown -R $USER:$USER /path/to/project - 全局缓存:
sudo chown -R $USER:$USER ~/.composer - 禁用
chmod -R 777—— 它会让vendor/bin/phpunit这类可执行文件被 CI 拒绝,Git 提交时报 ownership changed
报“putenv() has been disabled”要改 php-cli.ini
宝塔或编译安装的 PHP 常禁用 putenv,但 Composer 必须用它设置环境变量。注意:Web 用 php.ini,命令行用 php-cli.ini,两者常不同。
确认当前 CLI 使用的配置:
-
php --ini看 Loaded Configuration File 路径 -
php -i | grep 'disable_functions'确认putenv是否在列表里 - 编辑该
php-cli.ini,删掉disable_functions行里的putenv(保留其他函数) - 多 PHP 版本共存时,每个版本的
php-cli.ini都得检查
真正麻烦的从来不是单个报错,而是问题跨层存在——比如 vendor 权限异常,根子可能在 ~/.composer 归属错位,或 WSL 下挂载了 /mnt/c/ 路径导致 chown 失效。每次只盯报错末尾那行完整路径,比盲目操作管用得多。

















