我更愿意创建一个可以处理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
并显示错误消息。
答案 0 :(得分:0)
好吧,事实证明当我将它上传到服务器时这很有效,但是当在IDE(Zend Studio / Eclipse)中进行测试时,它试图通过完整的文件路径进行访问,并且该文件路径触发了权限错误
我怀疑Zend / Eclipse的权限和phar包存在一些问题。但是,我不确定是否可以在IDE中使用它。