Utiliser fgets() sans feof()
Posté : 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 :
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 ?
Merci d'avance
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
}
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);