feof în PHP

Verifică dacă s-a ajuns la sfârșitul unui fișier deschis.

Sintaxă
feof($stream): bool

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 valoare false, care apare ca o linie goală în plus.
  • Dai lui feof rezultatul unui fopen eșuat. Pe false primești TypeError, 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.