2017-02-24 9 views
5

私の現在のプロジェクトでは、新しいファイルのために私のS3バケツの内容を4秒ごとにチェックする必要があります。aws-php-sdkの "sort_by"をListObjects

このスクリプトは、サービスが使用されるたびに約3時間実行され、最後に2700個のファイルが1つの接頭辞に付きます。

この

は、それらのファイルを一覧表示する私の関数である。

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 

何が必要かは、LastModifiedのフィールドで、ファイル、順序を取得しているので、私は2kのファイルの上にフェッチする必要はありません。 PHPのAPIに追加する

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

のような追加のパラメータはありますか?

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

としては、

を使用することが可能であるシェルで、アビシェークミーナの答えを指摘しました
aws s3api list-objects --bucket "bucket-name" --prefix "some-prefix" --query "Contents[?LastModified>=\`2017-03-08\`]" 

私が探しているのは、これをPHPで実装する方法です。

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

答えて

1

彼らはLastModifiedのベース上のオブジェクトをソートするために、いくつかのものを持っていますが、LastModified列上のオブジェクトを照会してフィルタリングすることができるかどうかはわかりません。 これは、特定の時間の後に変更されたすべてのファイルをフィルタリングするために使用できるものです。aws s3api list-objects --bucket "bucket-name" --prefix "some-prefix" --query "Contents[?LastModified>=\`2017-03-08\`]"

これは、それらがPHPのために似ているかもしれないシェル用です。

+0

ええ、私はコマンド['Query'] = 'sort_by(Contents、&LastModified)'のようなものをシェルのドキュメントから試しました。似たようなものが私が探しているものです。しかし、ありがとう。 –

+0

これはすべて同じAPI定義に変換されるためです。これを試して、[command ['Query'] = "Contents [?LastModified> = $ date"; '$ dateにはあなたのdatetimeが[aws-sdk-php](http:// docs .aws.amazon.com/aws-sdk-php/v3/api/api-s3-2006-03-01.html#listobjects)結果セクション。 ** 'LastModified' => ** –

関連する問題