2.3.8. 使用 PHP 访问 Ceph 对象网关
您可以使用 PHP 脚本进行 S3 访问。此流程提供一些示例 PHP 脚本来执行各种任务,如删除存储桶或对象。
以下给出的示例针对 php v5.4.16
和 aws-sdk v2.8.24
测试。不要使用最新版本的 aws-sdk
for php
,因为它需要没有包括在 RHEL 7
默认仓库中的 php >= 5.5+
.php 5.5
。如果要使用 php 5.5
,则必须启用 epel
和其他第三方存储库。另外,php 5.5
和最新版本的 aws-sdk
的配置选项也不同。
先决条件
- 根级访问开发工作站。
- 互联网访问。
流程
安装
php
软件包:[root@dev ~]# yum install php
-
下载适用于 PHP 的
aws-sdk
的 zip 存档并解压缩。 创建项目目录:
[user@dev ~]$ mkdir php_s3 [user@dev ~]$ cd php_s3
将提取的
aws
目录复制到项目目录中。例如:[user@php_s3]$ cp -r ~/Downloads/aws/ ~/php_s3/
创建连接文件:
[user@php_s3]$ 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。按照 Red Hat Ceph Storage Object Gateway Configuration 和 Administration Guide 所述,将MY_ACCESS_KEY
和MY_SECRET_KEY
替换为创建S3
访问时生成的access_key
和secret_key
。使用您复制到
php
项目目录的提取的aws
目录替换PATH_TO_AWS
。保存文件并退出编辑器。
运行该文件:
[user@php_s3]$ php -f conn.php | echo $?
如果您在文件中正确提供了值,命令的输出将是
0
。创建存储桶的新文件:
[user@php_s3]$ vim create_bucket.php
将以下内容粘贴到新文件中:
语法
<?php include 'conn.php'; client->createBucket(array('Bucket' => 'my-new-bucket3')); ?>
保存文件并退出编辑器。
运行该文件:
[user@php_s3]$ php -f create_bucket.php
创建用于列出所拥有的存储桶的新文件:
[user@php_s3]$ 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@php_s3]$ php -f list_owned_buckets.php
输出应类似于如下:
my-new-bucket3 2022-04-21 10:33:19 UTC
首先创建名为
hello.txt
的源文件,以创建对象:[user@php_s3]$ echo "Hello World!" > hello.txt
创建新 php 文件:
[user@php_s3]$ 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@php_s3]$ php -f create_object.php
这将在 bucket
my-new-bucket3
中创建对象hello.txt
。创建用于列出存储桶内容的新文件:
[user@php_s3]$ 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@php_s3]$ php -f list_bucket_content.php
输出类似如下:
hello.txt 12 Fri, 22 Apr 2022 15:54:52 GMT
创建用于删除空存储桶的新文件:
[user@php_s3]$ vim del_empty_bucket.php
将以下内容粘贴到文件中:
语法
<?php include 'conn.php'; client->deleteBucket(array('Bucket' => 'my-new-bucket3')); ?>
保存文件并退出编辑器。
运行该文件:
[user@php_s3]$ php -f del_empty_bucket.php | echo $?
如果删除了存储桶,命令会返回
0
作为输出。注意编辑
create_bucket.php
文件以创建空存储桶,例如:my-new-bucket4、
my-new-bucket5
。接下来,在尝试删除空存储桶前相应地编辑上述del_empty_bucket.php
文件。重要PHP 2 和
aws-sdk
的新版本不支持删除非空存储桶。创建用于删除对象的新文件:
[user@php_s3]$ vim delete_object.php
将以下内容粘贴到文件中:
语法
<?php include 'conn.php'; client->deleteObject(array( 'Bucket' => 'my-new-bucket3', 'Key' => 'hello.txt', )); ?>
保存文件并退出编辑器。
运行该文件:
[user@php_s3]$ php -f delete_object.php
这将删除对象
hello.txt
。