【问题标题】:How do i delete files older than x time on AWS S3 using PHP如何使用 PHP 在 AWS S3 上删除早于 x 时间的文件
【发布时间】:2018-09-09 09:55:42
【问题描述】:

我见过How to delete or purge old files on S3?,但是,这不适合我,因为我有一个允许上传到我的存储桶的公共(未经身份验证的身份池)。由于这是公开的,我不相信上传者会设置过期时间,

我见过https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-s3-2006-03-01.html#listobjects,但这似乎并不表明对象上有创建、添加、上传或更新的时间。所以我不确定如何通过对象检查它们是否超过 x 时间进行集成然后删除它们。未经身份验证的用户只能上传他们看不到/编辑或删除的对象,但我不能相信来自他们的任何形式的信息,所以 S3 是否有一个我可以在 PHP 中访问的某种形式的附加时间,如果是这样,如何?

【问题讨论】:

  • ServerFault 在 PHP 和 bash 中有一个解决方案。
  • 如果它不进入 API 服务器的生产公共端点,那就太好了,恐怕我无法将 shell 命令放在公共端点上 :) 我希望对于纯粹的 PHP 实现
  • 旁注:您可以使用Object Lifecycle Management 在创建后N天自动删除对象。

标签: php amazon-s3 aws-sdk


【解决方案1】:

我发现有一个 LastUpdated 时间,它被称为 LastModified 我发现了这个

$iterator = $this->client->getIterator('ListObjects', array(
    'Bucket' => $bucketName
));
foreach($iterator as $object){
    var_dump($object); die();
}

这意味着我可以执行以下代码来评估从上传到现在的时间,对于本示例,我将 x 设置为 24 小时前。

$iterator = $this->client->getIterator('ListObjects', array(
    'Bucket' => $bucketName
));
$xtime = strtotime("now -24 hours");
foreach($iterator as $object){
    $uploaded = strtotime($object["LastModified"]->date);
    if($uploaded < $xtime){
        $this->client->deleteObject(array(
            "Bucket"        => $bucketName,
            "Key"           => $object["Key"]
        ));
    }
}

【讨论】:

  • 这确实对每个文件执行一个 http 请求,对吧?这不是批量删除吗?
  • 是的,这就是 $this-&gt;client-&gt;deleteObject 调用在循环中所做的,所以对于每个项目
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-03-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-02-07
  • 1970-01-01
  • 2016-12-03
相关资源
最近更新 更多