【问题标题】:Call to S3Client::setRegion() fails调用 S3Client::setRegion() 失败
【发布时间】:2015-08-27 21:16:32
【问题描述】:

我通过 composer 使用 "aws/aws-sdk-php": "3.0.3" 访问不同区域的一些 S3 存储桶,但我似乎无法让 S3Client 使用 setRegion() 函数更改区域而不产生错误:

PHP 可捕获的致命错误:传递给 Aws\AwsClient::getCommand() 的参数 2 必须是数组类型,给定字符串,在第 166 行的 vendor/aws/aws-sdk-php/src/AwsClient.php 中调用并在第 210 行的 vendor/aws/aws-sdk-php/src/AwsClient.php 中定义

代码:

foreach($buckets as $bucket) {
    echo 'foo' . PHP_EOL;
    $loc = $s3->getBucketLocation(['Bucket' => $bucket])['LocationConstraint'];
    var_dump($loc);
    $s3->setRegion($loc);
    echo 'bar' . PHP_EOL;
    $years = $s3->listObjects([
        'Bucket'    => $bucket,
        'Delimiter' => '/'
    ]);
    var_dump($bucket, $years);
}

输出:

foo
string(9) "us-east-1"
PHP Catchable fatal error:  {snip}

注意事项:

编辑

正如@giaour 所说,S3Client::setRegion() 不再存在于 v3 客户端中,我链接的文档是针对 v2.2 的。 [我不知道为什么它被标记为“最新”]

这是我作为解决方法实施的代码,刚刚升级为“规范”:

protected function s3($region='us-west-2') {
    if( ! isset($this->_clients[$region]) ) {
        $this->_clients[$region] = new Aws\S3\S3Client([
            'version' => $this->_aws_version,
            'region'  => $region,
            'credentials' => $this->credentials
        ]);
    }
    return $this->_clients[$region];
}

然后:

foreach($buckets as $bucket) {
    $region = $this->s3()->getBucketLocation(['Bucket' => $bucket])['LocationConstraint'];
    $s3 = $this->s3($region);
    ...
}

【问题讨论】:

  • 你试过$s3->setRegion(['us-east-1']);吗?
  • @Ja͢ck 更糟糕的是:PHP Fatal error: Uncaught exception 'InvalidArgumentException' with message 'Operation not found: SetRegion' 所以它似乎正在落入__call() 并试图将其发送到 API 端点而不是更改客户端中的区域。
  • 我已在该项目上提交了issue
  • @Ja͢ck 整洁。已订阅。

标签: php amazon-web-services amazon-s3 aws-php-sdk


【解决方案1】:

setRegion 在您使用的 AWS 开发工具包版本中不受支持。 (您链接到的文档适用于 SDK 的 v2。)

您可以创建一个新客户端并在构造函数中传入区域,例如new Aws\S3\S3Client(['version' => $s3->getApi()->getApiVersion(), 'region' => $loc])

【讨论】:

  • 废话。好吧,我基本上已经将其作为一种解决方法实现了,所以我猜它刚刚升级为规范。 :I
猜你喜欢
  • 2014-03-13
  • 2021-04-20
  • 2014-05-29
  • 2021-12-23
  • 2019-08-15
  • 2020-05-27
  • 2020-02-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多