2016-01-21 87 views
0

这让我疯狂了好几天,我知道我错过了简单的东西。我一直在尝试更新CORS来创建我使用PHP SDK即时创建的存储桶。通过PHP SDK为AWS S3创建CORS规则

这就是我试图从我找到的各种教程中破解出来的东西(我不确定的一件事是发送多个AllowedMethods的首选方法)。

$result = $s3Client->putBucketCors(array(
     'Bucket' => $bucket, 
     'CORSConfiguration' => array(
     array(
      'AllowedOrigins' => array('AllowedOrigin' => '*'), 
      'AllowedMethods' => array('AllowedMethods' => 'POST'), 
      'AllowedMethods' => array('AllowedMethods' => 'GET'), 
      'AllowedMethods' => array('AllowedMethods' => 'PUT'), 
     'MaxAgeSeconds' => array('MaxAgeSeconds' => '3000'), 
     'AllowedHeader' => array('AllowedHeader' => '*') 
     ) 
    ) 
)); 

上述返回以下错误:

致命错误:在验证规定的PutBucketCors操作的输入未捕获的异常“InvalidArgumentException”与消息“找到1个错误:[CORSConfiguration]必须关联数组。

我试图使用信息从这个页面的帮助,但我知道这是过时的:http://docs.aws.amazon.com/aws-sdk-php/v2/api/class-Aws.S3.S3Client.html#_putBucketCors

我验证过的桶存在和创建,通过AWS控制台。任何帮助将不胜感激。谢谢!

编辑:我能够将我的CORS从现有的桶中取出,这就是它给了我的东西。仍在试图弄清楚如何设置我的阵列创建:

data:Aws\Result:private] => Array ( 

[CORSRules] => Array ([0] => 


Array ([AllowedHeaders] => Array ([0] => *) 

[AllowedMethods] => Array ([0] => GET [1] => POST [2] => PUT) 
[AllowedOrigins] => Array ([0] => *)[ 
MaxAgeSeconds] => 3000)) 
+0

在您共享的文档,它说'CORSRules'不'CORSConfiguration'没你知道?或者因为文档不是最新的? – FZE

+0

我注意到它在文档中有所不同。我找不到最新版本的PHP SDK的工作示例。我使用了CORSConfiguration,因为当我尝试使用CORSRules时,它一直在向我抛出错误:致命错误:Uncaught异常'InvalidArgumentException'带有消息'验证为PutBucketCors操作提供的输入时发现1错误:[CORSConfiguration]丢失并且是必需参数' –

回答

0

好了,我结束了相当数量的反复试验后,搞清楚了这一点。我继续将CORSRules设置为一个单独的数组,以使代码更具可读性。以下是我想出了,发帖的情况下,任何人都在同一条船上是为我下了线:

$cors = array(array(
     'AllowedOrigins' => array('*'), 
     'AllowedMethods' => array('POST', 'GET', 'PUT'), 
     'MaxAgeSeconds' => 3000, 
     'AllowedHeaders' => array('*') 
    )); 

    $result = $s3Client->putBucketCors(array(
     'Bucket' => $bucket, 
     'CORSConfiguration' => array('CORSRules' => $cors) 
    )); 

从Feyyaz(http://docs.aws.amazon.com/AmazonS3/latest/API/RESTBucketGETcors.html)共享的文档阅读,CORSConfiguration作为一个容器,与CORSRules作为联想钥匙在里面。

我希望这有助于人谁发现自己在同一条船上我英寸

0
<?php 
    $result = $s3Client->putBucketCors(array(
     'Bucket' => $bucket, 
     'CORSRules' => array(
     array(
      'AllowedOrigins' => array('*'), 
      'AllowedMethods' => array('POST', 'GET', 'PUT'), 
      'MaxAgeSeconds' => 3000, 
      'AllowedHeaders' => array('*') 
     ) 
    ) 
)); 

它可能工作能否请你试试? 你有多个AllowedMethods,它没有任何意义,最后一个覆盖了前两个。

此外,在DOC你分享它说CORSRulesCORSConfigurations从反应过来这个医生说http://docs.aws.amazon.com/AmazonS3/latest/API/RESTBucketGETcors.html

+0

感谢您的快速回复!我尝试了上面的结果,结果如下: 致命错误:在验证为PutBucketCors操作提供的输入时发现了错误'未找到异常'InvalidArgumentException'':发现1错误:[CORSConfiguration]丢失并且是必需参数'。 用CORSConfigurations替换CORSRules给了我发布的原始错误消息:[CORSConfiguration]必须是关联数组。 我认为这是因为文档是针对较旧版本的,所以我只是想弄清楚现在要做哪些更改。再次感谢你。 –