我跟踪了此页的安装。
它是SDK的第3版。基本用法这里。
<?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(), "/*");根据这篇文章的说法。
可捕获的致命错误:传递给Aws\AwsClient::getCommand()的参数2必须是类型数组,字符串给定,在第167行的/Users/jason/www/aws/vendor/aws/aws-sdk-php/src/AwsClient.php中调用,在第211行的/Users/jason/www/aws/vendor/aws/aws-sdk-php/src/AwsClient.php中定义
更新和工作解决方案如下:
$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);发布于 2016-02-28 16:06:00
我看了一下这里发生了什么,很明显,您使用的是无效的方法签名。
首先,AWS使用所谓的“服务描述模型”来获得您指定的版本的API接口。在这种情况下,这意味着他们正在使用一些元编程技术来提供一个接口,这个接口看起来像是正常的PHP函数调用,但是函数在SDK中并不是硬编码的。它们实际上并不存在于我们通常认为的意义上,至少不是常规的PHP函数。一些PHP魔法正在下面进行。
当您调用$cdn->create_invalidation()时,它运行在从Aws\AwsClient继承的Aws\CloudFront\CloudFrontClient实例上。这些类(或它们的任何祖先)实际上都没有::create_invalidation()方法实现。但是AwsClient确实实现了PHP魔术方法::__call()。有关这个神奇方法的完整信息,您可以看到PHP文档,但是基本上,当您调用对象上不存在的任何方法时,如果它的类实现了::__call(),那么::__call()将被调用。
现在我们进入了::__call() (您可以看到代码这里),这个方法最终调用了::getCommand()。::getCommand() --您可以看到,方法签名需要传入一个数组(第一个参数$name是唯一的其他方法参数,由于::__call()的实现方式,它将具有"create_invalidation"值)。这就是第一个问题出现的地方:你需要传递一个数组,而不是单独的字符串、时间戳或其他任何东西。
但是还有一件事:要调用的实际方法不是create_invalidation,而是createInvalidation。对于SDK 这里有完整的API文档--只需确保选择正确的版本即可。对于我正在查看的版本,您可以找到用于创建无效这里的API文档和方法签名。
您可以在项目的GitHub自述中找到许多有关AWS的信息,包括指向用户指南、API等的链接。祝好运和愉快的编码:)
https://stackoverflow.com/questions/32719717
复制相似问题