Ce face stream_get_line
stream_get_line seamănă cu fgets, cu două diferențe. Separatorul poate fi orice text ("\n", "\r\n", "||"), iar separatorul nu apare în rezultat, deci nu mai ai nevoie de trim.
Citirea se oprește și când s-au adunat $length octeți. Restul liniei vine la apelul următor. La finalul stream-ului funcția returnează false.
Parametri
| Parametru | Descriere |
|---|---|
$stream |
Stream-ul din care citești. |
$length |
Numărul maxim de octeți citiți la un apel. |
$ending |
Opțional. Separatorul. Fără el, citirea se oprește doar la $length sau la final. |
Ce returnează
Textul până la separator (fără separator) sau false când nu mai este nimic de citit.
Exemple
Exemplul 1: Linii fără caracterul de linie nouă
<?php
$m = fopen("php://memory", "r+");
fwrite($m, "Ana\nIon\nMaria");
rewind($m);
while (($linie = stream_get_line($m, 1024, "\n")) !== false) {
echo "[$linie]\n";
}
Rezultat
[Ana]
[Ion]
[Maria]
Exemplul 2: Înregistrări separate prin ||
<?php
$m = fopen("php://memory", "r+");
fwrite($m, "Ana;Iași||Ion;Cluj||Maria;Brașov");
rewind($m);
while (($rand = stream_get_line($m, 1024, "||")) !== false) {
[$nume, $oras] = explode(";", $rand);
echo "$nume locuiește în $oras\n";
}
Rezultat
Ana locuiește în Iași
Ion locuiește în Cluj
Maria locuiește în Brașov
Exemplul 3: Linia goală și limita de lungime
A doua linie este goală și vine ca text gol, nu ca false. A treia linie are 7 caractere, iar limita este 4, așa că vine în două bucăți.
<?php
$m = fopen("php://memory", "r+");
fwrite($m, "a\n\nbcdefgh\n");
rewind($m);
while (($linie = stream_get_line($m, 4, "\n")) !== false) {
var_dump($linie);
}
Rezultat
string(1) "a"
string(0) ""
string(4) "bcde"
string(3) "fgh"
Greșeli frecvente
- Scrii bucla ca
while ($linie = stream_get_line(...)). O linie goală sau linia"0"sunt considerate false și bucla se oprește prea devreme. Compară cu!== false. - Pui un
$lengthprea mic. Liniile mai lungi sunt tăiate în bucăți, fără niciun avertisment.
Comenzi înrudite
fgets: Citește o linie dintr-un fișier deschis cu fopen.stream_get_contents: Citește tot ce a rămas într-un stream deschis (fișier, memorie, socket, proces) și returnează ca text.explode: Împarte un text în bucăți după un separator și le pune într-un tablou.