通过PHP SDK的S3客户端初始化错误


S3 client initialization error via PHP SDK

我正在尝试从AWS PHP SDK初始化S3客户端。我的代码如下:

$credentials = new Credentials(self::KEY, self::SECRET);
$s3_client = new S3Client([
    'version'     => 'latest',
    'region'      => $region,
    'credentials' => $credentials
]);

但是我得到了以下错误:

遇到PHP错误

严重性:4096

消息:传递给Aws''Common''Client''AbstractClient::__construct()的参数1必须实现接口Aws''Cmmon''CredentialsInterface,给定数组,在第47行的/opt/showhouse/www/application/models/showhouse/Common/services/Aws/Aws.php中调用并定义文件名:Client/AbstractClient.php

线路编号:73

你知道我哪里错了吗?我使用的是通过Composer安装的最新版本的SDK。

我猜您使用的是AWS PHP SDK 2.0版本。如果是这样,那么S3Client确实实现了AbstractClient类。这意味着参数为:__construct(Aws''Common''Aws''Compon''CredentialsInterface$Credentials,Aws''Cmmon''Aws ''Common''''SignatureInterface$Signature,Guzzle''Common''''Collection$config)

您尝试使用的S3Client实现来自AWS PHP SDK的3.0版本。

建议:尝试使用下载的zip文件安装AWS SDK,而不是Composer

当我使用Composer安装AWS SDK时,我也遇到了同样的问题,因为这似乎是以下URL中AWS文档中推荐的方式。

https://docs.aws.amazon.com/aws-sdk-php/v3/guide/getting-started/installation.html

但是,在阅读了Grilly的有用答案后,我决定尝试使用下载的zip文件来安装AWS SDK。我以这种方式安装后,问题就消失了。

从zip文件中包含的自述文件中,我可以发现使用下载的zip文件安装的AWS SDK版本为3.0的通知。虽然我无法检查使用Composer安装的AWS SDK的版本,因为我找不到如何检查,但我猜测使用Composer的AWS SDK版本有点旧,足以导致问题。

我也遇到了同样的问题,并通过使用带有AWS SDK v3.x 的PHP 5.6修复了问题