Die vorliegende Übersetzung wurde maschinell erstellt. Im Falle eines Konflikts oder eines Widerspruchs zwischen dieser übersetzten Fassung und der englischen Fassung (einschließlich infolge von Verzögerungen bei der Übersetzung) ist die englische Fassung maßgeblich.
Streams in derAWS SDK for PHPVersion 3
Im Rahmen seiner Integration der\ PSR7\Body
-Parameter auf einerS3::PutObject beherrschen, kann mit einer Zeichenfolge, einer PHP-Stream-Ressource oder einer Instance vonPsr\Http\Message\StreamInterface
.
Warnung
Das SDK übernimmt alle PHP-Stream-Rohressourcen, die als Eingabeparameter für einen Befehl übergeben werden. Der Stream wird in Ihrem Namen verbraucht und geschlossen.
Wenn Sie einen Stream zwischen einer SDK-Operation und Ihrem Code teilen müssen, schließen Sie ihn in eine Instance von GuzzleHttp\Psr7\Stream
ein, bevor Sie ihn als Befehlsparameter aufnehmen. Das SDK verwendet den Stream, sodass Ihr Code die Bewegung des internen Cursors des Streams berücksichtigen muss. Guzzle-Streams rufen fclose
für die zugrunde liegende Stream-Ressource auf, wenn sie vom PHP-Garbage Collector vernichtet werden, so müssen Sie den Stream also nicht selbst schließen.
Stream-Decorators
Guzzle bietet mehrere Stream-Decoratoren, mit denen Sie steuern können, wie das SDK und Guzzle mit der Streaming-Ressource interagieren, die als Eingabeparameter für einen Befehl bereitgestellt wird. Diese Decoratoren können verändern, wie Handler in einem bestimmten Stream lesen und suchen können. Im Folgenden sehen Sie eine unvollständige Liste, mehr finden Sie auf derGuzzleHttpPsr7\
AppendStream
GuzzleHttp\ Psr7\ Psr7AppendStream
Lesen aus mehreren Streams nacheinander.
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\ Psr7CachingStream
Wird verwendet, um die Suche nach zuvor gelesenen Bytes in nicht durchsuchbaren Streams zu ermöglichen. Dies kann nützlich sein, wenn die Übertragung eines nicht durchsuchbaren Entity-Rumpfs fehlschlägt, weil der Stream auf den Anfang zurückgesetzt werden muss (z. B. aufgrund einer Weiterleitung). Daten, die aus dem Remote-Stream gelesen werden, werden in einem temporären PHP-Stream gepuffert, sodass zuvor gelesene Bytes zuerst im Speicher und dann auf der Festplatte zwischengespeichert werden.
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\ Psr7InflateStream
Verwendet den zlib.inflate-Filter von PHP zum Erweitern oder Komprimieren von gezippten Inhalten.
Dieser Stream-Decorator überspringt die ersten 10 Bytes des vorgegebenen Streams, um den gzip-Header zu entfernen, wandelt den Stream in eine PHP-Stream-Ressource um und fügt ihn dann dem zlib.inflate-Filter hinzu. Der Stream wird dann wieder in eine Guzzle-Stream-Ressource umgewandelt, die als Guzzle-Stream verwendet werden kann.
LazyOpenStream
GuzzleHttp\ Psr7\ Psr7LazyOpenStream
Liest eine Datei langsam, die erst nach einer I/O-Operation auf dem Stream geöffnet wird, bzw. schreibt in diese.
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\ Psr7LimitStream
Wird verwendet, um eine Teilmenge oder ein Segment eines vorhandenen Stream-Objekts lesen. Dies kann nützlich sein, um eine große Datei in kleinere Teile zu zerlegen, die in Blöcken gesendet werden (z. B. die 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
GuzzleHttp\ Psr7\ Psr7NoSeekStream
Verpackt einen Stream und lässt keine Suche zu.
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\ Psr7PumpStream
Stellt einen schreibgeschützten Datenstream bereit, der Daten aus einer aufrufbaren PHP-Funktion pumpt.
Wenn das bereitgestellte Callable aufgerufen wird, PumpStream gibt die zum Lesen angeforderte Datenmenge an die aufrufbare Funktion weiter. Der aufrufbare Funktion kann diesen Wert ignorieren und weniger oder mehr Bytes als gewünscht zurückgeben. Alle zusätzlichen Daten, die von der angegebenen aufrufbaren Funktion zurückgegeben werden, werden intern gepuffert, bis sie mit der read () -Funktion der PumpStream. Die bereitgestellte aufrufbare Funktion MUSS false zurückgegeben, wenn es keine weiteren Daten zu lesen gibt.
Stream-Decorators
Das Erstellen eines Stream-Decorators ist mit derGuzzleHttp\ Psr7\ Psr7StreamDecoratorTrait. Dieses Trait bietet Methoden, die Psr\Http\Message\StreamInterface
implementieren, indem sie sich als Proxy für einen zugrundeliegenden Stream verhalten. Sie verwenden den use
einfach mit StreamDecoratorTrait
und implementieren Ihre benutzerdefinierten Methoden.
Angenommen, wir wollten jedes Mal eine bestimmte Funktion aufrufen, wenn das letzte Byte aus einem Stream gelesen wurde. Dies könnte durch Überschreiben der read()
-Methode implementiert werden.
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; } }
Dieser Decorator könnte in jedem vorhandenen Stream hinzugefügt und wie dieser verwendet werden.
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!"