2017-02-24 9 views
5

मेरी वर्तमान प्रोजेक्ट में मुझे नई फ़ाइलों के लिए हर 4 सेकंड में मेरी एस 3 बाल्टी सामग्री जांचनी होगी।aws-php-sdk ListObjects पर एक "sort_by" डालें

यह स्क्रिप्ट हर बार लगभग 3 घंटे तक चलती है जब सेवा का उपयोग किया जाता है, और अंत में एक ही उपसर्ग में लगभग 2700 फाइलें होंगी।

यह उन फ़ाइलों को सूचीबद्ध करने के लिए मेरी समारोह है:

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 एपीआई में जोड़ने के लिए

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

की तरह एक अतिरिक्त पैरामीटर है?

---------- संपादित ------------

के रूप में अभिषेक मीणा जवाब के लिए इशारा किया, खोल में यह

उपयोग करना संभव है
aws s3api list-objects --bucket "bucket-name" --prefix "some-prefix" --query "Contents[?LastModified>=\`2017-03-08\`]" 

मैं जो देख रहा हूं वह PHP में इसे कार्यान्वित करने का तरीका है।

पीएचपी एपीआई: 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

हाँ, शेल प्रलेखन से मैंने आदेश ['क्वेरी'] = 'sort_by (सामग्री, और अंतिम संशोधित) जैसी कुछ कोशिश की। ऐसा कुछ है जिसे मैं ढूंढ रहा हूं। हालांकि धन्यवाद। –

+0

चूंकि यह सब एक ही एपीआई परिभाषा में परिवर्तित हो रहा है। आप इसे आज़मा सकते हैं और 'कमांड [' क्वेरी '] = "सामग्री [? LastModified> = $ date" की जांच कर सकते हैं;' जहां $ तारीख में आपके डेटाटाइम को [aws-sdk-php] में उल्लिखित किया जाएगा (http: // docs .aws.amazon.com/aws-sdk-php/v3/api/api-s3-2006-03-01.html # listobjects) परिणाम खंड। ** 'LastModified' => ** –

संबंधित मुद्दे