stream_get_contents

(PHP 5)

stream_get_contentsЧитает оставшуюся часть потока в строку

Описание

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

Похожа на функцию file_get_contents(), за исключением того, что stream_get_contents() работает с уже открытым ресурсом потока и возвращает оставшуюся часть содержимого в строку размером до maxlength байт и начиная с указанного смещения offset.

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

handle (resource)

Ресурс потока (например, полученный при помощи функции fopen())

maxlength (integer)

Максимальное количество байт для чтения. По умолчанию -1 (прочитать весь оставшийся буфер).

offset (integer)

Перейти к указанному смещению перед чтением. Если это число отрицательное, то переход не произойдёт и чтение начнётся с текущей позиции.

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

Возвращает строку или FALSE в случае возникновения ошибки.

Список изменений

Версия Описание
5.1.0 Был добавлен параметр offset.

Примеры

Пример #1 Пример использования stream_get_contents()

<?php

if ($stream fopen('http://www.example.com''r')) {
    
// вывести всю страницу начиная со смещения 10
    
echo stream_get_contents($stream, -110);

    
fclose($stream);
}


if (
$stream fopen('http://www.example.net''r')) {
    
// вывести первые 5 байт
    
echo stream_get_contents($stream5);

    
fclose($stream);
}

?>

Примечания

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

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

  • fgets() - Читает строку из файла
  • fread() - Бинарно-безопасное чтение файла
  • fpassthru() - Выводит все оставшиеся данные из файлового указателя

Коментарии

Автор:
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

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