stream_get_line

(PHP 5, PHP 7, PHP 8)

stream_get_lineПолучает строку из потокового ресурса до указанного разделителя

Описание

stream_get_line(resource $stream, int $length, string $ending = ""): string|false

Получает строку из указанного дескриптора.

Чтение заканчивается, когда прочитано length количество байт и когда найдена непустая строка, указанная в параметре ending (она не включается в возвращаемое значение) или достигнут EOF (смотря что произойдёт раньше).

Функция очень похожа на функцию fgets(), кроме того, что она позволяет использовать разделители строк, отличающиеся от стандартных \n, \r, и \r\n, и не возвращает сам разделитель.

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

stream

Допустимый дескриптор файла.

length

Максимальное количество байтов для чтения из дескриптора. Отрицательные значения не поддерживаются. Ноль (0) означает размер блока сокета по умолчанию, т.е. 8192 байта.

ending

Необязательный разделитель строки.

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

Возвращает строку длиной до length байт, прочитанную из файла указанного параметром stream или false, если возникла ошибка.

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

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

Примечания пользователей 2 notes

up
12
pk at ritm dot ru
15 years ago
fgets is faster but stream_get_line is more useful in a tcp server scripts.

when fgets reads some bytes from socket, where EOF is reached, it returns bool(false) same as stream_get_line

BUT if remote client drops connection, and server script will try to read some data with function fgets, function will return bool(false), and stream_get_line will return string(0) ""

so you can detect remote client disconnection with stream_get_line, and cannot with fgets
up
0
cool at user dot com
3 days ago
This function is very efficient to redirect streams. I have older scripts to compare, and recent versions of PHP are so fast, that sometimes 2 lines might get fed into one, and this happens only on PHP 8.3 and 8.4.

After digging, i found that throttling a bit is the best to do to maintain retro compatibility.

$line = stream_get_line($response, 1024, "\n");
usleep(10000);
To Top