2.3.8. PHP를 사용하여 Ceph Object Gateway에 액세스
S3 액세스에 PHP 스크립트를 사용할 수 있습니다. 이 절차에서는 버킷 또는 오브젝트 삭제와 같은 다양한 작업을 수행하는 몇 가지 PHP 스크립트 예를 제공합니다.
아래 예제는 php v5.4.16
및 aws-sdk v2.8.24
에 대해 테스트됩니다. php
>= 5.5 이상이 필요하므로 최신 버전의 aws-sdk
를 사용하지 마십시오.php
는 5.5
RHEL 7
의 기본 리포지토리에서 사용할 수 없습니다. 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으로 교체합니다.MY_ACCESS_KEY
및MY_SECRET_KEY
를 Red Hat Ceph Storage 오브젝트 게이트웨이 구성 및 관리 가이드에서 언급한 대로S3
액세스용radosgw
사용자를 생성할 때 생성된access_key
및secret_key
로 바꿉니다.PATH_TO_AWS
를php
프로젝트 디렉터리에 복사한 추출된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
이렇게 하면
hello.txt
개체가my-new-bucket3
버킷에 생성됩니다.버킷의 콘텐츠를 나열할 새 파일을 만듭니다.
[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
오브젝트가 삭제됩니다.