Karp 的技术博客
背景
一个运行在 PHP 7.2.34 的老项目,需要引入 aws/aws-sdk-php,在 Composer 2.x 环境下经历了一系列失败,最终成功安装 3.288.1
本文记录完整排障过程与最终正确解法。

一、环境背景

基础环境

PHP:        7.2.34
Composer:   2.9.2
OS:         CentOS / RHEL 7

Composer 镜像

"repositories": {
  "packagist": {
    "type": "composer",
    "url": "https://packagist.org"
  }
}

二、最初的问题:aws/aws-sdk-php 无法安装

尝试安装:

composer require aws/aws-sdk-php:3.199.3

错误信息(核心):

found aws/aws-sdk-php[3.199.3] but these were not loaded,
because they are affected by security advisories

尝试过的方案(全部失败)

  • --no-audit
  • "audit": { "block-insecure": false }
  • 忽略 PHP 版本
  • 降级 / 固定版本
  • Composer 自降级

结论

**在 Composer 2.6+ + Packagist 环境下,
aws/aws-sdk-php 某些旧版本已经被仓库层“强制封禁”,无法通过任何参数绕过。**

三、选择可行版本:3.288.1

改用一个 PHP 7.2 可用,且未被封禁 的版本:

composer require aws/aws-sdk-php:3.288.1

却遇到了新的错误:

aws/aws-sdk-php 3.288.1 requires guzzlehttp/promises ^1.4.0 || ^2.0
but the package is fixed to v1.3.1 (lock file version)

四、真正的坑:Composer 的 Partial Update + Lock 文件

问题本质

  • 项目中 guzzlehttp/promises 被锁死在 1.3.1
  • AWS SDK 要求 >= 1.4.0
  • 使用了 部分更新(partial update)
  • Composer 不允许隐式修改已锁定依赖

错误提示里这句是关键:

the package is fixed to v1.3.1 (lock file version) by a partial update

五、正确解法(关键步骤)

最终成功命令

composer update aws/aws-sdk-php guzzlehttp/promises --with-all-dependencies

或等价写法:

composer require aws/aws-sdk-php:3.288.1 -W

-W / --with-all-dependencies 的含义

允许 Composer:

  • 升级
  • 降级
  • 移除

当前 composer.lock 中的相关依赖


六、推荐的依赖组合(PHP 7.2 / 7.3)

"require": {
  "aws/aws-sdk-php": "3.288.1",
  "guzzlehttp/guzzle": "^6.5.8 || ^7.5",
  "guzzlehttp/psr7": "^1.9 || ^2.4",
  "guzzlehttp/promises": "^1.5 || ^2.0"
}

七、经验总结(非常重要)

1️⃣ Composer 装不上包,不一定是版本不兼容

  • 可能是:

    • 仓库级封禁
    • 安全 advisory
    • lock 文件锁死

2️⃣ composer require 默认是“部分更新”

不会动 lock 里的其它包

需要显式加:

-W

3️⃣ 老项目升级依赖的正确姿势

  • 不要死磕最新版
  • 选择 “生态可接受”的最后可用版本
  • 控制升级范围
  • 一步一步来

八、最终结论

**在 PHP 7.2 + Composer 2.x 环境下,
成功安装 aws/aws-sdk-php 的关键不是版本号本身,
而是正确处理 Composer 的依赖锁与更新策略。**

九、附:最终成功命令(备忘)

composer update aws/aws-sdk-php guzzlehttp/promises --with-all-dependencies

git

版权属于:karp
作品采用:本作品采用 知识共享署名-相同方式共享 4.0 国际许可协议 进行许可。
更新于: 2026年01月31日 07:45
0

目录

来自 《[踩坑] PHP 7.2 项目中安装 aws/aws-sdk-php 的完整踩坑与解决方案》