stream_get_contents

(PHP 5)

stream_get_contents — Reads remainder of a stream into a string

Description

string stream_get_contents ( resource $handle [, int $maxlength [, int $offset ]] )

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 maxlength bytes and starting at the specified offset .

Список параметров

handle (resource)

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

maxlength (integer)

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

offset (integer)

Seek to the specified offset before reading. Added in PHP 5.1.0.

Возвращаемые значения

Returns a string, or FALSE on failure.

Примеры

Пример #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, -110);

    
fclose($stream);
}


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

    
fclose($stream);
}

?>

Смотрите также

Замечание: Эта функция безопасна для обработки данных в двоичной форме.

Коментарии

Автор:
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.
2011-01-20 15:53:32
http://php5.kiev.ua/manual/ru/function.stream-get-contents.html
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
2011-12-17 21:12:00
http://php5.kiev.ua/manual/ru/function.stream-get-contents.html
It is important to know that stream_get_contents behaves differently with different versions of PHP. Consider the following

<?php

$handle 
fopen('file''w+'); // truncate + attempt to create
fwrite($handle'12345'); // file position > 0
rewind($handle); // position = 0
$content stream_get_contents($handle); // file position = 0 in PHP 5.1.6, file position > 0 in PHP 5.2.17!
fwrite($handle'6789');
fclose($handle);

/**
 *
 * 'file' content
 * 
 * PHP 5.1.6:
 * 67895
 *
 * PHP 5.2.17:
 * 123456789
 *
 */
?>

As a result, stream_get_contents() affects file position in 5.1, and do not affect file position in 5.2 or better.
2012-03-22 10:38:00
http://php5.kiev.ua/manual/ru/function.stream-get-contents.html
It states that $length parameter which value is null is intended to read all remaining contents from $stream
However, example listed under docs uses -1 as $length parameter to achieve such behavior

Recently i had to start few commands from php7.4 and read content from them, proc_open was used to create processes.
Both output[1] and error[2] pipes were set to non-blocking mode. For some unknown reason sometimes process error[2] channel was available, sometimes not(it was empty string).

After some investigation it was found that stream_get_contents works just great with -1 as a $length value instead of null if you are trying to get all remaining buffer.
2023-12-04 04:45:11
http://php5.kiev.ua/manual/ru/function.stream-get-contents.html

    Поддержать сайт на родительском проекте КГБ