【问题标题】:filtering files in container rackspace cdn过滤容器 rackspace cdn 中的文件
【发布时间】:2013-09-10 13:06:11
【问题描述】:

我正在尝试为云文件编写一个备份脚本(使用 Rackspace),它只会复制自上次备份以来修改过的文件。

有没有办法查询自特定时间以来修改的文件列表? (使用 PHP)

注意:使用php-opencloud 库。

【问题讨论】:

  • 我们在备份中有多少个文件?几个大文件或大量小文件?

标签: php api openstack rackspace-cloud


【解决方案1】:

目前,我还没有找到根据上次修改日期查询/过滤的方法。

您可以做的是查看容器中每个对象的元数据。在低级别上,这只需要对每个对象进行 HEAD 操作。虽然这可能需要您检查每个对象,但您只是抓取标题而不是下载每个对象。

对对象进行 HEAD 操作时的last modified date is in the HTTP headers

HEAD /<api version>/<account>/<container>/<object> HTTP/1.1
Host: storage.clouddrive.com
X-Auth-Token: eaaafd18-0fed-4b3a-81b4-663c99ec1cbb

没有返回响应正文,但 HTTP 标头具有丰富的细节:

HTTP/1.1 200 OK
Date: Thu, 07 Jun 2007 20:59:39 GMT
Last-Modified: Fri, 12 Jun 2007 13:40:18 GMT
ETag: 8a964ee2a5e88be344f36c22562a6486
Content-Length: 512000
Content-Type: text/plain; charset=UTF-8
X-Object-Meta-Meat: Bacon

PHP 库中有一个名为fetch 的方法可以获取对象的just the headers,但它是私有的,我看不到它被使用anywhere。这看起来像是在 GitHub 上提出问题或创建自己的 PR 的类型。

现在您可以获取每个对象并自己拉出标题:

$obj = $container->DataObject();
$headers = $obj->metadataHeaders();
$headers["Last-Modified"]

抱歉,这并没有完全帮助。我直接 ping 了一个 PHP 开发人员,希望如果这不起作用,我们会找到另一种选择。

【讨论】:

  • Kyle 是对的,因为我没有看到过滤方法。遍历从容器的 ObjectList() 方法返回的对象将让您检查 last_modified 的值。我刚刚上传了一个文件,这是我的值:2013-09-10T22:14:43.840350
【解决方案2】:

尝试使用glob()filemtime()

例子:

$lastBackupTime = 1234567890; //You'll have to figure out how to store and retrieve this
$modified = array();

// Change the input of glob() to use the directory and file extension you're looking for
foreach (glob('/some/directory/*.txt') as $file) {
    if (filemtime($file) > $lastBackupTime) {
        $modified[] = $file;
    }
}

foreach ($modified as $file) {
    //do something
}

【讨论】:

  • 我想这个代码块会检查 Web 服务器内的目录。我正在尝试从 CDN 恢复
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多