betterCode() PHP 2025

stream_get_contents

(PHP 5, PHP 7, PHP 8)

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

Описание

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

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

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

stream (resource )

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

length (int )

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

offset (int )

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

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

Возвращает строку или false , если возникла ошибка.

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

Версия Описание
8.0.0 length теперь допускает значение null.

Примеры

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

<?php

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

fclose($stream);
}


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

fclose($stream);
}

?>

Примечания

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

Замечание:

При указании значения параметра length, отличного от null , эта функция немедленно выделит внутренний буфер такого размера, даже если фактическое содержимое будет значительно короче.

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

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

Нашли ошибку?

ИнструкцияИсправлениеСообщение об ошибке
+Добавить

Примечания пользователей 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
5 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.
+Добавить

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