Fluxos no AWS SDK for PHP versão 3 - AWS SDK for PHP

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Fluxos no AWS SDK for PHP versão 3

Como parte de sua integração com o padrão de mensagem HTTP PSR-7, o AWS SDK for PHP usa a PSR-7 StreamInterface internamente como sua abstração sobre streams do PHP. Qualquer comando com um campo de entrada definido como um blob, como o parâmetro Body em um comando S3::PutObject, pode ser satisfeito com uma string, um recurso de stream do PHP ou uma instância de Psr\Http\Message\StreamInterface.

Atenção

O SDK assume a propriedade de qualquer recurso de streaming bruto de PHP fornecido como um parâmetro de entrada para um comando. O streaming é consumido e fechado em seu nome.

Se você precisar compartilhar um streaming entre uma operação do SDK e seu código, encapsule-o em uma instância de GuzzleHttp\Psr7\Stream antes de incluí-lo como um parâmetro de comando. O SDK consome o streaming e, portanto, o código precisa contabilizar o movimento do cursor interno do streaming. Os streamings do Guzzle chamam fclose no recurso de streaming subjacente quando são destruídos pelo coletor de lixo do PHP, portanto, não é necessário que você mesmo feche o streaming.

Decoradores de fluxos

O Guzzle fornece vários decoradores de streaming que você pode usar para controlar como o SDK e o Guzzle interagem com o recurso de streaming fornecido como um parâmetro de entrada para um comando. Esses decoradores podem modificar a forma como os manipuladores podem ler e buscar em um determinado stream. O seguinte é uma lista parcial; mais informações podem ser encontradas no Repositório GuzzleHttpPsr7.

AppendStream

GuzzleHttp\Psr7\AppendStream

Lê em vários streams, um depois do outro.

use GuzzleHttp\Psr7; $a = Psr7\stream_for('abc, '); $b = Psr7\stream_for('123.'); $composed = new Psr7\AppendStream([$a, $b]); $composed->addStream(Psr7\stream_for(' Above all listen to me')); echo $composed(); // abc, 123. Above all listen to me.

CachingStream

GuzzleHttp\Psr7\CachingStream

Usado para permitir busca de bytes lidos anteriormente em streams não pesquisáveis. Isso pode ser útil quando há uma falha ao transferir o corpo de uma entidade não pesquisável devido à necessidade de retroceder o stream (por exemplo, como resultado de um redirecionamento). Os dados lidos no stream remoto são armazenados em buffer em um stream temporário do PHP para que os bytes lidos anteriormente sejam armazenados em cache na memória e, em seguida, no disco.

use GuzzleHttp\Psr7; $original = Psr7\stream_for(fopen('http://www.google.com', 'r')); $stream = new Psr7\CachingStream($original); $stream->read(1024); echo $stream->tell(); // 1024 $stream->seek(0); echo $stream->tell(); // 0

InflateStream

GuzzleHttp\Psr7\InflateStream

Usa o filtro zlib.inflate do PHP para inflar ou desinflar conteúdo do gzip.

Esse decorador de stream ignora os primeiros 10 bytes do stream fornecido para remover o cabeçalho do gzip, converte o stream em um recurso de stream do PHP e, em seguida, acrescenta o filtro zlib.inflate. Em seguida, o stream é convertido novamente em um recurso de stream do Guzzle para ser usado como um stream do Guzzle.

LazyOpenStream

GuzzleHttp\Psr7\LazyOpenStream

Lê ou grava lentamente em um arquivo que é aberto somente depois que ocorre uma operação de E/S no stream.

use GuzzleHttp\Psr7; $stream = new Psr7\LazyOpenStream('/path/to/file', 'r'); // The file has not yet been opened... echo $stream->read(10); // The file is opened and read from only when needed.

LimitStream

GuzzleHttp\Psr7\LimitStream

Usado para ler um subconjunto ou fatia de um objeto de stream existente. Isso pode ser útil para dividir um arquivo grande em partes menores para envio em partes (por exemplo, a API de carregamento fracionado do Amazon S3).

use GuzzleHttp\Psr7; $original = Psr7\stream_for(fopen('/tmp/test.txt', 'r+')); echo $original->getSize(); // >>> 1048576 // Limit the size of the body to 1024 bytes and start reading from byte 2048 $stream = new Psr7\LimitStream($original, 1024, 2048); echo $stream->getSize(); // >>> 1024 echo $stream->tell(); // >>> 0

NoSeekStream

GuzzleHttp\Psr7\NoSeekStream

Encapsula um stream e não permite busca.

use GuzzleHttp\Psr7; $original = Psr7\stream_for('foo'); $noSeek = new Psr7\NoSeekStream($original); echo $noSeek->read(3); // foo var_export($noSeek->isSeekable()); // false $noSeek->seek(0); var_export($noSeek->read(3)); // NULL

PumpStream

GuzzleHttp\Psr7\PumpStream

Fornece um stream somente leitura que extrai dados de um PHP chamável.

Ao invocar o chamável fornecido, o PumpStream passa a quantidade de dados solicitados para leitura para o chamável. O chamável pode optar por ignorar esse valor e retornar menos ou mais bytes que o solicitado. Todos os dados extras retornados pelo chamável fornecido são armazenados em buffer internamente até que sejam drenados usando a função read() do PumpStream. O chamável fornecido DEVE retornar falso quando não houver mais dados para leitura.

Implementação de decoradores de stream

A criação de um decorador de stream é muito fácil, graças a GuzzleHttp\Psr7\StreamDecoratorTrait. Essa característica fornece métodos que implementam a Psr\Http\Message\StreamInterface por meio de proxy para um stream subjacente. Basta use o StreamDecoratorTrait e implementar os métodos personalizados.

Por exemplo, digamos que quiséssemos chamar uma função específica cada vez que o último byte fosse lido em um stream. Isso pode ser implementado substituindo o método read().

use Psr\Http\Message\StreamInterface; use GuzzleHttp\Psr7\StreamDecoratorTrait; class EofCallbackStream implements StreamInterface { use StreamDecoratorTrait; private $callback; public function __construct(StreamInterface $stream, callable $cb) { $this->stream = $stream; $this->callback = $cb; } public function read($length) { $result = $this->stream->read($length); // Invoke the callback when EOF is hit if ($this->eof()) { call_user_func($this->callback); } return $result; } }

Esse decorador pode ser adicionado a qualquer stream existente e usado dessa forma.

use GuzzleHttp\Psr7; $original = Psr7\stream_for('foo'); $eofStream = new EofCallbackStream($original, function () { echo 'EOF!'; }); $eofStream->read(2); $eofStream->read(1); // echoes "EOF!" $eofStream->seek(0); $eofStream->read(3); // echoes "EOF!"