Utiliser fgets() sans feof()

Eléphant du PHP | 60 Messages

05 févr. 2008, 16:42

Bonjour.

Je suis en train d'étudier en détail la question du traitement des fichiers en PHP et après avoir lu les pages de documentation sur les fonctions fgets() et feof(), je me pose quelques questions :

1) Dans la doc sur fgets(), on trouve : fgets() retourne la chaîne lue jusqu'à la longueur length - 1 octet depuis le pointeur de fichier handle , ou bien la fin du fichier, ou une nouvelle ligne (qui inclut la valeur retournée), ou encore un EOF (celui qui arrive en premier).

D'où ma première question : à quoi bon utiliser feof() pour savoir si on atteint la fin du fichier avec fgets() ? Exemple typique :

Code : Tout sélectionner

while (!feof($f)) // on parcours le fichier { $ligne = fgets($f); // lecture d'une ligne echo trim($ligne); // traitement de la ligne }
2) D'autre part, beaucoup de contributions évoquent un problème avec feof() qui ne retournerait pas false au moment ou il détecte la fin du fichier, mais au test suivant, ce qui fait qu'on effectue 2 fois le dernier traitement. J'ai essayé avec le code suivant et je ne constate pas ce problème, pourquoi ?

Code : Tout sélectionner

while (!feof($f)) // On parcours le fichier { $ligne = fgets($f); // Lecture d'une ligne echo trim($ligne)."<br />"; // écriture de la ligne lue echo "X<br />"; // écriture d'un caractère quelconque qui devrait apparaitre une fois de trop d'après ce que j'ai compris. } fclose($f);
Merci d'avance