Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Pengaliran diAWS SDK for PHPVersi 3
Sebagai bagian dari integrasiPSR-7Body
parameter padaS3:PutObject komando, dapat dipenuhi dengan string, sumber daya aliran PHP, atau instancePsr\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 instanceGuzzleHttp\Psr7\Stream
sebelum memasukkannya sebagai parameter perintah. SDK menggunakan stream, sehingga kode Anda perlu memperhitungkan pergerakan kursor internal stream. Panggilan aliran membuang waktufclose
pada sumber daya aliran yang mendasari ketika mereka dihancurkan oleh pengumpul sampah PHP, sehingga Anda tidak perlu menutup aliran sendiri.
Penghias Streams
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 diGuzzleHttpPsr7 repositori
AppendStream
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
GuzzleHttp\ Psr7\CachingStream
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, dihasilkan dari pengalihan). Data yang dibaca dari remote stream buffered dalam aliran temp PHP sehingga byte yang sebelumnya dibaca di-cache pertama dalam 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
GuzzleHttp\ Psr7\InflateStream
Menggunakan filter zlib.inflate PHP untuk mengembang atau mengempis konten gzip.
Dekorator aliran ini melewatkan 10 byte pertama dari aliran yang diberikan untuk menghapus header gzip, mengubah aliran yang disediakan ke sumber daya aliran PHP, dan kemudian menambahkan filter zlib.inflate. Aliran tersebut kemudian dikonversi kembali ke sumber daya aliran Guzzle untuk digunakan sebagai aliran Guzzle.
LazyOpenStream
GuzzleHttp\ Psr7\LazyOpenStream
Malas membaca atau menulis ke file yang dibuka hanya setelah operasi I/O berlangsung di sungai.
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
Digunakan untuk membaca subset atau sepotong objek aliran yang ada. Ini dapat berguna untuk memecah file besar menjadi potongan-potongan yang lebih 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
Membungkus aliran dan tidak memungkinkan mencari.
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
Menyediakan aliran read-only yang memompa data dari callable PHP.
Saat memanggil callable yang disediakan, PumpStream melewati 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 disangga secara internal sampai terkuras menggunakan fungsi read () dari PumpStream. Yang disediakan callable HARUS mengembalikan false ketika tidak ada lagi data untuk dibaca.
Menerapkan dekorator Streams
Membuat dekorator aliran sangat mudah berkatGuzzleHttp\ Psr7\StreamDecoratorTrait. Sifat ini menyediakan metode yang mengimplementasikanPsr\Http\Message\StreamInterface
dengan memproksi ke aliran yang mendasarinya. Hanyause
sangStreamDecoratorTrait
dan menerapkan metode kustom Anda.
Sebagai contoh, katakanlah kita ingin memanggil fungsi tertentu setiap kali byte terakhir dibaca dari aliran. Ini bisa diimplementasikan dengan mengesampingkanread()
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!"