2013-09-10 4 views
2

Я пытаюсь написать сценарий резервного копирования для cloudfiles (используя Rackspace), который будет копировать только файлы, которые были изменены с момента последнего резервного копирования.фильтрация файлов в контейнере rackspace cdn

Есть ли способ запросить файлы списка, которые изменяются с определенного времени? (Использование PHP)

Примечание: используя php-opencloud библиотеки.

+0

Сколько файлов мы говорим в резервной копии? Несколько больших файлов или значительное количество небольших файлов? –

ответ

1

В настоящее время я не нашел способ запроса/фильтр, основанный на дату последнего изменения.

Что вы можете сделать, это посмотреть метаданные для каждого объекта в контейнере. На низком уровне для этого требуется просто операция 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"] 

К сожалению, не поможет полностью. Я пингует одного из PHP-разработчиков напрямую, и, надеюсь, мы найдем еще один вариант, если это не сработает.

+1

Кайл прав, потому что я не вижу метода фильтрации. Итерация через объекты, возвращаемые из метода ObjectList() контейнера, позволит вам проверить значение last_modified. Я просто загрузил файл, и это было мое значение: 2013-09-10T22: 14: 43.840350 –

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 
} 
+0

Я полагаю, что этот блок кода проверяет каталог внутри веб-сервера. Я пытаюсь взять резервную копию с CDN – WorM

 Смежные вопросы

  • Нет связанных вопросов^_^