使用 PHP 访问 Ceph Object Gateway

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

重要信息: 针对 php v5.4.16aws-sdk v2.8.24测试示例。

先决条件

  • 对开发工作站的根级别访问权。

  • 因特网访问。

  1. 安装 php 软件包:

    [root@dev ~]# yum install php
  2. 下载 aws-sdk for PHP 的压缩包并解压。

  3. 创建项目目录:

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

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

    [user@dev ~]$ 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。 将 PATH_TO_AWS 替换为您复制到 php 项目目录的已解压缩 aws 目录的绝对路径。

    保存文件并退出编辑器。

  7. 运行文件:

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

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

  8. 创建新文件以创建存储区:

    [user@dev ~]$ vim create_bucket.php

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

    语法

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

    保存文件并退出编辑器。

  9. 运行文件:

    [user@dev ~]$ php -f create_bucket.php
  10. 创建新文件以列出拥有的存储区:

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

    保存文件并退出编辑器。

  11. 运行文件:

    [user@dev ~]$ php -f list_owned_buckets.php

    输出应该类似于以下内容:

    my-new-bucket3 2020-01-21 10:33:19 UTC
  12. 通过首先创建名为 hello.txt的源文件来创建对象:

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

    保存文件并退出编辑器。

  14. 运行文件:

    [user@dev ~]$ php -f create_object.php

    这将在存储区 my-new-bucket3中创建对象 hello.txt

  15. 创建新文件以列出存储区的内容:

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

    保存文件并退出编辑器。

  16. 运行文件:

    [user@dev ~]$ php -f list_bucket_content.php

    输出将类似于以下内容:

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

    [user@dev ~]$ vim del_empty_bucket.php

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

    语法

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

    保存文件并退出编辑器。

  18. 运行文件:

    [user@dev ~]$ php -f del_empty_bucket.php | echo $?
    如果成功删除存储区,那么该命令将返回 0 作为输出。
    重要信息: 在 PHP 2 和更高版本的 aws-sdk中,当前不支持删除非空存储区。
    注: 编辑 create_bucket.php 文件以创建空存储区,例如 my-new-bucket4my-new-bucket5。 接下来,在删除空存储区之前,请相应地编辑 del_empty_bucket.php 文件。
  19. 创建用于删除对象的新文件:

    [user@dev ~]$ vim delete_object.php

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

    语法

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

    保存文件并退出编辑器。

  20. 运行文件:

    [user@dev ~]$ php -f delete_object.php

    这将删除对象 hello.txt