注意
本文档适用于 Ceph 开发版本。
PHP S3示例
安装AWS PHP SDK
这使用composer安装AWS PHP SDK(参见这里如何安装composer)。
$ composer install aws/aws-sdk-php
创建连接
这会创建一个连接,以便你可以与服务器交互。
Note
客户端初始化需要一个区域,所以我们使用''
.
<?php
use Aws\S3\S3Client;
define('AWS_KEY', 'place access key here');
define('AWS_SECRET_KEY', 'place secret key here');
$ENDPOINT = 'http://objects.dreamhost.com';
// require the amazon sdk from your composer vendor dir
require __DIR__.'/vendor/autoload.php';
// Instantiate the S3 class and point it at the desired host
$client = new S3Client([
'region' => '',
'version' => '2006-03-01',
'endpoint' => $ENDPOINT,
'credentials' => [
'key' => AWS_KEY,
'secret' => AWS_SECRET_KEY
],
// Set the S3 class to use objects.dreamhost.com/bucket
// instead of bucket.objects.dreamhost.com
'use_path_style_endpoint' => true
]);
列出拥有的存储桶
这获取一个AWS\Result
更方便使用数组访问方式访问的实例。这也打印出每个存储桶的名称和创建日期。
<?php
$listResponse = $client->listBuckets();
$buckets = $listResponse['Buckets'];
foreach ($buckets as $bucket) {
echo $bucket['Name'] . "\t" . $bucket['CreationDate'] . "\n";
}
输出看起来会像这样:
mahbuckat1 2011-04-21T18:05:39.000Z
mahbuckat2 2011-04-21T18:05:48.000Z
mahbuckat3 2011-04-21T18:07:18.000Z
创建存储桶
这会创建一个名为my-new-bucket
的异步执行并返回一个AWS\Result
object.
<?php
$client->createBucket(['Bucket' => 'my-new-bucket']);
列出存储桶的内容
这获取一个AWS\Result
更方便使用数组访问方式访问的实例。然后它打印出每个对象的名称、文件大小和最后修改日期。
<?php
$objectsListResponse = $client->listObjects(['Bucket' => $bucketname]);
$objects = $objectsListResponse['Contents'] ?? [];
foreach ($objects as $object) {
echo $object['Key'] . "\t" . $object['Size'] . "\t" . $object['LastModified'] . "\n";
}
Note
如果这个存储桶中有超过1000个对象,
如果存储桶中有一些文件,输出将类似于以下内容:
myphoto1.jpg 251262 2011-08-08T21:35:48.000Z
myphoto2.jpg 262518 2011-08-08T21:38:01.000Z
删除存储桶
这删除名为my-old-bucket
的异步执行并返回一个AWS\Result
object
Note
存储桶必须是空的!否则它将不起作用!
<?php
$client->deleteBucket(['Bucket' => 'my-old-bucket']);
创建对象
这创建一个对象hello.txt
包含字符串"Hello World!"
<?php
$client->putObject([
'Bucket' => 'my-bucket-name',
'Key' => 'hello.txt',
'Body' => "Hello World!"
]);
更改对象的 ACL
这会使对象hello.txt
要公开可读并secret_plans.txt
并且是私有的。
<?php
$client->putObjectAcl([
'Bucket' => 'my-bucket-name',
'Key' => 'hello.txt',
'ACL' => 'public-read'
]);
$client->putObjectAcl([
'Bucket' => 'my-bucket-name',
'Key' => 'secret_plans.txt',
'ACL' => 'private'
]);
删除对象
这会删除对象goodbye.txt
<?php
$client->deleteObject(['Bucket' => 'my-bucket-name', 'Key' => 'goodbye.txt']);
下载对象(到文件)
这会下载对象poetry.pdf
并将其保存到/home/larry/documents/
<?php
$object = $client->getObject(['Bucket' => 'my-bucket-name', 'Key' => 'poetry.pdf']);
file_put_contents('/home/larry/documents/poetry.pdf', $object['Body']->getContents());
生成对象下载 URL(签名和未签名的)
这会为hello.txt
。hello.txt
公开。然后为secret_plans.txt
生成一个有效的下载URL
<?php
$hello_url = $client->getObjectUrl('my-bucket-name', 'hello.txt');
echo $hello_url."\n";
$secret_plans_cmd = $client->getCommand('GetObject', ['Bucket' => 'my-bucket-name', 'Key' => 'secret_plans.txt']);
$request = $client->createPresignedRequest($secret_plans_cmd, '+1 hour');
echo $request->getUri()."\n";
这的输出看起来会像这样:
http://objects.dreamhost.com/my-bucket-name/hello.txt
http://objects.dreamhost.com/my-bucket-name/secret_plans.txt?X-Amz-Content-Sha256=UNSIGNED-PAYLOAD&X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=sandboxAccessKey%2F20190116%2F%2Fs3%2Faws4_request&X-Amz-Date=20190116T125520Z&X-Amz-SignedHeaders=host&X-Amz-Expires=3600&X-Amz-Signature=61921f07c73d7695e47a2192cf55ae030f34c44c512b2160bb5a936b2b48d923
由 Ceph 基金会带给您
Ceph 文档是一个社区资源,由非盈利的 Ceph 基金会资助和托管Ceph Foundation. 如果您想支持这一点和我们的其他工作,请考虑加入现在加入.