3.2.7. PHP を使用した Ceph Object Gateway へのアクセス
S3 アクセスには PHP スクリプトを使用できます。この手順では、バケットやオブジェクトの削除など、さまざまなタスクを実行する PHP スクリプトの例を提供します。
以下は、php v5.4.16 および aws-sdk v2.8.24 に対してテストされています。
前提条件
- 開発ワークステーションへのルートレベルのアクセス。
- インターネットアクセス。
手順
phpパッケージをインストールします。[root@dev ~]# yum install php-
PHP 用に
aws-sdkの zip アーカイブを ダウンロード し、展開します。 プロジェクトディレクトリーを作成します。
[user@dev ~]$ mkdir php_s3 [user@dev ~]$ cd php_s3抽出した
awsディレクトリーをプロジェクトのディレクトリーにコピーします。以下に例を示します。[user@dev ~]$ cp -r ~/Downloads/aws/ ~/php_s3/コネクションファイルを作成します。
[user@dev ~]$ vim conn.phpconn.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 に置き換えます。MY_ACCESS_KEYとMY_SECRET_KEY を、Red Hat Ceph Storage Object Gateway 設定および管理ガイド に記載されているように、S3アクセス用にradosgwユーザーを作成したときに生成されたaccess_keyとsecret_keyに置き換えてください。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を出力として返します。注記create_bucket.phpファイルを編集し、空のバケットを作成します (例:my-new-bucket4、my-new-bucket5)。次に、空のバケットの削除を試みる前に、上記のdel_empty_bucket.phpファイルを適宜編集します。重要空でないバケットの削除は、現在 PHP 2 以降のバージョンの
aws-sdkではサポートされていません。オブジェクトを削除する新しいファイルを作成します。
[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が削除されます。