我跟随this page安装。
这是SDK的第3版。基本用法here。
<?php
require 'vendor/autoload.php';
use Aws\CloudFront\CloudFrontClient;
$cdn = new CloudFrontClient(
['version' => 'latest',
'region' => 'us-east-1']
);
// Create a new invalidation.
$response = $cdn->create_invalidation('EPYAAAAAAPAA', 'aws-clear-cache' . time(), "/*");
根据this article。
可捕获的致命错误:参数2传递给 Aws \ AwsClient :: getCommand()必须是类型数组,字符串给定, 呼唤 /Users/jason/www/aws/vendor/aws/aws-sdk-php/src/AwsClient.php上线 167并定义于 /Users/jason/www/aws/vendor/aws/aws-sdk-php/src/AwsClient.php上线 211
更新&amp;工作解决方案:
$config = array(
'region' => 'us-east-1',
'version' => '2015-07-27',
'credentials' => array(
'key' => env('AMAZON_KEY_CLOUDFRONT'),
'secret' => env('AMAZON_SECRET_CLOUDFRONT')
)
);
$cdn = new CloudFrontClient($config);
$cache = array('DistributionId' => env('CLOUDFRONT'),
'InvalidationBatch' => array(
'CallerReference' => 'none',
'Paths' => array(
'Quantity' => 1,
'Items' => array( 'test' => '/*')
)
)
);
// Create a new invalidation.
$response = $cdn->createInvalidation($cache);
var_dump($response);
答案 0 :(得分:2)
我看了一下这里发生的事情,显然你正在使用无效的方法签名。
首先,AWS PHP SDK使用名为&#34;服务描述模型&#34;获取指定版本的API接口。在这种情况下,这意味着他们使用一些元编程技术来提供看起来像普通PHP函数调用的接口,但这些函数在SDK中没有硬编码。它们并不是我们通常认为的存在,至少不像普通的PHP函数那样存在。一些PHP魔法正在下面发生。
当您致电$cdn->create_invalidation()
时,它会在继承自Aws\CloudFront\CloudFrontClient
的{{1}}实例上运行。这些类(也没有任何祖先)实际上都没有Aws\AwsClient
方法实现。但是::create_invalidation()
确实实现了PHP魔术方法AwsClient
。您可以看到the PHP docs有关此魔术方法的完整信息,但基本上当您调用对象上不存在的任何方法时,如果其类实现::__call()
,则{{1}将被调用。
现在我们在::__call()
内(您可以看到代码here),此方法最终会调用::__call()
。 Inside of ::getCommand()
你可以看到方法签名需要传入一个数组(第一个参数::__call()
,是唯一的其他方法参数,它将具有值{{1因为上面实现了::getCommand()
的方式)。这就是第一个问题出现的地方:你需要传入一个数组,而不是单个字符串或时间戳或其他任何东西。
但还有另外一件事;您要调用的实际方法不是$name
,而是"create_invalidation"
。 SDK here有完整的API文档 - 请确保选择正确的版本。对于我正在查看的版本,您可以找到用于创建失效的API文档和方法签名here。
您可以在项目GitHub readme中找到有关AWS PHP SDK的大量信息,包括指向用户指南,API文档等的链接。祝你好运,编码愉快:)。