使用 PHP 访问 Ceph Object Gateway
使用 PHP 脚本进行 S3 访问。 此过程提供了一些示例 PHP 脚本来执行各种任务,例如删除存储区或对象。
重要信息: 针对
php v5.4.16 和 aws-sdk v2.8.24测试示例。先决条件
对开发工作站的根级别访问权。
因特网访问。
安装
php软件包:[root@dev ~]# yum install php下载
aws-sdkfor PHP 的压缩包并解压。创建项目目录:
[user@dev ~]$ mkdir php_s3 [user@dev ~]$ cd php_s3将解压缩的
aws目录复制到项目目录。 例如:[user@dev ~]$ cp -r ~/Downloads/aws/ ~/php_s3/创建连接文件:
[user@dev ~]$ vim conn.php将以下内容粘贴到
conn.php文件中:语法
<?php define(AWS_KEY, MY_ACCESS_KEY); define(AWS_SECRET_KEY, MY_SECRET_KEY); define(HOST, FQDN_OF_GATEWAY_NODE); define(PORT, 8080); // require the AWS SDK for php library require /PATH_TO_AWS/aws-autoloader.php; use Aws\S3\S3Client; // Establish connection with host using S3 Client client = S3Client::factory(array( base_url => HOST, port => PORT, key => AWS_KEY, secret => AWS_SECRET_KEY )); ?>将
FQDN_OF_GATEWAY_NODE替换为网关节点的 FQDN。 将PATH_TO_AWS替换为您复制到php项目目录的已解压缩aws目录的绝对路径。保存文件并退出编辑器。
运行文件:
[user@dev ~]$ php -f conn.php | echo $?如果在文件中正确提供了值,那么命令的输出将为
0。创建新文件以创建存储区:
[user@dev ~]$ vim create_bucket.php将以下内容粘贴到新文件中:
语法
<?php include 'conn.php'; client->createBucket(array('Bucket' => 'my-new-bucket3')); ?>保存文件并退出编辑器。
运行文件:
[user@dev ~]$ php -f create_bucket.php创建新文件以列出拥有的存储区:
[user@dev ~]$ vim list_owned_buckets.php将以下内容粘贴到该文件中:
语法
<?php include 'conn.php'; blist = client->listBuckets(); echo "Buckets belonging to " . blist['Owner']['ID'] . ":\n"; foreach (blist['Buckets'] as b) { echo "{b['Name']}\t{b['CreationDate']}\n"; } ?>保存文件并退出编辑器。
运行文件:
[user@dev ~]$ php -f list_owned_buckets.php输出应该类似于以下内容:
my-new-bucket3 2020-01-21 10:33:19 UTC通过首先创建名为
hello.txt的源文件来创建对象:[user@dev ~]$ echo "Hello World!" > hello.txt创建新的 php 文件:
[user@dev ~]$ vim create_object.php将以下内容粘贴到文件中:
语法
<?php include 'conn.php'; key = 'hello.txt'; source_file = './hello.txt'; acl = 'private'; bucket = 'my-new-bucket3'; client->upload(bucket, key, fopen(source_file, 'r'), acl); ?>保存文件并退出编辑器。
运行文件:
[user@dev ~]$ php -f create_object.php这将在存储区
my-new-bucket3中创建对象hello.txt。创建新文件以列出存储区的内容:
[user@dev ~]$ vim list_bucket_content.php将以下内容粘贴到该文件中:
语法
<?php include 'conn.php'; o_iter = client->getIterator('ListObjects', array( 'Bucket' => 'my-new-bucket3' )); foreach (o_iter as o) { echo "{o['Key']}\t{o['Size']}\t{o['LastModified']}\n"; } ?>保存文件并退出编辑器。
运行文件:
[user@dev ~]$ php -f list_bucket_content.php输出将类似于以下内容:
hello.txt 12 Fri, 22 Jan 2020 15:54:52 GMT创建用于删除空存储区的新文件:
[user@dev ~]$ vim del_empty_bucket.php将以下内容粘贴到文件中:
语法
<?php include 'conn.php'; client->deleteBucket(array('Bucket' => 'my-new-bucket3')); ?>保存文件并退出编辑器。
运行文件:
[user@dev ~]$ php -f del_empty_bucket.php | echo $?如果成功删除存储区,那么该命令将返回0作为输出。重要信息: 在 PHP 2 和更高版本的aws-sdk中,当前不支持删除非空存储区。注: 编辑create_bucket.php文件以创建空存储区,例如my-new-bucket4或my-new-bucket5。 接下来,在删除空存储区之前,请相应地编辑del_empty_bucket.php文件。创建用于删除对象的新文件:
[user@dev ~]$ vim delete_object.php将以下内容粘贴到文件中:
语法
<?php include 'conn.php'; client->deleteObject(array( 'Bucket' => 'my-new-bucket3', 'Key' => 'hello.txt', )); ?>保存文件并退出编辑器。
运行文件:
[user@dev ~]$ php -f delete_object.php这将删除对象
hello.txt。