2016-10-19 11 views
0

私は現在、S3バケット内のフォルダをスキャンし、自分のデータベースに存在しないファイルを削除しようとしています。問題は、私は何百万ものファイルを持っているため、これをスキャンする方法がないことです。AWS SDK for PHPで結果を相殺する方法はありますか?

// get files 
$files = $s3->getIterator('ListObjects', array(
    "Bucket" => $S3Bucket, 
    "Prefix" => 'collections/items/', 
    "Delimiter" => '/' 
), array(
    'return_prefixes' => true, 
    'names_only' => true, 
    'limit' => 10 
)); 

ドキュメントには結果の制限についての記載がありますが、オフセットについては何も見つかりません。 0から始まり、500項目をスキャンして削除し、最後にスキャンしたインデックスを保存してからスクリプトを再実行し、保存されたインデックス(501)から開始し、500項目をスキャンするなどしたい。

SDKにはある種のオフセットオプションがありますか?それは別のものと呼ばれていますか?または、そのような大きなフォルダをスキャンする別の方法をお勧めできますか?

+0

なぜあなたはこれをしたいですか? s3-> getIerator()関数はフードの下で正確に行います。btw – at0mzk

+0

スクリプトを実行してクラッシュした場合、最初からやり直す必要がありますか? – Norbert

+0

処理した最後のキーを覚えておいてそこから開始してください。あなたのコード$ s3はs3Clientのインスタンスですか? $ s3-> getIterator( 'ListObjects'、array( 'Bucket' => 'my-bucket'、 'Marker' => 'lastkey'));最後に成功したキーをMarkerパラメータとしてフェッチしてください。 – at0mzk

答えて

0

最後に処理したキーを覚えておいて、マーカーパラメーターとして使用します。

$files = $s3->getIterator('ListObjects', array(
    "Bucket" => "mybucket", 
    "Marker" => "last/key" 
)); 

BTWは、制限を緩和しません。制限10は10個のオブジェクトごとにAPIに要求を行い、APIは要求ごとに1000個までのオブジェクトを返すことができます。

+0

私はスクリプトを構築中に限度10を使用しました。私は約20kに設定して、フォルダのスキャンが終了するまで何度も実行したいと思います。ありがとう! – Norbert

関連する問題