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 handle.

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 inclue 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 ressource 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, i.e. 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
14 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
9
Anonymous
12 years ago
WARNING:
Specifying a length of 0 does NOT give you an infinite length, contrary to what the documentation might suggest. Instead, setting a length of 0 just makes the function default to a length of 8192. To be precise, it gets the value PHP_SOCK_CHUNK_SIZE (8192) in ext/standard/streamsfuncs.c.

So, let's say you're trying to read ALL data until you reach a "\x03" (decimal 3) byte. How do you GUARANTEE that this is the case? Well, there's no way! The only thing you can do stream_get_lin() into a "master" string, then fseek() backwards by 1 character, then fgetc() and verify that it's "\x03". If you don't see a "\x03", it means that stream_get_line() has aborted after 8192 bytes and before hitting "\x03", and you'll have to call it again. Keep appending the return values to a "master" string until you hit a "\x03" or EOF... That's the ONLY way to properly build a string that contains EVERYTHING until the character you're looking for.
To Top