【发布时间】:2018-01-26 18:25:48
【问题描述】:
我更愿意创建一个可以处理 AWS PHP SDK 调用的类,而不是根据需要进行内联设置。给定这个例子:
require('aws.phar');
use Aws\S3\S3Client;
use Aws\Exception\AwsException;
use Aws\S3\Exception\S3Exception;
$region = 'us-east-1';
try {
$s3 = S3Client::factory(array(
'credentials' => array(
'key' => AWS_ACCESS_KEY_ID,
'secret' => AWS_SECRET_ACCESS_KEY),
'region' => $region,
'version' => 'latest'
));
print_r($s3->listBuckets());
}
catch (S3Exception $e) {echo $e->getMessage();}
catch (AwsException $e) {echo $e->getAwsErrorType().' '.$e->getAwsErrorCode();}
catch (Exception $e) {echo $e->getMessage();}
最终,我想要一个这样的类文件(最接近的猜测):
require_once('aws.phar');
class S3 {
private $region = 'us-east-1';
private $s3;
public function create() {
try {
$this->s3 = Aws\S3\S3Client::factory(array(
'credentials' => array(
'key' => AWS_ACCESS_KEY_ID,
'secret' => AWS_SECRET_ACCESS_KEY),
'region' => $this->region,
'version' => 'latest'
));
}
catch (Aws\Exception\AwsException $e) {echo $e->getMessage();}
catch (Aws\S3\Exception\S3Exception $e) {echo $e->getAwsErrorType().' '.$e->getAwsErrorCode();}
catch (Exception $e) {echo $e->getMessage();}
}
public function list() {
if (!$this->s3) return false;
return $this->s3->listBuckets();
}
}
$s3 = new S3();
$s3->create();
$s3->list();
我一直在寻找解决方案,但我一无所获。我认为最接近的是使用 Traits,但话说回来,我以前没有使用过它们,所以我没有任何运气。
--- 编辑添加:
我没有注意到发生了什么错误,但我最初的一些错误在创建此示例后消失了。我不确定在类外部使用 require_once 时范围将如何工作,并尝试了各种方法,因为我认为该类将无法看到 AWS 命名空间。显然情况并非如此,因为我能够运行我的测试脚本,但它会返回:
Unable to open phar://<path_omitted>/aws.phar/Aws/S3/Resources/s3-latest.php for reading
它执行到$this->s3 = Aws\S3\S3Client::factory 并捕获标准Exception 并显示错误消息。
【问题讨论】:
-
从表面上看,您的示例看起来不错。请添加一些关于“我无处可去”和“我没有任何运气”的信息。问题的症状很重要。
-
那么...怎么了?
-
奇怪的是清理它,它工作得更好,但现在说:“无法打开 phar://
/aws.phar/Aws/S3/Resources/s3-latest.php供阅读”
标签: php amazon-web-services oop namespaces traits