stream_get_contents

(PHP 5, PHP 7, PHP 8)

stream_get_contentsReads remainder of a stream into a string

Description

stream_get_contents(resource $stream, ? int $length = null , int $offset = -1): string |false

Identical to file_get_contents() , except that stream_get_contents() operates on an already open stream resource and returns the remaining contents in a string, up to length bytes and starting at the specified offset.

Parameters

stream (resource )

A stream resource (e.g. returned from fopen() )

length (int )

The maximum bytes to read. Defaults to null (read all the remaining buffer).

offset (int )

Seek to the specified offset before reading. If this number is negative, no seeking will occur and reading will start from the current position.

Return Values

Returns a string or false on failure.

Changelog

Version Description
8.0.0 length is now nullable.

Examples

Example #1 stream_get_contents() example

<?php

if ($stream = fopen('http://www.example.com', 'r')) {
// print all the page starting at the offset 10
echo stream_get_contents($stream, -1, 10);

fclose($stream);
}


if (
$stream = fopen('http://www.example.net', 'r')) {
// print the first 5 bytes
echo stream_get_contents($stream, 5);

fclose($stream);
}

?>

Notes

Note: This function is binary-safe.

Note:

When specifying a length value other than null , this function will immediately allocate an internal buffer of that size even if the actual contents are significantly shorter.

See Also

  • fgets() - Gets line from file pointer
  • fread() - Binary-safe file read
  • fpassthru() - Output all remaining data on a file pointer

Found A Problem?

Learn How To Improve This PageSubmit a Pull RequestReport a Bug
+add a note

User Contributed Notes 3 notes

up
10
clarck dot smith at gmail dot com
13 years ago
In that case when stream_get_contents/fread/fgets or other stream reading functions block indefinitely your script because they don't reached the limit of bytes to read use the socket_get_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 workaround to use the stream_select function, and set the socket to non-blocking mode with the use of stream_set_blocking($stream, 0). In this case the socket reading functions work properly.

Cheers, Ervin
up
3
m rahman
14 years ago
When omitting the parameter $maxlength, any received bytes are stacked up until the underlying stream is not readable anymore, the the function returns that stack in one piece.
up
0
jure dot sah at t-2 dot com
4 months ago
In my case this is acting a little unpredictable, 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.
+add a note

AltStyle によって変換されたページ (->オリジナル) /