このトピックでは、単一のオブジェクト、指定した複数のオブジェクト、特定の名前のプレフィックスを持つオブジェクト、またはディレクトリとその中のすべてのオブジェクトを削除する方法について説明します。
削除操作は慎重に行ってください。 削除されたオブジェクトは回復できません。
注意事項
このトピックでは、中国 (杭州) リージョンのパブリックエンドポイントを使用します。 同じリージョン内の他の Alibaba Cloud サービスから Object Storage Service (OSS) にアクセスするには、内部エンドポイントを使用します。 サポートされているリージョンとエンドポイントの詳細については、「リージョンとエンドポイント」をご参照ください。
このトピックでは、OSS エンドポイントを使用して OSSClient インスタンスを作成します。 カスタムドメイン名または Security Token Service (STS) を使用して OSSClient インスタンスを作成する場合は、「OssClient の作成」をご参照ください。
オブジェクトを削除するには、
oss:DeleteObject権限が必要です。 詳細については、「RAM ユーザーへのカスタムポリシーのアタッチ」をご参照ください。
単一オブジェクトの削除
次のコードは、examplebucket バケットから exampleobject.txt オブジェクトを削除する方法を示しています。
<?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 に設定します。
$endpoint = "yourEndpoint";
// バケット名を指定します。 例: examplebucket。
$bucket = "examplebucket";
// オブジェクトの完全なパスを指定します。 例: exampledir/exampleobject.txt。 完全なパスにバケット名を含めることはできません。
$object = "exampledir/exampleobject.txt";
try{
$config = array(
"provider" => $provider,
"endpoint" => $endpoint,
"signatureVersion" => OssClient::OSS_SIGNATURE_VERSION_V4,
"region"=> "cn-hangzhou"
);
$ossClient = new OssClient($config);
$ossClient->deleteObject($bucket, $object);
} catch(OssException $e) {
printf(__FUNCTION__ . ": FAILED\n");
printf($e->getMessage() . "\n");
return;
}
print(__FUNCTION__ . "OK" . "\n"); 複数オブジェクトの削除
一度に最大 1,000 個のオブジェクトを手動で削除できます。 指定した複数のオブジェクト、指定したプレフィックスを持つオブジェクト、またはディレクトリとその中のすべてのオブジェクトを削除できます。
OSS は、ライフサイクルルールを設定することによるオブジェクトの自動削除もサポートしています。 詳細については、「最終更新時刻に基づくライフサイクルルール」をご参照ください。
指定した名前を持つ複数オブジェクトの削除
次のコードは、指定した名前を持つ複数のオブジェクトを削除する方法を示しています。
<?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\OssClient;
use OSS\Core\OssException;
// 環境変数からアクセス認証情報を取得します。 サンプルコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。
$accessKeyId = getenv("OSS_ACCESS_KEY_ID");
$accessKeySecret = getenv("OSS_ACCESS_KEY_SECRET");
// バケットが配置されているリージョンのエンドポイントに endpoint を設定します。 たとえば、バケットが中国 (杭州) リージョンにある場合、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します。
$endpoint = "yourEndpoint";
// バケット名を指定します。 例: examplebucket。
$bucket = "examplebucket";
try {
$ossClient = new OssClient($accessKeyId, $accessKeySecret, $endpoint, false);
// 削除するオブジェクトの完全なパスを指定します。 完全なパスにバケット名を含めることはできません。
$objects = array();
$objects[] = "exampleobjecta.txt";
$objects[] = "exampledir/sampleobject.txt";
$result = $ossClient->deleteObjects($bucket, $objects);
foreach ($result as $info){
$obj = strval($info);
printf("Delete ".$obj." : Success" . "\n");
}
printf("Delete Objects : OK" . "\n");
} catch (OssException $e) {
printf("Delete Objects : Failed" . "\n");
printf($e->getMessage() . "\n");
return;
} 指定したプレフィックスを持つ複数オブジェクトまたはディレクトリ内のオブジェクトの削除
次のコードは、指定したプレフィックスを持つ複数のオブジェクト、またはディレクトリとその中のすべてのオブジェクトを削除する方法を示しています。
次のコードの OSS_PREFIX の値が空の文字列または NULL の場合、バケット内のすべてのオブジェクトが削除されます。 この機能は慎重に使用してください。
<?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\OssClient;
use OSS\Core\OssException;
// 環境変数からアクセス認証情報を取得します。 サンプルコードを実行する前に、OSS_ACCESS_KEY_ID および OSS_ACCESS_KEY_SECRET 環境変数が設定されていることを確認してください。
$accessKeyId = getenv("OSS_ACCESS_KEY_ID");
$accessKeySecret = getenv("OSS_ACCESS_KEY_SECRET");
// バケットが配置されているリージョンのエンドポイントに endpoint を設定します。 たとえば、バケットが中国 (杭州) リージョンにある場合、エンドポイントを https://oss-cn-hangzhou.aliyuncs.com に設定します。
$endpoint = "yourEndpoint";
// バケット名を指定します。 例: examplebucket。
$bucket = "examplebucket";
try {
$ossClient = new OssClient($accessKeyId, $accessKeySecret, $endpoint, false);
$option = array(
OssClient::OSS_MARKER => null,
// 名前がプレフィックス "src" で始まるすべてのオブジェクトを削除するには、プレフィックスを "src" に設定します。 この操作により、このプレフィックスを持つすべての非フォルダオブジェクト、"src" フォルダ、および "src" フォルダ内のすべてのオブジェクトが削除されます。
OssClient::OSS_PREFIX => "src",
// "src" フォルダとその中のすべてのオブジェクトのみを削除するには、プレフィックスを "src/" に設定します。
// OssClient::OSS_PREFIX => "src/",
);
$bool = true;
while ($bool){
// 複数のオブジェクトをリストして削除します。
$result = $ossClient->listObjects($bucket,$option);
$objects = array();
if(count($result->getObjectList()) > 0){
foreach ($result->getObjectList() as $key => $info){
printf("key name:".$info->getKey().PHP_EOL);
$objects[] = $info->getKey();
}
$delObjects = $ossClient->deleteObjects($bucket, $objects);
foreach ($delObjects as $info){
$obj = strval($info);
printf("Delete ".$obj." : Success" . PHP_EOL);
}
}
if($result->getIsTruncated() === 'true'){
$option[OssClient::OSS_MARKER] = $result->getNextMarker();
}else{
$bool = false;
}
}
printf("Delete Objects : OK" . PHP_EOL);
} catch (OssException $e) {
printf("Delete Objects : Failed" . PHP_EOL);
printf($e->getMessage() . PHP_EOL);
return;
}try{}catch{} ブロックで例外がスローされてキャッチされた場合、オブジェクトは削除されません。 この場合、$e->getMessage を使用してエラーメッセージを取得し、原因を分析できます。
関連ドキュメント
単一のオブジェクトまたは複数のオブジェクトを削除するための完全なサンプルコードについては、GitHub の例をご参照ください。
単一のオブジェクトを削除する API 操作の詳細については、「DeleteObject」をご参照ください。
複数のオブジェクトを削除する API 操作の詳細については、「DeleteMultipleObjects」をご参照ください。