Ce face feof
feof returnează true după ce o citire a încercat să treacă de sfârșitul fișierului. Atenție: nu devine true imediat după ultima linie, ci abia după o încercare de citire care nu mai găsește nimic.
De aceea, în bucle este mai sigur să verifici direct rezultatul citirii (fgets(...) !== false). feof rămâne util ca să afli de ce s-a oprit citirea.
Parametri
| Parametru | Descriere |
|---|---|
$stream |
Resursa returnată de fopen. |
Ce returnează
true la sfârșitul fișierului, altfel false.
Exemple
Exemplul 1: Momentul în care feof devine true
<?php
file_put_contents("doua.txt", "unu\ndoi\n");
$f = fopen("doua.txt", "r");
fgets($f);
fgets($f);
var_dump(feof($f));
var_dump(fgets($f));
var_dump(feof($f));
fclose($f);
Rezultat
bool(false)
bool(false)
bool(true)
Exemplul 2: Bucla while (!feof) face un pas în plus
Fișierul are două linii, dar bucla rulează de trei ori. A treia oară fgets returnează false.
<?php
file_put_contents("doua.txt", "unu\ndoi\n");
$f = fopen("doua.txt", "r");
while (!feof($f)) {
$linie = fgets($f);
var_dump($linie);
}
fclose($f);
Rezultat
string(4) "unu
"
string(4) "doi
"
bool(false)
Greșeli frecvente
- Folosești
while (!feof($f))și prelucrezi și ultima valoarefalse, care apare ca o linie goală în plus. - Dai lui
feofrezultatul unuifopeneșuat. PefalseprimeștiTypeError, iar în versiunile vechi o buclă infinită.
Comenzi înrudite
fgets: Citește o linie dintr-un fișier deschis cu fopen.fread: Citește un număr dat de octeți dintr-un fișier deschis.fopen / fclose: Deschide un fișier pentru citire sau scriere și returnează o resursă; fclose îl închide.