2016-09-11 6 views
2

Sollte einfacher Code sein. Ich habe AWS SDK PHP v3 und ich erstellte Code wie folgt:AWS PHP getIterator funktioniert nicht - gibt leere Ergebnisse zurück

require 'aws/aws-autoloader.php'; 

use Aws\S3\S3Client; 

$s3Client = new S3Client([ 
    'version' => 'latest', 
    'region' => 'eu-west-1', 
    'credentials' => [ 
     'key' => "accesskey", 
     'secret' => "secretkey", 
    ], 
]); 

print_r($result = $s3Client->listBuckets()) 

Jetzt habe ich meine Eimer Liste zu sehen, aber als ich versuchte, ObjectListgetIterator wie diese:

$objects = $s3Client->getIterator('ListObjects', array(
    'Bucket' => "bucket") 
); 

var_dump($objects); 

Ich sehe: Objekt (Generator) # 95 (0) {}

Ich habe Probleme mit diesem zweiten Tag und kann keine Lösung finden? Wer weiß, was ich falsch mache?

+0

ok i fixedd es \t \t print_r ($ result = $ s3Client-> Listobjects ([ 'Bucket' => 'mein Eimer'])) ; Ich habe 2 Apis gemischt, ich bin so lahm – Wraith

Antwort

1

Ich lief in einem ähnlichen Problem, bei dem, wie die zurückgegebenen Inhalte schien ist leer waren, wenn print_r auf den Ergebnissen der getIterator mit:

print_r($result); 

Generator Object 
(
) 

Und mit var_dump:

var_dump($result); 

object(Generator)#62 (0) { 
} 

Ich wusste, Es gab Ergebnisse für den Eimer, also war ich verwirrt, warum es immer 0 Ergebnisse zeigte. Dies muss buchstäblich unter Verwendung foreach iteriert werden, und dann werden die Ergebnisse zeigten:

foreach ($result as $object) { 
echo $object['Key']."\n"; 
} 

Es sind die Ergebnisse!

Sie können auch listObjectsV2 anstelle von listObjects für die modernere Implementierung verwenden, und Sie können den PHP-Befehl iterator_to_array verwenden, um die Ergebnisse in ein Array zu konvertieren.

Hier ist ein funktioneller Teil meiner S3 Klasse:

<?php 
require_once('aws.phar'); 

class S3 { 

private $region = 'us-east-1'; 
private $s3; 

public function create() { 
    try { 
    $this->s3 = Aws\S3\S3Client::factory(array(
    'credentials' => array(
    'key' => AWS_ACCESS_KEY_ID, 
    'secret' => AWS_SECRET_ACCESS_KEY), 
    'region' => $this->region, 
    'version' => 'latest' 
    )); 

    return ($this->s3 ? true : false); 
    } 
    catch (Aws\Exception\AwsException $e) {throw new Exception($e->getMessage());} 
    catch (Aws\S3\Exception\S3Exception $e) {throw new Exception($e->getAwsErrorType().' '.$e->getAwsErrorCode());} 
    catch (Exception $e) {throw new Exception($e->getMessage());} 

    return false; 
} 

public function listObjects($bucket,$prefix = '',$start_after = '',$max_keys = '') { 
    if (!$this->checkActive()) return false; 

    $args = array('Bucket' => $bucket,'EncodingType' => 'url'); 

    if ($max_keys > 0) $args['MaxKeys'] = intval($max_keys); 
    if ($prefix) $args['Prefix'] = $prefix; 
    if ($start_after) $args['StartAfter'] = $start_after; 

    try { 
    $response = $this->s3->ListObjectsV2($args); 

    if (!$response) return false; 

    $data = $response->toArray(); 
    return (isset($data['Contents']) ? $data['Contents'] : array()); 
    } 
    catch (Aws\Exception\AwsException $e) {throw new Exception ($e->getMessage());} 
    catch (Aws\S3\Exception\S3Exception $e) {throw new Exeception ($e->getAwsRequestId().' : '.$e->getAwsErrorType().' : '.$e->getAwsErrorCode());} 
    catch (Exception $e) {throw new Exception ($e->getMessage());} 
} 

public function listAllObjects($bucket,$prefix = '') { 
    if (!$this->checkActive()) return false; 

    $args = array('Bucket' => $bucket,'EncodingType' => 'url'); 
    if ($prefix) $args['Prefix'] = $prefix; 

    try { 
    $response = $this->s3->getIterator('ListObjectsV2',$args,$args); 
    if (!$response) return false; 
    return iterator_to_array($response); 
    } 
    catch (Aws\Exception\AwsException $e) {throw new Exception ($e->getMessage());} 
    catch (Aws\S3\Exception\S3Exception $e) {throw new Exeception ($e->getAwsRequestId().' : '.$e->getAwsErrorType().' : '.$e->getAwsErrorCode());} 
    catch (Exception $e) {throw new Exception ($e->getMessage());} 
} 

private function checkActive() { 
    if ($this->s3) return true; 
    return $this->create(); 
} 

} 

try { 
$s3 = new S3(); 
$list = $s3->listObjects($bucket,$key_starts_with,$full_key_to_start_after,$number_to_return); 
print_r($list); 

$list = $s3->listAllObjects($bucket,$key_starts_with); 
print_r($list); 
} 
catch (Exception $e) {echo 'Error: '.$e->getMessage();} 
Verwandte Themen