php aws_版本 3 的基本使用模式AWS SDK for PHP - 适用于 PHP 的 AWS 开发工具包

本文介绍了如何在PHP中使用AWS SDK版本3的基本用法,包括创建客户端、配置选项、执行服务操作和处理错误。通过示例展示了如何创建S3Client,发送异步请求,以及如何处理同步和异步错误。
摘要由CSDN通过智能技术生成

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

版本 3 的基本使用模式AWS SDK for PHP

本主题主要介绍 AWS SDK for PHP 的基本使用模式。

Prerequisites

在您的代码中包含开发工具包

无论您使用哪种方式安装开发工具包,都可以通过单独的 require 语句在您的代码中包含开发工具包。请参阅以下 PHP 代码表,了解符合您的安装方式的代码。请使用系统的实际路径替换 /path/to/ 的任何实例。

安装方法

所需语句

使用 Composer

require '/path/to/vendor/autoload.php';

使用 phar

require '/path/to/aws.phar';

使用 ZIP

require '/path/to/aws-autoloader.php';

在本主题中,我们展示的示例使用 Composer 安装方法。如果您使用其他安装方法,可以回到这一部分来查找应使用的正确 require 代码。

用法总结

要使用开发工具包与 AWS 服务进行交互,需将客户端对象实例化。客户端对象包含与服务 API 中的操作一一对应的方法。要执行特定操作,可以调用相应的方法。如果成功,此方法可返回与数组类似的结果对象;如果失败,可引发异常。

创建客户端

您可以通过向客户端的构造函数传递选项的关联数组来创建客户端。

导入

require 'vendor/autoload.php';

use Aws\S3\S3Client;

use Aws\Exception\AwsException;

示例代码

//Create a S3Client

$s3 = new Aws\S3\S3Client([

'version' => 'latest',

'region' => 'us-east-2'

]);

请注意,我们并未向客户端显式提供凭证。这是因为开发工具包应从环境变量(通过 AWS_ACCESS_KEY_ID 和 AWS_SECRET_ACCESS_KEY)、主目录中的 AWS 凭证 INI 文件、AWS Identity and Access Management (IAM) 实例配置文件凭证或凭证提供程序中检测凭证。

在配置指南中详细介绍了所有通用的客户端配置选项。创建的客户端不同,提供的选项数组也不同。每个客户端的 API 文档中介绍了这些自定义客户端配置选项。

使用 Sdk 类

Aws\Sdk 类可作为客户端工厂,用于管理多个客户端的共享配置选项。可提供给特定客户端构造函数的选项也可提供给 Aws\Sdk 类。这些选项会应用于每个客户端构造函数。

导入

require 'vendor/autoload.php';

use Aws\S3\S3Client;

use Aws\Exception\AwsException;

示例代码

// The same options that can be provided to a specific client constructor can also be supplied to the Aws\Sdk class.

// Use the us-west-2 region and latest version of each client.

$sharedConfig = [

'region' => 'us-west-2',

'version' => 'latest'

];

// Create an SDK class used to share configuration across clients.

$sdk = new Aws\Sdk($sharedConfig);

// Create an Amazon S3 client using the shared configuration data.

$client = $sdk->createS3();

所有客户端均可共享的选项置于根级别的键值对中。可在与服务命名空间相同的键(例如“S3”、“DynamoDb”等)中提供特定于服务的配置数据。

$sdk = new Aws\Sdk([

'region' => 'us-west-2',

'version' => 'latest',

'DynamoDb' => [

'region' => 'eu-central-1'

]

]);

// Creating an Amazon DynamoDb client will use the "eu-central-1" AWS Region

$client = $sdk->createDynamoDb();

特定于服务的配置值结合了特定于服务的值和根级值 (即特定于服务的值浅合并到根级值)。

注意

如果您在应用程序中使用多个客户端实例,强烈建议您使用 Sdk 类来创建客户端。Sdk 类会自动针对每个开发工具包客户端使用同一 HTTP 客户端,允许不同服务的开发工具包客户端执行非阻塞 HTTP 请求。如果开发工具包客户端未使用同一 HTTP 客户端,则开发工具包客户端发送的

HTTP 请求可能会阻塞服务之间的 Promise 协调。

执行服务操作

通过在客户端对象上调用同名方法,可执行服务操作。例如,要执行 Amazon S3 PutObject 操作,您必须调用 Aws\S3\S3Client::putObject() 方法。

导入

require 'vendor/autoload.php';

use Aws\S3\S3Client;

示例代码

// Use the us-east-2 region and latest version of each client.

$sharedConfig = [

'profile' => 'default',

'region' => 'us-east-2',

'version' => 'latest'

];

// Create an SDK class used to share configuration across clients.

$sdk = new Aws\Sdk($sharedConfig);

// Use an Aws\Sdk class to create the S3Client object.

$s3Client = $sdk->createS3();

// Send a PutObject request and get the result object.

$result = $s3Client->putObject([

'Bucket' => 'my-bucket',

'Key' => 'my-key',

'Body' => 'this is the body!'

]);

// Download the contents of the object.

$result = $s3Client->getObject([

'Bucket' => 'my-bucket',

'Key' => 'my-key'

]);

// Print the body of the result by indexing into the result object.

echo $result['Body'];

客户端提供的操作,以及输入、输出的结构是根据服务描述文件在运行时定义的。创建客户端时必须提供版本(例如“2006-03-01”或“latest”)。开发工具包会根据提供的版本找到相应的配置文件。

所有操作方法 (如 putObject()) 均接受单独的参数,或代表操作参数的关联数组。此数组的结构(以及结果对象的结构)是针对开发工具包的 API 文档中的每个操作定义的(例如,请参阅 API 文档中的

putObject 操作)。

HTTP 处理程序选项

您还可以使用特殊的 @http 参数微调底层 HTTP 处理程序执行请求的方式。可包含在 @http 参数中的选项与您在使用“http”客户端选项对客户端进行实例化时可设置的选项相同。

// Send the request through a proxy

$result = $s3Client->putObject([

'Bucket' => 'my-bucket',

'Key' => 'my-key',

'Body' => 'this is the body!',

'@http' => [

'proxy' => 'http://192.168.16.1:10'

]

]);

异步请求

您可以使用开发工具包的异步功能并发发送命令。您可以通过使用 Async 作为操作名称的后缀来异步发送请求。 这将启动请求并返回 Promise。如果成功,结果对象可满足 Promise;如果失败,异常会导致拒绝 Promise。您可以创建多个

Promise,并由它们在底层 HTTP 处理程序传输请求时并发发送 HTTP 请求。

导入

require 'vendor/autoload.php';

use Aws\S3\S3Client;

use Aws\Exception\AwsException;

示例代码

// Create an SDK class used to share configuration across clients.

$sdk = new Aws\Sdk([

'region' => 'us-west-2',

'version' => 'latest'

]);

// Use an Aws\Sdk class to create the S3Client object.

$s3Client = $sdk->createS3();

//Listing all S3 Bucket

$CompleteSynchronously = $s3Client->listBucketsAsync();

// Block until the result is ready.

$CompleteSynchronously = $CompleteSynchronously->wait();

您可以使用 Promise 的 wait 方法,强制 Promise 同步完成。默认情况下,强制完成 Promise 也会“解封”Promise 的状态,这意味着它会返回 Promise 的结果或引发异常。如果针对

Promise 调用 wait(),流程将会阻塞,直到 HTTP 请求完成并填充结果,或引发异常。

如果使用具有事件循环库的开发工具包,请不要阻塞结果。请使用结果的 then() 方法,在操作完成时访问已解决或被拒绝的 Promise。

导入

require 'vendor/autoload.php';

use Aws\S3\S3Client;

use Aws\Exception\AwsException;

示例代码

// Create an SDK class used to share configuration across clients.

$sdk = new Aws\Sdk([

'region' => 'us-west-2',

'version' => 'latest'

]);

// Use an Aws\Sdk class to create the S3Client object.

$s3Client = $sdk->createS3();

$promise = $s3Client->listBucketsAsync();

$promise

->then(function ($result) {

echo 'Got a result: ' . var_export($result, true);

})

->otherwise(function ($reason) {

echo 'Encountered an error: ' . $reason->getMessage();

});

}

使用 Result 对象

执行成功的操作会返回 Aws\Result 对象。开发工具包不会返回服务的原始 XML 或 JSON 数据,而是会将响应数据强制加入关联数组结构中。这样可以根据它对特定服务和底层响应结构的认知,将数据的某些方面规范化。

您可以从 AWSResult 对象(如关联 PHP 数组)访问数据。

导入

require 'vendor/autoload.php';

use Aws\S3\S3Client;

use Aws\Exception\AwsException;

示例代码

// Use the us-east-2 region and latest version of each client.

$sharedConfig = [

'profile' => 'default',

'region' => 'us-east-2',

'version' => 'latest'

];

// Create an SDK class used to share configuration across clients.

$sdk = new Aws\Sdk($sharedConfig);

// Use an Aws\Sdk class to create the S3Client object.

$s3 = $sdk->createS3();

$result = $s3->listBuckets();

foreach ($result['Buckets'] as $bucket) {

echo $bucket['Name'] . "\n";

}

// Convert the result object to a PHP array

$array = $result->toArray();

结果对象的内容取决于执行的操作和服务的版本。每个 API 操作的结果结构均记录在每个操作的 API 文档中。

该开发工具包与 JMESPath 集成,后者是一种 DSL,用于搜索和操作 JSON 数据,在我们的示例中为 PHP 数组。结果对象包含 search() 方法,可用于更具声明性地从结果中提取数据。

示例代码

$s3 = $sdk->createS3();

$result = $s3->listBuckets();

$names = $result->search('Buckets[].Name');

处理错误

同步处理错误

如果在执行操作时发生错误,将引发异常。因此,如果您需要在代码中处理错误,请围绕您的操作使用 try/catch 数据块。发生错误时,开发工具包会引发特定于服务的异常。

以下示例使用 Aws\S3\S3Client。 如果出现错误,引发的异常将为 Aws\S3\Exception\S3Exception 类型。 开发工具包引发的所有特定于服务的异常是从 Aws\Exception\AwsException 类扩展的。这个类中包含有关故障的有用信息,包括请求 ID、错误代码和错误类型。注意:对于某些支持它的服务,响应数据被强制转换为关联数组结构(类似于 Aws\Result 对象),可以像普通 PHP 关联数组那样进行访问。toArray() 方法返回任意此类数据(如果存在)。

导入

require 'vendor/autoload.php';

use Aws\S3\S3Client;

use Aws\Exception\AwsException;

use Aws\S3\Exception\S3Exception;

示例代码

// Create an SDK class used to share configuration across clients.

$sdk = new Aws\Sdk([

'region' => 'us-west-2',

'version' => 'latest'

]);

// Use an Aws\Sdk class to create the S3Client object.

$s3Client = $sdk->createS3();

try {

$s3Client->createBucket(['Bucket' => 'my-bucket']);

} catch (S3Exception $e) {

// Catch an S3 specific exception.

echo $e->getMessage();

} catch (AwsException $e) {

// This catches the more generic AwsException. You can grab information

// from the exception using methods of the exception object.

echo $e->getAwsRequestId() . "\n";

echo $e->getAwsErrorType() . "\n";

echo $e->getAwsErrorCode() . "\n";

// This dumps any modeled response data, if supported by the service

// Specific members can be accessed directly (e.g. $e['MemberName'])

var_dump($e->toArray());

}

异步处理错误

在发送异步请求的时候不会引发异常。您必须使用返回的 Promise 的 then() 或 otherwise() 方法来接收结果或错误。

导入

require 'vendor/autoload.php';

use Aws\S3\S3Client;

use Aws\Exception\AwsException;

use Aws\S3\Exception\S3Exception;

示例代码

//Asynchronous Error Handling

$promise = $s3Client->createBucketAsync(['Bucket' => 'my-bucket']);

$promise->otherwise(function ($reason) {

var_dump($reason);

});

// This does the same thing as the "otherwise" function.

$promise->then(null, function ($reason) {

var_dump($reason);

});

您可以“解封”Promise,从而引发异常。

导入

导入

require 'vendor/autoload.php';

use Aws\S3\S3Client;

use Aws\Exception\AwsException;

use Aws\S3\Exception\S3Exception;

示例代码

$promise = $s3Client->createBucketAsync(['Bucket' => 'my-bucket']);

//throw exception

try {

$result = $promise->wait();

} catch (S3Exception $e) {

echo $e->getMessage();

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值