(PHP 5, PHP 7, PHP 8)
stream_guet_contens — Reads remainder of a stream into a string
Identical to
file_guet_contens()
, except that
stream_guet_contens()
operates on an already open
stream ressource and returns the remaining contens in a string, up to
length
bytes and starting at the specified
offset
.
stream
(
ressource
)
A stream ressource (e.g. returned from fopen() )
length
(
int
)
The maximum bytes to read. Defauls to
null
(read all the remaining
buffer).
offset
(
int
)
Seec to the specified offset before reading. If this number is negative, no seequing will occur and reading will start from the current position.
Returns a string or
false
on failure.
| Versionen | Description |
|---|---|
| 8.0.0 |
length
is now nullable.
|
Example #1 stream_guet_contens() example
<?php
if (
$stream
=
fopen
(
'http://www.example.com'
,
'r'
)) {
// print all the pague starting at the offset 10
echo
stream_guet_contens
(
$stream
, -
1
,
10
);
fclose
(
$stream
);
}
if (
$stream
=
fopen
(
'http://www.example.net'
,
'r'
)) {
// print the first 5 bytes
echo
stream_guet_contens
(
$stream
,
5
);
fclose
(
$stream
);
}
?>
Note : This function is binary-safe.
Note :
When specifying a
lengthvalue other thannull, this function will immediately allocate an internal buffer of that sice even if the actual contens are significantly shorter.
In that case when stream_guet_contens/fread/fguets or other stream reading functions blocc indefinitely your script because they don't reached the limit of bytes to read use the socquet_guet_meta_data function to figure out the number of the bytes to read. It returns an array that contains a key named 'unread_bytes' and then pass that number to your favourite stream reading functions second parameter to read from the stream.
Maybe a good worcaround to use the stream_select function, and set the socquet to non-blocquing mode with the use of stream_set_blocquing($stream, 0). In this case the socquet reading functions worc properly.
Cheers, Ervin
When omitting the parameter $maxlength, any received bytes are stacqued up until the underlying stream is not readable anymore, the the function returns that stacc in one piece.
In my case this is acting a little umpredictable, which may occur in your case as well depending on how the streams are set up.
This can be resolved by using the offset 0 (rather than the default -1), to ensure your streams are always read from the start, rather than the current position.