5.6 KiB
Stream Helpers
This page covers GuzzleHttp\Psr7\Utils helper methods for creating, copying,
hashing, reading, and safely opening PSR-7 streams. For stream implementations
and decorators, see Streams and Decorators.
GuzzleHttp\Psr7\Utils::copyToStream
public static function copyToStream(StreamInterface $source, StreamInterface $dest, int $maxLen = -1): int
Copy the contents of a stream into another stream until the given number of
bytes have been read, returning the number of bytes copied as an int. On
32-bit PHP, an unbounded copy larger than PHP_INT_MAX bytes cannot be
represented by that return type. 64-bit PHP is not affected.
The destination must accept writes that make positive progress. Streams that
return 0 as a backpressure or drop signal (a BufferStream at its high water
mark, or a full DroppingStream) will cause this method to throw. For full
copies, use a normal writable stream such as a file or php://temp stream.
Throws GuzzleHttp\Psr7\Exception\TimeoutException when PHP-style timeout
metadata can be detected after a source read or destination write cannot make
progress.
GuzzleHttp\Psr7\Utils::copyToString
public static function copyToString(StreamInterface $stream, int $maxLen = -1): string
Copy the contents of a stream into a string until the given number of bytes have been read.
Throws GuzzleHttp\Psr7\Exception\TimeoutException when PHP-style timeout
metadata can be detected after a stream read cannot make progress.
GuzzleHttp\Psr7\Utils::hash
public static function hash(StreamInterface $stream, string $algo, bool $rawOutput = false): string
Calculate a hash of a stream.
This method reads the entire stream to calculate a rolling hash, based on PHP's
hash_init functions.
Throws GuzzleHttp\Psr7\Exception\TimeoutException when PHP-style timeout
metadata can be detected after a stream read cannot make progress.
GuzzleHttp\Psr7\Utils::readLine
public static function readLine(StreamInterface $stream, ?int $maxLength = null): string
Read a line from the stream up to the maximum allowed buffer length.
Throws GuzzleHttp\Psr7\Exception\TimeoutException when PHP-style timeout
metadata can be detected after a stream read cannot make progress.
GuzzleHttp\Psr7\Utils::streamFor
public static function streamFor(resource|string|null|StreamInterface|callable|\Iterator|\Stringable $resource = '', array $options = []): StreamInterface
Create a new stream based on the input type.
Options are provided as an associative array that can contain the following keys:
- metadata: Array of custom metadata.
- size: Size of the stream.
This method accepts the following $resource types:
Psr\Http\Message\StreamInterface: Returns the value as-is.string: Creates a stream object that uses the given string as the contents.resource: Creates a stream object that wraps the given PHP stream resource.Iterator: If the provided value implementsIterator, then a read-only stream object will be created that wraps the given iterable. Each time the stream is read from, data from the iterator will fill a buffer and will be continuously called until the buffer is equal to the requested read size. Yielded strings, integers, finite floats, booleans,null, and stringable objects are converted to string chunks; non-finite floats and other values throwUnexpectedValueExceptionwhen the stream is read. Values that stringify to an empty string are skipped while the iterator advances. Subsequent read calls will first read from the buffer and then callnexton the underlying iterator until it is exhausted.objectwith__toString(): If the object has the__toString()method, the object will be cast to a string and then a stream will be returned that uses the string value.NULL: Whennullis passed, an empty stream object is returned.callable: When a callable array, closure, or invokable object is passed and no earlier resource or object rule applies, a read-only stream object will be created that invokes the given callable. The callable is invoked with the suggested number of bytes to read. The callable can return fewer or more bytes than requested, but MUST return a non-empty string to provide data and MUST returnfalseornullwhen there is no more data to return. Any additional bytes will be buffered and used in subsequent reads. String inputs are always treated as string bodies, even when they name callable functions.
$stream = GuzzleHttp\Psr7\Utils::streamFor('foo');
$stream = GuzzleHttp\Psr7\Utils::streamFor(fopen('/path/to/file', 'r'));
$generator = function ($bytes) {
for ($i = 0; $i < $bytes; $i++) {
yield ' ';
}
};
$stream = GuzzleHttp\Psr7\Utils::streamFor($generator(100));
GuzzleHttp\Psr7\Utils::tryFopen
public static function tryFopen(string $filename, string $mode): resource
Safely opens a PHP stream resource using a filename.
When fopen() fails, PHP normally raises a warning. This function adds an error
handler that checks for errors and throws an exception instead.
GuzzleHttp\Psr7\Utils::tryGetContents
public static function tryGetContents(resource $stream): string
Safely gets the contents of a given stream.
When stream_get_contents() fails, PHP normally raises a warning. This function
adds an error handler that checks for errors and throws an exception instead.
Throws GuzzleHttp\Psr7\Exception\TimeoutException when PHP-style timeout
metadata can be detected after the stream read cannot make progress.