开发者社区> 问答> 正文

PHP-SDK之如何实现生命周期管理?

OSS提供文件生命周期管理来为用户管理对象。用户可以为某个存储空间定义生命周期配置,来为该存储空间的文件定义各种规则。目前,用户可以通过规则来删除相匹配的文件。每条规则都由如下几个部分组成:

  • 文件名称前缀,只有匹配该前缀的文件才适用这个规则
  • 操作,用户希望对匹配的文件所执行的操作。
  • 日期或天数,用户期望在特定日期或者是在文件最后修改时间后多少天执行指定的操作。这里不推荐用户直接使用日期作为文件生命周期管理的方式,使用这种方式,在指定日期之后符合前缀的文件会过期,而不论文件的最后修改时间。

更多关于生命周期的内容请参考 文件生命周期

提示:
  • 以下场景的完整代码参见:GitHub


Lifecycle规则说明


lifecycle的配置规则由一段xml表示。 <?xml version="1.0" encoding="utf-8"?>
<LifecycleConfiguration>
    <Rule>
        <ID>delete obsoleted files</ID>
        <Prefix>obsoleted/</Prefix>
        <Status>Enabled</Status>
        <Expiration><Days>3</Days></Expiration>
    </Rule>
    <Rule>
        <ID>delete temporary files</ID>
        <Prefix>temporary/</Prefix>
        <Status>Enabled</Status>
        <Expiration><Date>2022-10-12T00:00:00.000Z</Date></Expiration>
    </Rule>
</LifecycleConfiguration>


一个Lifecycle的Config里面可以包含多个Rule(最多1000个)。
各字段解释:
  • ID字段是用来唯一表示本条规则。
  • Prefix指定对存储空间下的符合特定前缀的文件使用规则,不能重叠。
  • Status指定本条规则的状态,只有Enabled和Disabled,分别表示启用规则和禁用规则。
  • Expiration节点里面的Days表示大于文件最后修改时间指定的天数就删除文件,Date则表示到指定的绝对时间之后就删除文件(绝对时间服从ISO8601的格式)。


设置Lifecycle规则


您可以通过OssClient::putBucketLifecycle设置存储空间的lifecycle规则: <?php
/**
* 设置bucket的生命周期配置
*
* @param OssClient $ossClient OssClient实例
* @param string $bucket 存储空间名称
* @return null
*/
function putBucketLifecycle($ossClient, $bucket)
{
    $lifecycleConfig = new LifecycleConfig();
    $actions = array();
    $actions[] = new LifecycleAction(OssClient::OSS_LIFECYCLE_EXPIRATION, OssClient::OSS_LIFECYCLE_TIMING_DAYS, 3);
    $lifecycleRule = new LifecycleRule("delete obsoleted files", "obsoleted/", "Enabled", $actions);
    $lifecycleConfig->addRule($lifecycleRule);
    $actions = array();
    $actions[] = new LifecycleAction(OssClient::OSS_LIFECYCLE_EXPIRATION, OssClient::OSS_LIFECYCLE_TIMING_DATE, '2022-10-12T00:00:00.000Z');
    $lifecycleRule = new LifecycleRule("delete temporary files", "temporary/", "Enabled", $actions);
    $lifecycleConfig->addRule($lifecycleRule);
    try {
        $ossClient->putBucketLifecycle($bucket, $lifecycleConfig);
    } catch (OssException $e) {
        printf(__FUNCTION__ . ": FAILED\n");
        printf($e->getMessage() . "\n");
        return;
    }
    print(__FUNCTION__ . ": OK" . "\n");
}



获取Lifecycle规则


您可以通过OssClient::getBucketLifecycle获取存储空间的lifecycle规则。 <?php
/**
* 获取bucket的生命周期配置
*
* @param OssClient $ossClient OSSClient实例
* @param string    $bucket bucket名字
* @return null
*/
function getBucketLifecycle($ossClient, $bucket)
{
    $lifecycleConfig = null;
    try{
        $lifecycleConfig = $ossClient->getBucketLifecycle($bucket);
    } catch(OssException $e) {
        printf(__FUNCTION__ . ": FAILED\n");
        printf($e->getMessage() . "\n");
        return;
    }
    print(__FUNCTION__ . ": OK" . "\n");
    print($lifecycleConfig->serializeToXml() . "\n");
}



删除Lifecycle规则


您可以通过OssClient::deleteBucketLifecycle清空存储空间中lifecycle规则。 <?php
/**
* 删除bucket的生命周期配置
*
* @param OssClient $ossClient OSSClient实例
* @param string    $bucket bucket名字
* @return null
*/
function deleteBucketLifecycle($ossClient, $bucket)
{
    try{
        $ossClient->deleteBucketLifecycle($bucket);
    } catch(OssException $e) {
        printf(__FUNCTION__ . ": FAILED\n");
        printf($e->getMessage() . "\n");
        return;
    }
    print(__FUNCTION__ . ": OK" . "\n");
}


展开
收起
青衫无名 2017-10-19 10:06:42 1942 0
0 条回答
写回答
取消 提交回答
问答排行榜
最热
最新

相关电子书

更多
阿里云栖开发者沙龙PHP技术专场-深入浅出网络编程与swoole内核-吴镇宇 立即下载
一个跨平台的云服务SDK需要什么 立即下载
PHP 2017.北京 全球开发者大会——高可用的PHP 立即下载