You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用最新版aws-sdk-php上传S3时出现AwsCommand方法未定义错误

问题分析

这个错误是AWS SDK for PHP版本冲突导致的。从报错栈可以看到,代码同时加载了两个不同位置的AWS SDK:

  • 项目根目录的/var/www/html/vendor/aws/aws-sdk-php(最新版本)
  • W3 Total Cache插件内置的/var/www/html/wp-content/plugins/w3-total-cache/vendor/aws/aws-sdk-php(旧版本)

当执行到EndpointV2Middleware.php时,调用了AwsCommand::getMetricsBuilder(),但旧版本SDK的Command类没有这个方法,从而触发错误。

解决方案

方案1:禁用插件内置的AWS SDK

修改W3 Total Cache插件的加载逻辑,强制使用项目根目录的SDK:

  1. 找到插件目录下的wp-content/plugins/w3-total-cache/inc/Autoloader.php(或类似自动加载文件)
  2. 注释掉插件内置SDK的自动加载代码,比如类似require_once __DIR__ . '/../vendor/autoload.php';的行
  3. 确保项目根目录的vendor/autoload.php已被正确加载

方案2:统一SDK版本

  • 升级W3 Total Cache插件到最新版本,使其内置SDK版本与项目根目录的SDK版本一致
  • 或降级项目根目录的AWS SDK到与插件内置版本匹配的版本(不推荐,会影响其他功能)

方案3:使用Composer的replace功能(推荐)

在项目的composer.json中添加配置,强制使用项目根目录的SDK:

{
    "replace": {
        "aws/aws-sdk-php": "*"
    }
}

执行composer update,Composer会忽略插件内置的SDK,统一使用项目根目录的版本。

额外检查
  • 确保代码中没有同时引入两个不同路径的AWS类文件
  • 清理项目vendor目录和缓存,重新执行composer install确保依赖安装完整

内容的提问来源于stack exchange,提问作者Nitesh Bhargava

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 08:47:14