Supprimez un ou plusieurs objets d'un compartiment versionné à l'aide du SDK PHP OSS V1.
Prérequis
Avant de commencer, assurez-vous d'avoir :
Un compartiment OSS avec le versioning activé
L'autorisation
oss:DeleteObjectVersion. Pour plus d'informations, consultez la rubrique Attacher une stratégie personnalisée à un utilisateur RAMLes variables d'environnement
OSS_ACCESS_KEY_IDetOSS_ACCESS_KEY_SECRETconfigurées
Fonctionnement
La suppression d'un objet dans un compartiment versionné varie selon que vous spécifiez ou non un ID de version.
Suppression logique (aucun ID de version spécifié)
OSS ne supprime pas la version actuelle de l'objet. Il insère plutôt un marqueur de suppression, qui devient la nouvelle version actuelle. Toute requête GET ultérieure renvoie le code 404 Not Found, ainsi que l'en-tête x-oss-delete-marker: true et l'ID de version x-oss-version-id du nouveau marqueur de suppression.
Suppression définitive (ID de version spécifié)
OSS supprime définitivement la version spécifiée. Transmettez l'ID de version à l'aide de la constante OssClient::OSS_VERSION_ID dans le tableau d'options. Pour supprimer une version dont l'ID est la chaîne "null", transmettez OssClient::OSS_VERSION_ID => "null" : OSS traite la chaîne "null" comme un ID de version et supprime cette version.
La suppression définitive est irréversible. Une fois qu'une version spécifique d'un objet est supprimée, elle ne peut pas être récupérée.
Pour supprimer une version dont l'ID est "null", définissez l'ID de version sur la chaîne "null" dans votre requête. OSS la considère comme un ID de version littéral, et non comme une absence de valeur.
Supprimer un seul objet
Les deux exemples utilisent la méthode $ossClient->deleteObject(). Tous les exemples lisent les identifiants à partir des variables d'environnement et utilisent la signature Version 4.
Suppression définitive
Supprimez définitivement un objet en spécifiant son ID de version :
<?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;
// Load credentials from environment variables.
// Set OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET before running this code.
$provider = new EnvironmentVariableCredentialsProvider();
// Replace with your actual endpoint.
$endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
$bucket = "<your-bucket-name>";
// Full object path, not including the bucket name. Example: example/test.txt
$object = "<your-object-name>";
$versionId = "<your-object-version-id>";
$config = array(
"provider" => $provider,
"endpoint" => $endpoint,
"signatureVersion" => OssClient::OSS_SIGNATURE_VERSION_V4,
"region" => "cn-hangzhou"
);
$ossClient = new OssClient($config);
try {
// Permanently delete the specified object version.
$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");
Suppression logique
Supprimez logiquement un objet sans spécifier d'ID de version. OSS insère un marqueur de suppression et renvoie son ID de version :
<?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;
// Load credentials from environment variables.
// Set OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET before running this code.
$provider = new EnvironmentVariableCredentialsProvider();
// Replace with your actual endpoint.
$endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
$bucket = "<your-bucket-name>";
$object = "<your-object-name>";
$config = array(
"provider" => $provider,
"endpoint" => $endpoint,
"signatureVersion" => OssClient::OSS_SIGNATURE_VERSION_V4,
"region" => "cn-hangzhou"
);
$ossClient = new OssClient($config);
try {
// Soft-delete the object. OSS inserts a delete marker instead of removing the object.
$ret = $ossClient->deleteObject($bucket, $object);
print("delete marker: " . $ret['x-oss-delete-marker'] . "\n");
print("version ID: " . $ret['x-oss-version-id'] . "\n");
} catch (OssException $e) {
printf(__FUNCTION__ . ": FAILED\n");
printf($e->getMessage() . "\n");
return;
}
print(__FUNCTION__ . ": OK\n");
Pour consulter la spécification complète de l'API, reportez-vous à la rubrique DeleteObject.
Supprimer plusieurs objets
Les deux exemples utilisent la méthode $ossClient->deleteObjectVersions() avec un tableau d'instances DeleteObjectInfo. Chaque instance correspond à une version d'objet à supprimer.
Suppression définitive
Supprimez définitivement plusieurs objets en spécifiant leurs ID de version :
<?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;
// Load credentials from environment variables.
// Set OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET before running this code.
$provider = new EnvironmentVariableCredentialsProvider();
// Replace with your actual endpoint.
$endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
$bucket = "<your-bucket-name>";
$config = array(
"provider" => $provider,
"endpoint" => $endpoint,
"signatureVersion" => OssClient::OSS_SIGNATURE_VERSION_V4,
"region" => "cn-hangzhou"
);
$ossClient = new OssClient($config);
try {
// Specify objects and their version IDs to permanently delete.
$objects = array();
$objects[] = new DeleteObjectInfo("<your-object1-name>", "<object1-version-id>");
$objects[] = new DeleteObjectInfo("<your-object2-name>", "<object2-version-id>");
$deletedObjectList = $ossClient->deleteObjectVersions($bucket, $objects);
// Print the deletion result.
if (!empty($deletedObjectList)) {
print("Deleted objects:\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");
Suppression logique
Supprimez logiquement plusieurs objets sans spécifier d'ID de version. OSS insère un marqueur de suppression pour chaque objet :
<?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;
// Load credentials from environment variables.
// Set OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET before running this code.
$provider = new EnvironmentVariableCredentialsProvider();
// Replace with your actual endpoint.
$endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
$bucket = "<your-bucket-name>";
$config = array(
"provider" => $provider,
"endpoint" => $endpoint,
"signatureVersion" => OssClient::OSS_SIGNATURE_VERSION_V4,
"region" => "cn-hangzhou"
);
$ossClient = new OssClient($config);
try {
// Omit version IDs to soft-delete. OSS inserts a delete marker for each object.
$objects = array();
$objects[] = new DeleteObjectInfo("<your-object1-name>");
$objects[] = new DeleteObjectInfo("<your-object2-name>");
$deletedObjectList = $ossClient->deleteObjectVersions($bucket, $objects);
// Print the deletion result.
if (!empty($deletedObjectList)) {
print("Deleted objects:\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");
Pour consulter la spécification complète de l'API, reportez-vous à la rubrique DeleteMultipleObjects.
Notes d'utilisation
Les exemples utilisent l'endpoint public de la région Chine (Hangzhou) (
oss-cn-hangzhou.aliyuncs.com). Pour accéder à OSS depuis d'autres services Alibaba Cloud dans la même région, utilisez l'endpoint interne. Pour obtenir la liste complète des régions et des endpoints, consultez la page Regions and endpoints.Pour utiliser un domaine personnalisé ou des identifiants Security Token Service (STS), consultez la rubrique Create an OssClient.