stream_get_line

(PHP 5, PHP 7, PHP 8)

stream_get_lineLit une ligne dans un flux

Description

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

stream_get_line() lit une ligne dans la ressource stream.

La lecture se termine quand length octets ont été lus, quand la chaîne non-vide spécifiée par ending a été rencontrée (mais ne sera pas incluse dans la valeur retournée), ou si EOF survient : n'importe lequel des trois qui survient en premier.

Cette fonction est presque identique à fgets() hormis le fait qu'elle permet d'utiliser un délimiteur de ligne différent des caractères standards de \n, \r et \r\n, et ne retourne pas le délimiteur lui-même.

Liste de paramètres

stream

Une resource valide de fichier.

length

Le nombre maximum d'octets à lire depuis le gestionnaire. Les valeurs négatives ne sont pas supportées. Zéro (0) signifie la taille de chunk de socket par défaut, c.-à-d. 8192 octets.

ending

Un délimiteur de chaîne optionnel.

Valeurs de retour

stream_get_line() lit une ligne de taille maximale length dans le flux stream ou false si une erreur survient.

Voir aussi

  • fread() - Lecture du fichier en mode binaire
  • fgets() - Récupère la ligne courante à partir de l'emplacement du pointeur sur fichier
  • fgetc() - Lit un caractère dans un fichier
add a note

User Contributed Notes 2 notes

up
12
pk at ritm dot ru
16 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
1
cool at user dot com
11 months 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