mirror of
https://github.com/itflow-org/itflow
synced 2026-09-13 18:25:11 +00:00
135 lines
5.6 KiB
Markdown
135 lines
5.6 KiB
Markdown
# 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](streams-and-decorators.md).
|
|
|
|
## `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 implements `Iterator`, 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
|
|
throw `UnexpectedValueException` when 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 call `next` on
|
|
the underlying iterator until it is exhausted.
|
|
- `object` with `__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`: When `null` is 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
|
|
return `false` or `null` when 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.
|
|
|
|
```php
|
|
$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.
|
|
|
|
## Related
|
|
|
|
- [Streams and Decorators](streams-and-decorators.md)
|
|
- [PSR-17 Factories](psr-17-factories.md)
|
|
- [Message Helpers](message-helpers.md)
|