我正在尝试从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修复了问题