2017-01-31 2 views
1

My S3 содержит объекты .gz, содержащие JSON внутри. Я просто хочу получить доступ к этому JSON без фактической загрузки объектов в файл.AWS S3 Как читать объект .gz без загрузки PHP

$iterator = $client->getIterator('ListObjects', array(
    'Bucket' => $bucket 
)); 

foreach ($iterator as $object) { 
    $object = $object['Key']; 

    $result = $client->getObject(array(
     'Bucket' => $bucket, 
     'Key' => $object 
    )); 

    echo $result['Body'] . "\n"; 
} 

Когда я бегу выше в оболочке он выводит тарабарщину на echo линии. Каков правильный способ простого извлечения содержимого объекта .gz и сохранения переменной?

Спасибо

ответ

1

Вы можете использовать stream wrapper как это.

$client->registerStreamWrapper(); 

if ($stream = fopen('s3://bucket/key.gz', 'r')) { 
    // While the stream is still open 
    while (!feof($stream)) { 
     // Read 1024 bytes from the stream 
     $d = fread($stream, 1024); 
     echo zlib_decode($d); 
    } 
    // Be sure to close the stream resource when you're done with it 
    fclose($stream); 
} 

Если вы отправляете его в браузер вам не нужно zlib_decode, просто установить заголовок:

header('Content-Encoding: gzip'); 
+0

Спасибо. Работала отлично. Я столкнулся с ошибками на некоторых объектах, но увеличил количество байт, которые его решили. – user2029890

Смежные вопросы