2017-02-24 11 views
5

W moim bieżącym projekcie muszę sprawdzić zawartość mojego zasobnika S3 co 4 sekundy w poszukiwaniu nowych plików.Umieszczanie "sort_by" na aws-php-sdk ListObjects

Ten skrypt będzie działać przez około 3 godziny za każdym razem, gdy usługa jest używana, i będzie mieć około 2700 plików na końcu z jednym prefiksem.

To jest moja funkcja notować te pliki:

public function listFiles($s3Prefix, $limit, $get_after = ''){ 
    $command = $this->s3Client->getCommand('ListObjects'); 
    $command['Bucket'] = $this->s3_bucket; 
    $command['Prefix'] = $s3Prefix; 
    $command['MaxKeys'] = $limit; 
    $command['Marker'] = $s3Prefix.'/'.$get_after; 

    //command['Query'] = 'sort_by(Contents,&LastModified)'; 

    $ret_s3 = $this->s3Client->execute($command); 

    $ret['truncated'] = $ret_s3['IsTruncated']; 
    $ret['files'] = $ret_s3['Contents']; 

    return $ret; 
}// listFiles 

Co ja potrzebuję to uzyskać pliki zamówienia przez pola LastModified, więc nie trzeba pobierać ponad plików 2K. Czy istnieje dodatkowy parametr jak

command['Query'] = 'sort_by(Contents,&LastModified)'; 

dodać w API PHP?

---------- EDITED ------------

Jak wskazano na Abhishek Meena odpowiedź, w powłoce możliwe jest użycie

aws s3api list-objects --bucket "bucket-name" --prefix "some-prefix" --query "Contents[?LastModified>=\`2017-03-08\`]" 

To, czego szukam, to jak zaimplementować to w PHP.

PHP API: https://github.com/aws/aws-sdk-php

Odpowiedz

1

nie wiem, czy mają jakąś rzecz do sortowania przedmiotów na podstawach LastModified ale można wyszukać obiekty i filtry na kolumnie LastModified. Tego można użyć do filtrowania wszystkich plików zmodyfikowanych po pewnym czasie. aws s3api list-objects --bucket "bucket-name" --prefix "some-prefix" --query "Contents[?LastModified>=\`2017-03-08\`]"

To jest dla powłoki, mogą one mieć coś podobnego do php.

+0

Tak, z dokumentacji powłoki, w której próbowałem coś podobnego do polecenia ['Zapytanie'] = 'sort_by (Spis treści i LastModified)'. Coś podobnego jest tym, czego szukam. W każdym razie dzięki. –

+0

Ponieważ wszystko to jest konwertowane do tej samej definicji interfejsu API. Możesz to wypróbować i sprawdzić 'command ['Query'] =" Contents [? LastModified> = $ date ";' gdzie $ date będzie zawierać datetime, jak wspomniano w [aws-sdk-php] (http: // docs .aws.amazon.com/aws-sdk-php/v3/api/api-s3-2006-03-01.html # listobjects) sekcja wyników. ** "LastModified" => ** –