处理 适用于 PHP 的 Amazon SDK 版本 3 中的错误 - 适用于 PHP 的 Amazon SDK
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

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

处理 适用于 PHP 的 Amazon SDK 版本 3 中的错误

同步处理错误

如果在执行操作时发生错误,将引发异常。因此,如果您需要在代码中处理错误,请围绕您的操作使用 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' ]); // 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(); }