我正在尝试为cloud文件编写备份脚本(使用Rackspace),它只复制自上次备份时间以来修改过的文件。
有没有办法查询自特定时间以来修改的列表文件? (使用PHP)
注意:使用php-opencloud库。
答案 0 :(得分: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开发人员,希望如果不能解决这个问题,我们会找到另一个选项。
答案 1 :(得分:0)
尝试使用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
}