7172a1b7创建于 2019年4月18日历史提交
<?php



/**

 * Copyright 2019 Huawei Technologies Co.,Ltd.

 * Licensed under the Apache License, Version 2.0 (the "License"); you may not use

 * this file except in compliance with the License.  You may obtain a copy of the

 * License at

 *

 * http://www.apache.org/licenses/LICENSE-2.0

 *

 * Unless required by applicable law or agreed to in writing, software distributed

 * under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR

 * CONDITIONS OF ANY KIND, either express or implied.  See the License for the

 * specific language governing permissions and limitations under the License.

 *

 */



/**

 * This sample demonstrates how to do bucket-related operations

 * (such as do bucket ACL/CORS/Lifecycle/Logging/Website/Location/Tagging/OPTIONS) 

 * on OBS using the OBS SDK for PHP.

 */

if (file_exists ( 'vendor/autoload.php' )) {

	require 'vendor/autoload.php';

} else {

	require '../vendor/autoload.php'; // sample env

}



if (file_exists ( 'obs-autoloader.php' )) {

	require 'obs-autoloader.php';

} else {

	require '../obs-autoloader.php'; // sample env

}



use Obs\ObsClient;

use Obs\ObsException;

use function GuzzleHttp\json_encode;



$ak = '*** Provide your Access Key ***';



$sk = '*** Provide your Secret Key ***';



$endpoint = 'https://your-endpoint:443';



$bucketName = 'my-obs-bucket-demo';





/*

 * Constructs a obs client instance with your account for accessing OBS

 */

$obsClient = ObsClient::factory ( [ 

		'key' => $ak,

		'secret' => $sk,

		'endpoint' => $endpoint,

		'socket_timeout' => 30,

		'connect_timeout' => 10

] );





try {

	

	/*

	 * Put bucket operation

	 */

	createBucket ();

	

	/*

	 * Get bucket location operation

	 */

	getBucketLocation ();

	

	/*

	 * Get bucket storageInfo operation

	 */

	getBucketStorageInfo ();

	

	/*

	 * Put/Get bucket quota operations

	 */

	doBucketQuotaOperation ();

	

	/*

	 * Put/Get bucket versioning operations

	 */

	doBucketVersioningOperation ();

	

	/*

	 * Put/Get bucket acl operations

	 */

	$ownerId = doBucketAclOperation ();

	

	/*

	 * Put/Get/Delete bucket cors operations

	 */

	doBucketCorsOperation ();

	

	/*

	 * Options bucket operation

	 */

	optionsBucket ();



	/*

	 * Get bucket metadata operation

	 */

	getBucketMetadata ();

	

	/*

	 * Put/Get/Delete bucket lifecycle operations

	 */

	doBucketLifecycleOperation ();

	

	/*

	 * Put/Get/Delete bucket logging operations

	 */

	doBucketLoggingOperation ($ownerId);

	

	/*

	 * Put/Get/Delete bucket website operations

	 */

	doBucketWebsiteOperation ();

	

	/*

	 * Put/Get/Delete bucket tagging operations

	 */

	doBucketTaggingOperation ();

	

	/*

	 * Delete bucket operation

	 */

	deleteBucket ();

} catch ( ObsException $e ) {

	echo 'Response Code:' . $e->getStatusCode () . PHP_EOL;

	echo 'Error Message:' . $e->getExceptionMessage () . PHP_EOL;

	echo 'Error Code:' . $e->getExceptionCode () . PHP_EOL;

	echo 'Request ID:' . $e->getRequestId () . PHP_EOL;

	echo 'Exception Type:' . $e->getExceptionType () . PHP_EOL;

} finally{

	$obsClient->close ();

}





function createBucket() 

{

	global $obsClient;

	global $bucketName;

	

	$resp = $obsClient->createBucket ([

		'Bucket' => $bucketName,

	]);

	printf("HttpStatusCode:%s\n\n", $resp ['HttpStatusCode']);

	printf("Create bucket: %s successfully!\n\n", $bucketName);

}



function getBucketLocation() 

{

	global $obsClient;

	global $bucketName;

	

	$promise = $obsClient -> getBucketLocationAsync(['Bucket' => $bucketName], function($exception, $resp){

		printf("Getting bucket location %s\n\n", $resp ['Location']);

	});

	$promise -> wait();

}



function getBucketStorageInfo() 

{

	global $obsClient;

	global $bucketName;

	$promise = $obsClient -> getBucketStorageInfoAsync(['Bucket' => $bucketName], function($exception, $resp){

		printf("Getting bucket storageInfo Size:%d,ObjectNumber:%d\n\n", $resp ['Size'], $resp ['ObjectNumber']);

	});

	$promise -> wait();

}



function doBucketQuotaOperation()

{

	global $obsClient;

	global $bucketName;

	$obsClient->setBucketQuota ([

			'Bucket' => $bucketName,

			'StorageQuota' => 1024 * 1024 * 1024//Set bucket quota to 1GB

	]);

	

	$resp = $obsClient->getBucketQuota ([

			'Bucket' => $bucketName

	]);

	printf ("Getting bucket quota:%s\n\n", $resp ['StorageQuota'] );

}



function doBucketVersioningOperation() 

{

	global $obsClient;

	global $bucketName;

	

	$resp = $obsClient->getBucketVersioningConfiguration ( [

			'Bucket' => $bucketName

	]);

	printf ( "Getting bucket versioning config:%s\n\n", $resp ['Status']);

	//Enable bucket versioning

	$obsClient->setBucketVersioningConfiguration ([

			'Bucket' => $bucketName,

			'Status' => 'Enabled'

	]);

	$resp = $obsClient->getBucketVersioningConfiguration ( [

			'Bucket' => $bucketName

	]);

	printf ( "Current bucket versioning config:%s\n\n", $resp ['Status']);

	

	//Suspend bucket versioning

	$obsClient->setBucketVersioningConfiguration ([

			'Bucket' => $bucketName,

			'Status' => 'Suspended'

	]);

	$resp = $obsClient->getBucketVersioningConfiguration ( [

			'Bucket' => $bucketName

	]);

	printf ( "Current bucket versioning config:%s\n\n", $resp ['Status']);

}



function doBucketAclOperation() 

{

	global $obsClient;

	global $bucketName;

	printf ("Setting bucket ACL to ". ObsClient::AclPublicRead. "\n\n");

	$obsClient->setBucketAcl ([

			'Bucket' => $bucketName,

			'ACL' => ObsClient::AclPublicRead,

	]);

	

	$resp = $obsClient->getBucketAcl ([

			'Bucket' => $bucketName

	]);

	printf ("Getting bucket ACL:%s\n\n", json_encode($resp -> toArray()));

	

	printf ("Setting bucket ACL to ". ObsClient::AclPrivate. "\n\n");

	

	$obsClient->setBucketAcl ([

			'Bucket' => $bucketName,

			'ACL' => ObsClient::AclPrivate,

	]);

	$resp = $obsClient->getBucketAcl ([

			'Bucket' => $bucketName

	]);

	printf ("Getting bucket ACL:%s\n\n", json_encode($resp -> toArray()));

	return $resp ['Owner'] ['ID'];

}



function doBucketCorsOperation() 

{

	global $obsClient;

	global $bucketName;

	printf ("Setting bucket CORS\n\n");

	$obsClient->setBucketCors ( [

			'Bucket' => $bucketName,

			'CorsRule' => [

					[

							'AllowedMethod' => ['HEAD', 'GET', 'PUT'],

							'AllowedOrigin' => ['http://www.a.com', 'http://www.b.com'],

							'AllowedHeader'=> ['Authorization'],

							'ExposeHeaders' => ['x-obs-test1', 'x-obs-test2'],

							'MaxAgeSeconds' => 100

					]

			]

	] );

	printf ("Getting bucket CORS:%s\n\n", json_encode($obsClient-> getBucketCors(['Bucket' => $bucketName])-> toArray()));

	

}



function optionsBucket() 

{

	global $obsClient;

	global $bucketName;

	

	$resp = $obsClient->optionsBucket([

			'Bucket'=>$bucketName,

			'Origin'=>'http://www.a.com',

			'AccessControlRequestMethods' => ['PUT'],

			'AccessControlRequestHeaders'=> ['Authorization']

	]);

	printf ("Options bucket: %s\n\n", json_encode($resp -> toArray()));

	

}



function getBucketMetadata() 

{

	global $obsClient;

	global $bucketName;

	printf ("Getting bucket metadata\n\n");

	

	$resp = $obsClient->getBucketMetadata ( [

			"Bucket" => $bucketName,

			"Origin" => "http://www.a.com",

			"RequestHeader" => "Authorization"

	] );

	printf ( "\tHttpStatusCode:%s\n", $resp ['HttpStatusCode'] );

	printf ( "\tStorageClass:%s\n", $resp ["StorageClass"] );

	printf ( "\tAllowOrigin:%s\n", $resp ["AllowOrigin"] );

	printf ( "\tMaxAgeSeconds:%s\n", $resp ["MaxAgeSeconds"] );

	printf ( "\tExposeHeader:%s\n", $resp ["ExposeHeader"] );

	printf ( "\tAllowHeader:%s\n", $resp ["AllowHeader"] );

	printf ( "\tAllowMethod:%s\n", $resp ["AllowMethod"] );

	

	printf ("Deleting bucket CORS\n\n");

	$obsClient -> deleteBucketCors(['Bucket' => $bucketName]);

}



function doBucketLifecycleOperation() 

{

	global $obsClient;

	global $bucketName;

	

	$ruleId0 = "delete obsoleted files";

	$matchPrefix0 = "obsoleted/";

	$ruleId1 = "delete temporary files";

	$matchPrefix1 = "temporary/";

	$ruleId2 = "delete temp files";

	$matchPrefix2 = "temp/";

	

	printf ("Setting bucket lifecycle\n\n");

	

	$obsClient->setBucketLifecycleConfiguration ( [

			'Bucket' => $bucketName,

			'Rules' => [

					[

							'ID' => $ruleId0,

							'Prefix' => $matchPrefix0,

							'Status' => 'Enabled',

							'Expiration'=> ['Days'=>5]

					],

					[

							'ID' => $ruleId1,

							'Prefix' => $matchPrefix1,

							'Status' => 'Enabled',

							'Expiration' => ['Date' => '2017-12-31T00:00:00Z']

					],

					[

							'ID' => $ruleId2,

							'Prefix' => $matchPrefix2,

							'Status' => 'Enabled',

							'NoncurrentVersionExpiration' => ['NoncurrentDays' => 10]

					]

			]

	]);

	

	printf ("Getting bucket lifecycle\n\n");

	

	$resp = $obsClient->getBucketLifecycleConfiguration ([

			'Bucket' => $bucketName

	]);

	

	$i = 0;

	foreach ( $resp ['Rules'] as $rule ) {

		printf ( "\tRules[$i][Expiration][Date]:%s,Rules[$i][Expiration][Days]:%d\n", $rule ['Expiration'] ['Date'], $rule ['Expiration'] ['Days'] );

		printf ( "\yRules[$i][NoncurrentVersionExpiration][NoncurrentDays]:%s\n", $rule ['NoncurrentVersionExpiration'] ['NoncurrentDays'] );

		printf ( "\tRules[$i][ID]:%s,Rules[$i][Prefix]:%s,Rules[$i][Status]:%s\n", $rule ['ID'], $rule ['Prefix'], $rule ['Status'] );

		$i ++;

	}

	

	printf ("Deleting bucket lifecycle\n\n");

	$obsClient->deleteBucketLifecycleConfiguration (['Bucket' => $bucketName]);

}



function doBucketLoggingOperation($ownerId) 

{

	global $obsClient;

	global $bucketName;

	

	printf ("Setting bucket ACL, give the log-delivery group " . ObsClient::PermissionWrite ." and " .ObsClient::PermissionReadAcp ." permissions\n\n");

	

	$obsClient->setBucketAcl ([

			'Bucket' => $bucketName,

			'Owner' => [

					'ID' => $ownerId

			],

			'Grants' => [

					[

							'Grantee' => [

							        'URI' => ObsClient::GroupLogDelivery,

									'Type' => 'Group'

							],

					       'Permission' => ObsClient::PermissionWrite

					],

					[

							'Grantee' => [

							        'URI' => ObsClient::GroupLogDelivery,

									'Type' => 'Group'

							],

					       'Permission' => ObsClient::PermissionReadAcp

					],

			]

	]);

	

	printf ("Setting bucket logging\n\n");

	

	$targetBucket = $bucketName;

	$targetPrefix = 'log-';

	

	$obsClient->setBucketLoggingConfiguration ( [

			'Bucket' => $bucketName,

			'LoggingEnabled' => [

					'TargetBucket' => $targetBucket,

					'TargetPrefix' => $targetPrefix,

					'TargetGrants' => [

							[

									'Grantee' => [

									        'URI' => ObsClient::GroupAuthenticatedUsers,

											'Type' => 'Group'

									],

									'Permission' => ObsClient::PermissionRead

							]

					]

			]

	]);

	

	printf ("Getting bucket logging\n");

	

	$resp = $obsClient->getBucketLoggingConfiguration ([

			'Bucket' => $bucketName

	]);

	

	printf ("\tTarget bucket=%s, target prefix=%s\n", $resp ['LoggingEnabled'] ['TargetBucket'], $resp ['LoggingEnabled'] ['TargetPrefix'] );

	printf("\tTargetGrants=%s\n\n", json_encode($resp ['LoggingEnabled'] ['TargetGrants']));

	

	printf ("Deletting bucket logging\n");

	

	$obsClient->setBucketLoggingConfiguration ( [

			'Bucket' => $bucketName

	]);

}



function doBucketWebsiteOperation() 

{

	global $obsClient;

	global $bucketName;

	

	printf ("Setting bucket website\n\n");

	

	$obsClient->setBucketWebsiteConfiguration ([

			'Bucket' => $bucketName,

			'IndexDocument' => [

					'Suffix' => 'index.html'

			],

			'ErrorDocument' => [

					'Key' => 'error.html'

			]

	]);

	printf ("Getting bucket website\n");

	

	$resp = $obsClient->GetBucketWebsiteConfiguration ( [

			'Bucket' => $bucketName

	]);

	

	printf ("\tIndex document=%s, error document=%s\n\n", $resp ['IndexDocument'] ['Suffix'], $resp ['ErrorDocument'] ['Key']);

	printf ("Deletting bucket website\n");

	

	$obsClient->deleteBucketWebsiteConfiguration ([

			'Bucket' => $bucketName

	]);

}



function doBucketTaggingOperation() 

{

	global $obsClient;

	global $bucketName;

	printf ("Setting bucket tagging\n\n");

	$obsClient -> setBucketTagging([

			'Bucket' => $bucketName,

			'TagSet' => [

					[

							'Key' => 'testKey1',

							'Value' => 'testValue1'

					],

					[

							'Key' => 'testKey2',

							'Value' => 'testValue2'

					]

			]

	]);

	printf ("Getting bucket tagging\n");

	

	$resp = $obsClient -> getBucketTagging(['Bucket' => $bucketName]);

	

	printf ("\t%s\n\n", json_encode($resp->toArray()));

	

	printf ("Deletting bucket tagging\n\n");

	

	$obsClient -> deleteBucketTagging(['Bucket' => $bucketName]);

}



function deleteBucket() 

{

	

	global $obsClient;

	global $bucketName;

	

	$resp = $obsClient->deleteBucket ([

			'Bucket' => $bucketName

	] );

	printf("Deleting bucket %s successfully!\n\n", $bucketName);

	printf("HttpStatusCode:%s\n\n", $resp ['HttpStatusCode']);

}