このトピックでは、バージョン管理が有効なバケットから、単一のオブジェクト、複数のオブジェクト、または指定されたプレフィックスを持つオブジェクトを削除する方法について説明します。
注意事項
このトピックでは、中国 (杭州) リージョンのパブリックエンドポイントを使用します。 同じリージョン内の他の Alibaba Cloud サービスから OSS にアクセスするには、内部エンドポイントを使用します。 サポートされているリージョンとエンドポイントの詳細については、「リージョンとエンドポイント」をご参照ください。
このトピックでは、OSS エンドポイントを使用して OSSClient インスタンスを作成します。 カスタムドメイン名または Security Token Service (STS) を使用して OSSClient インスタンスを作成する場合は、「OssClient の作成」をご参照ください。
オブジェクトを削除するには、
oss:DeleteObject権限が必要です。 詳細については、「RAM ユーザーへのカスタム権限の付与」をご参照ください。
バージョン管理が有効なバケットの削除動作
一時的な削除 (バージョン ID を指定しない場合):
バージョン ID を指定せずに削除操作を実行すると、OSS はオブジェクトの現在のバージョンを削除しません。 代わりに、OSS はオブジェクトに削除マーカーを挿入します。 オブジェクトを取得しようとすると、OSS は現在のバージョンが削除マーカーであることを検出し、
404 Not Foundを返します。 応答には、x-oss-delete-marker: trueヘッダーと新しい削除マーカーのx-oss-version-idも含まれます。完全な削除 (バージョン ID を指定する場合):
バージョン ID を指定して削除操作を実行すると、OSS は
paramsオブジェクトのversionIdパラメーターに基づいて指定されたバージョンを完全に削除します。 ID が "null" のバージョンを削除するには、paramsオブジェクトにparams['versionId'] = "null"の設定を追加します。 OSS は文字列 "null" をバージョン ID として扱い、ID が "null" のオブジェクトバージョンを削除します。
単一オブジェクトの削除
次の例では、単一のオブジェクトを完全にまたは一時的に削除する方法を示します。
完全な削除
次のコードは、バージョン ID を指定してオブジェクトを完全に削除する方法を示しています。
<?php if (is_file(__DIR__ . '/../autoload.php')) { require_once __DIR__ . '/../autoload.php'; } if (is_file(__DIR__ . '/../vendor/autoload.php')) { require_once __DIR__ . '/../vendor/autoload.php'; } use OSS\Credentials\EnvironmentVariableCredentialsProvider; use OSS\OssClient; use OSS\CoreOssException; // 環境変数からアクセス認証情報を取得します。 サンプルコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。 $provider = new EnvironmentVariableCredentialsProvider(); // この例では、中国 (杭州) リージョンのエンドポイントを使用します。 実際の エンドポイントに置き換えてください。 $endpoint = "https://oss-cn-hangzhou.aliyuncs.com"; $bucket= "<yourBucketName>"; // オブジェクトの完全なパスを指定します。 完全なパスにバケット名を含めないでください。 例:example/test.txt $object = "<yourObjectName>"; $versionId = "<yourObjectVersionId>"; $config = array( "provider" => $provider, "endpoint" => $endpoint, "signatureVersion" => OssClient::OSS_SIGNATURE_VERSION_V4, "region"=> "cn-hangzhou" ); $ossClient = new OssClient($config); try{ // 指定されたバージョン ID のオブジェクトを削除します。 $ossClient->deleteObject($bucket, $object, array(OssClient::OSS_VERSION_ID => $versionId)); } catch(OssException $e) { printf(__FUNCTION__ . ": FAILED\n"); printf($e->getMessage() . "\n"); return; } print(__FUNCTION__ . ": OK" . "\n");一時的な削除
次のコードは、バージョン ID を指定せずにオブジェクトを一時的に削除する方法を示しています。
<?php if (is_file(__DIR__ . '/../autoload.php')) { require_once __DIR__ . '/../autoload.php'; } if (is_file(__DIR__ . '/../vendor/autoload.php')) { require_once __DIR__ . '/../vendor/autoload.php'; } use OSS\Credentials\EnvironmentVariableCredentialsProvider; use OSS\OssClient; use OSS\CoreOssException; // 環境変数からアクセス認証情報を取得します。 サンプルコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。 $provider = new EnvironmentVariableCredentialsProvider(); // この例では、中国 (杭州) リージョンのエンドポイントを使用します。 実際の エンドポイントに置き換えてください。 $endpoint = "https://oss-cn-hangzhou.aliyuncs.com"; $bucket= "<yourBucketName>"; $object = "<yourObjectName>"; $config = array( "provider" => $provider, "endpoint" => $endpoint, "signatureVersion" => OssClient::OSS_SIGNATURE_VERSION_V4, "region"=> "cn-hangzhou" ); $ossClient = new OssClient($config); try{ // バージョン ID を指定せずにオブジェクトを一時的に削除します。 この操作により、オブジェクトに削除マーカーが追加されます。 $ret = $ossClient->deleteObject($bucket, $object); print("delete marker:" .$ret['x-oss-delete-marker'] ."\n"); print("version id:" .$ret['x-oss-version-id']); } catch(OssException $e) { printf(__FUNCTION__ . ": FAILED\n"); printf($e->getMessage() . "\n"); return; } print(__FUNCTION__ . ": OK" . "\n");
詳細については、「DeleteObject」をご参照ください。
複数オブジェクトの削除
次の例では、複数のオブジェクトを完全にまたは一時的に削除する方法を示します。
完全な削除
次のコードは、バージョン ID を指定して複数のオブジェクトを完全に削除する方法を示しています。
<?php if (is_file(__DIR__ . '/../autoload.php')) { require_once __DIR__ . '/../autoload.php'; } if (is_file(__DIR__ . '/../vendor/autoload.php')) { require_once __DIR__ . '/../vendor/autoload.php'; } use OSS\Credentials\EnvironmentVariableCredentialsProvider; use OSS\OssClient; use OSS\CoreOssException; use OSS\Model\DeleteObjectInfo; // 環境変数からアクセス認証情報を取得します。 サンプルコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。 $provider = new EnvironmentVariableCredentialsProvider(); // この例では、中国 (杭州) リージョンのエンドポイントを使用します。 実際の エンドポイントに置き換えてください。 $endpoint = "https://oss-cn-hangzhou.aliyuncs.com"; $bucket= "<yourBucketName>"; $config = array( "provider" => $provider, "endpoint" => $endpoint, "signatureVersion" => OssClient::OSS_SIGNATURE_VERSION_V4, "region"=> "cn-hangzhou" ); $ossClient = new OssClient($config); try{ // 指定されたバージョン ID を持つ複数のオブジェクトを削除します。 $objects = array(); $objects[] = new DeleteObjectInfo("<yourObject1Name>", "<object1VersionId>"); $objects[] = new DeleteObjectInfo("<yourObject2Name>", "<object2VersionId>"); $deletedObjectList = $ossClient->deleteObjectVersions($bucket, $objects); // 削除結果を表示します。 if (!empty($deletedObjectList)) { print("deletedObjectList:\n"); foreach ($deletedObjectList as $deletedObjectInfo) { print($deletedObjectInfo->getKey() . ","); print($deletedObjectInfo->getVersionId() . ","); print($deletedObjectInfo->getDeleteMarker() . ","); print($deletedObjectInfo->getDeleteMarkerVersionId() . "\n"); } } } catch(OssException $e) { printf(__FUNCTION__ . ": FAILED\n"); printf($e->getMessage() . "\n"); return; } print(__FUNCTION__ . ": OK" . "\n");一時的な削除
次のコードは、バージョン ID を指定せずに複数のオブジェクトを削除する方法を示しています。
<?php if (is_file(__DIR__ . '/../autoload.php')) { require_once __DIR__ . '/../autoload.php'; } if (is_file(__DIR__ . '/../vendor/autoload.php')) { require_once __DIR__ . '/../vendor/autoload.php'; } use OSS\Credentials\EnvironmentVariableCredentialsProvider; use OSS\OssClient; use OSS\CoreOssException; use OSS\Model\DeleteObjectInfo; // 環境変数からアクセス認証情報を取得します。 サンプルコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。 $provider = new EnvironmentVariableCredentialsProvider(); // この例では、中国 (杭州) リージョンのエンドポイントを使用します。 実際の エンドポイントに置き換えてください。 $endpoint = "https://oss-cn-hangzhou.aliyuncs.com"; $bucket= "<yourBucketName>"; $config = array( "provider" => $provider, "endpoint" => $endpoint, "signatureVersion" => OssClient::OSS_SIGNATURE_VERSION_V4, "region"=> "cn-hangzhou" ); $ossClient = new OssClient($config); try{ // バージョン ID を指定せずに複数のオブジェクトを一時的に削除します。 この操作により、各オブジェクトに削除マーカーが追加されます。 $objects = array(); $objects[] = new DeleteObjectInfo("<yourObject1Name>"); $objects[] = new DeleteObjectInfo("<yourObject2Name>"); $deletedObjectList = $ossClient->deleteObjectVersions($bucket, $objects); // 削除結果を表示します。 if (!empty($deletedObjectList)) { print("deletedObjectList:\n"); foreach ($deletedObjectList as $deletedObjectInfo) { print($deletedObjectInfo->getKey() . ","); print($deletedObjectInfo->getVersionId() . ","); print($deletedObjectInfo->getDeleteMarker() . ","); print($deletedObjectInfo->getDeleteMarkerVersionId() . "\n"); } } } catch(OssException $e) { printf(__FUNCTION__ . ": FAILED\n"); printf($e->getMessage() . "\n"); return; } print(__FUNCTION__ . ": OK" . "\n");
詳細については、「DeleteMultipleObjects」をご参照ください。