

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

# Streaming di AWS SDK untuk PHP Versi 3
<a name="guide_streams"></a>

[Sebagai bagian dari integrasi standar pesan HTTP [PSR-7](http://www.php-fig.org/psr/psr-7/), PSR-7 AWS SDK untuk PHP menggunakan [PSR-7 StreamInterface](https://docs.aws.amazon.com/aws-sdk-php/v3/api/class-Psr.Http.Message.StreamInterface.html) secara internal sebagai abstraksi atas aliran PHP.](http://php.net/manual/en/intro.stream.php) Setiap perintah dengan bidang input didefinisikan sebagai gumpalan, seperti `Body` parameter pada [PutObject perintah S3::](https://docs.aws.amazon.com/aws-sdk-php/v3/api/api-s3-2006-03-01.html#putobject), dapat dipenuhi dengan string, sumber daya aliran PHP, atau instance dari. `Psr\Http\Message\StreamInterface`

**Awas**  
SDK mengambil kepemilikan sumber daya aliran PHP mentah yang disediakan sebagai parameter input ke perintah. Aliran dikonsumsi dan ditutup atas nama Anda.  
Jika Anda perlu berbagi aliran antara operasi SDK dan kode Anda, bungkus dalam instance `GuzzleHttp\Psr7\Stream` sebelum memasukkannya sebagai parameter perintah. SDK menggunakan aliran, sehingga kode Anda perlu memperhitungkan pergerakan kursor internal aliran. Aliran Guzzle memanggil `fclose` sumber daya aliran yang mendasarinya ketika dihancurkan oleh pengumpul sampah PHP, jadi Anda tidak perlu menutup sendiri aliran tersebut.

## Dekorator aliran
<a name="stream-decorators"></a>

Guzzle menyediakan beberapa dekorator aliran yang dapat Anda gunakan untuk mengontrol bagaimana SDK dan Guzzle berinteraksi dengan sumber daya streaming yang disediakan sebagai parameter input ke perintah. Dekorator ini dapat memodifikasi bagaimana penangan dapat membaca dan mencari pada aliran tertentu. Berikut ini adalah daftar sebagian; lebih banyak dapat ditemukan di [repositori GuzzleHttpPsr 7](https://github.com/guzzle/psr7).

### AppendStream
<a name="appendstream"></a>

 [GuzzleHttp\$1 Psr7\$1 AppendStream](https://docs.aws.amazon.com/aws-sdk-php/v3/api/class-GuzzleHttp.Psr7.AppendStream.html) 

Membaca dari beberapa aliran, satu demi satu.

```
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
<a name="cachingstream"></a>

 [GuzzleHttp\$1 Psr7\$1 CachingStream](https://docs.aws.amazon.com/aws-sdk-php/v3/api/class-GuzzleHttp.Psr7.CachingStream.html) 

Digunakan untuk memungkinkan pencarian lebih dari byte yang dibaca sebelumnya pada aliran yang tidak dapat dicari. Ini dapat berguna ketika mentransfer badan entitas yang tidak dapat dicari gagal karena perlu memundurkan aliran (misalnya, yang dihasilkan dari pengalihan). Data yang dibaca dari aliran jarak jauh di-buffer dalam aliran temp PHP sehingga byte yang dibaca sebelumnya di-cache terlebih dahulu di memori, kemudian pada disk.

```
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
<a name="inflatestream"></a>

 [GuzzleHttp\$1 Psr7\$1 InflateStream](https://docs.aws.amazon.com/aws-sdk-php/v3/api/class-GuzzleHttp.Psr7.InflateStream.html) 

Menggunakan filter zlib.inflate PHP untuk mengembang atau mengempiskan konten gzip.

Dekorator aliran ini melewatkan 10 byte pertama dari aliran yang diberikan untuk menghapus header gzip, mengonversi aliran yang disediakan menjadi sumber daya aliran PHP, dan kemudian menambahkan filter zlib.inflate. Aliran kemudian dikonversi kembali ke sumber daya aliran Guzzle untuk digunakan sebagai aliran Guzzle.

### LazyOpenStream
<a name="lazyopenstream"></a>

 [GuzzleHttp\$1 Psr7\$1 LazyOpenStream](https://docs.aws.amazon.com/aws-sdk-php/v3/api/class-GuzzleHttp.Psr7.LazyOpenStream.html) 

Dengan malas membaca atau menulis ke file yang dibuka hanya setelah operasi I/O berlangsung di aliran.

```
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
<a name="limitstream"></a>

 [GuzzleHttp\$1 Psr7\$1 LimitStream](https://docs.aws.amazon.com/aws-sdk-php/v3/api/class-GuzzleHttp.Psr7.LimitStream.html) 

Digunakan untuk membaca subset atau sepotong objek aliran yang ada. Ini dapat berguna untuk memecah file besar menjadi potongan-potongan kecil untuk dikirim dalam potongan (misalnya, Amazon S3 Multipart Upload API).

```
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
<a name="noseekstream"></a>

 [GuzzleHttp\$1 Psr7\$1 NoSeekStream](https://docs.aws.amazon.com/aws-sdk-php/v3/api/class-GuzzleHttp.Psr7.NoSeekStream.html) 

Membungkus aliran dan tidak memungkinkan pencarian.

```
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
<a name="pumpstream"></a>

 [GuzzleHttp\$1 Psr7\$1 PumpStream](https://docs.aws.amazon.com/aws-sdk-php/v3/api/class-GuzzleHttp.Psr7.PumpStream.html) 

Menyediakan aliran hanya-baca yang memompa data dari PHP callable.

Saat memanggil callable yang disediakan, PumpStream meneruskan jumlah data yang diminta untuk dibaca ke callable. Callable dapat memilih untuk mengabaikan nilai ini dan mengembalikan lebih sedikit atau lebih byte dari yang diminta. Setiap data tambahan yang dikembalikan oleh callable yang disediakan di-buffer secara internal hingga terkuras menggunakan fungsi read () dari. PumpStream Callable yang disediakan HARUS mengembalikan false ketika tidak ada lagi data untuk dibaca.

### Menerapkan dekorator aliran
<a name="implementing-stream-decorators"></a>

Membuat dekorator aliran sangat mudah berkat [GuzzleHttp\$1 Psr7\$1](https://docs.aws.amazon.com/aws-sdk-php/v3/api/class-GuzzleHttp.Psr7.StreamDecoratorTrait.html). StreamDecoratorTrait Sifat ini menyediakan metode yang `Psr\Http\Message\StreamInterface` diimplementasikan dengan proxy ke aliran yang mendasarinya. Hanya `StreamDecoratorTrait` dan `use` terapkan metode kustom Anda.

Sebagai contoh, katakanlah kita ingin memanggil fungsi tertentu setiap kali byte terakhir dibaca dari aliran. Ini dapat diimplementasikan dengan mengesampingkan `read()` metode.

```
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;
    }
}
```

Dekorator ini dapat ditambahkan ke aliran yang ada dan digunakan seperti ini.

```
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!"
```