版本控制应用于存储空间(Bucket) 内的所有文件(Object)。通过Object的版本管理,在错误覆盖或者删除Object后,您能够将Bucket中存储的Object恢复至任意时刻的历史版本。
Bucket的版本状态包括未开启版本控制(默认)、开启版本控制及暂停版本控制三种。有关版本控制的详情,请参见开发指南的版本控制概述。
一旦Bucket开启了版本控制,将无法返回至未开启状态,但允许暂停版本控制。
注意事项
本文以华东1(杭州)外网Endpoint为例。如果您希望通过与OSS同地域的其他阿里云产品访问OSS,请使用内网Endpoint。关于OSS支持的Region与Endpoint的对应关系,请参见OSS访问域名、数据中心、开放端口。
本文以OSS域名新建OSSClient为例。如果您希望通过自定义域名、STS等方式新建OSSClient,请参见新建OssClient。
要设置Bucket版本控制状态,您必须具有
oss:PutBucketVersioning
权限;要获取Bucket版本控制状态信息,您必须具有oss:GetBucketVersioning
权限。具体操作,请参见为RAM用户授权自定义的权限策略。
设置Bucket版本控制状态
以下代码用于设置Bucket版本控制状态:
<?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以杭州为例,其它Region请按实际情况填写。
$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 {
// 设置存储空间版本控制为开启版本控制(Enabled)或暂停版本控制(Suspended)。
$ossClient->putBucketVersioning($bucket, "Enabled");
} catch (OssException $e) {
printf(__FUNCTION__ . ": FAILED\n");
printf($e->getMessage() . "\n");
return;
}
print(__FUNCTION__ . ": OK" . "\n");
设置Bucket版本控制状态的详情请参见PutBucketVersioning。
获取Bucket版本控制状态信息
以下代码用于获取Bucket的版本控制状态信息:
<?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以杭州为例,其它Region请按实际情况填写。
$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 {
// 获取Bucket版本控制状态信息。
$status = $ossClient->getBucketVersioning($bucket);
print($status);
} catch (OssException $e) {
printf(__FUNCTION__ . ": FAILED\n");
printf($e->getMessage() . "\n");
return;
}
print(__FUNCTION__ . ": OK" . "\n");
获取Bucket版本控制状态的详情请参见GetBucketVersioning。
列举Bucket中所有Object的版本信息
以下代码用于列举指定Bucket中包括删除标记(Delete Marker)在内的所有Object的版本信息:
<?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以杭州为例,其它Region请按实际情况填写。
$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 {
$maxKey = 100;
$nextKeyMarker = '';
$nextVersionIdMarker = '';
while (true) {
$options = array(
'delimiter' => '',
'key-marker' => $nextKeyMarker,
'max-keys' => $maxKey,
'version-id-marker' => $nextVersionIdMarker,
);
$result = $ossClient->listObjectVersions($bucket, $options);
$nextKeyMarker = $result->getNextKeyMarker();
$nextVersionIdMarker = $result->getNextVersionIdMarker();
$objectList = $result->getObjectVersionList();
$deleteMarkerList = $result->getDeleteMarkerList();
// 打印Object版本信息。
if (!empty($objectList)) {
print("objectList:\n");
foreach ($objectList as $objectInfo) {
print($objectInfo->getKey() . ",");
print($objectInfo->getVersionId() . ",");
print($objectInfo->getLastModified() . ",");
print($objectInfo->getETag() . ",");
print($objectInfo->getSize() . ",");
print($objectInfo->getIsLatest() . "\n");
}
}
// 打印删除标记版本信息。
if (!empty($deleteMarkerList)) {
print("deleteMarkerList: \n");
foreach ($deleteMarkerList as $deleteMarkerInfo) {
print($deleteMarkerInfo->getKey() . ",");
print($deleteMarkerInfo->getVersionId() . ",");
print($deleteMarkerInfo->getLastModified() . ",");
print($deleteMarkerInfo->getIsLatest() . "\n");
}
}
if ($result->getIsTruncated() !== "true") {
break;
}
}
} catch (OssException $e) {
printf(__FUNCTION__ . ": FAILED\n");
printf($e->getMessage() . "\n");
return;
}
print(__FUNCTION__ . ": OK" . "\n");
列举Bucket中包括删除标记(Delete Marker)在内的所有Object的版本信息的详情请参见ListObjectVersions(GetBucketVersions)。