2.3.8. 使用 PHP 访问 Ceph 对象网关


您可以使用 PHP 脚本进行 S3 访问。此流程提供一些示例 PHP 脚本来执行各种任务,如删除存储桶或对象。

重要

以下给出的示例针对 php v5.4.16aws-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 的配置选项也不同。

先决条件

  • 根级访问开发工作站。
  • 互联网访问。

流程

  1. 安装 php 软件包:

    [root@dev ~]# yum install php
  2. 下载适用于 PHP 的 aws-sdk 的 zip 存档并解压缩。
  3. 创建项目目录:

    [user@dev ~]$ mkdir php_s3
    [user@dev ~]$ cd php_s3
  4. 将提取的 aws 目录复制到项目目录中。例如:

    [user@php_s3]$ cp -r ~/Downloads/aws/ ~/php_s3/
  5. 创建连接文件:

    [user@php_s3]$ vim conn.php
  6. 将以下内容粘贴到 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_KEYMY_SECRET_KEY 替换为创建 S3 访问时生成的 access_key secret_key使用您复制到 php 项目目录的提取的 aws 目录替换 PATH_TO_AWS

    保存文件并退出编辑器。

  7. 运行该文件:

    [user@php_s3]$ php -f conn.php | echo $?

    如果您在文件中正确提供了值,命令的输出将是 0

  8. 创建存储桶的新文件:

    [user@php_s3]$ vim create_bucket.php

    将以下内容粘贴到新文件中:

    语法

    <?php
    
    include 'conn.php';
    
    client->createBucket(array('Bucket' => 'my-new-bucket3'));
    
    ?>

    保存文件并退出编辑器。

  9. 运行该文件:

    [user@php_s3]$ php -f create_bucket.php
  10. 创建用于列出所拥有的存储桶的新文件:

    [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";
    }
    
    ?>

    保存文件并退出编辑器。

  11. 运行该文件:

    [user@php_s3]$ php -f list_owned_buckets.php

    输出应类似于如下:

    my-new-bucket3 2022-04-21 10:33:19 UTC
  12. 首先创建名为 hello.txt 的源文件,以创建对象:

    [user@php_s3]$ echo "Hello World!" > hello.txt
  13. 创建新 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);
    
    ?>

    保存文件并退出编辑器。

  14. 运行该文件:

    [user@php_s3]$ php -f create_object.php

    这将在 bucket my-new-bucket3 中创建对象 hello.txt

  15. 创建用于列出存储桶内容的新文件:

    [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";
    }
    ?>

    保存文件并退出编辑器。

  16. 运行该文件:

    [user@php_s3]$ php -f list_bucket_content.php

    输出类似如下:

    hello.txt    12    Fri, 22 Apr 2022 15:54:52 GMT
  17. 创建用于删除空存储桶的新文件:

    [user@php_s3]$ vim del_empty_bucket.php

    将以下内容粘贴到文件中:

    语法

    <?php
    
    include 'conn.php';
    
    client->deleteBucket(array('Bucket' => 'my-new-bucket3'));
    ?>

    保存文件并退出编辑器。

  18. 运行该文件:

    [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 的新版本不支持删除非空存储桶。

  19. 创建用于删除对象的新文件:

    [user@php_s3]$ vim delete_object.php

    将以下内容粘贴到文件中:

    语法

    <?php
    
    include 'conn.php';
    
    client->deleteObject(array(
        'Bucket' => 'my-new-bucket3',
        'Key'    => 'hello.txt',
    ));
    ?>

    保存文件并退出编辑器。

  20. 运行该文件:

    [user@php_s3]$ php -f delete_object.php

    这将删除对象 hello.txt

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.