[PHP] Comportement feof: test à postériori ou erreur de création de ma boucle?

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : [PHP] Comportement feof: test à postériori ou erreur de création de ma boucle?

[PHP] Comportement feof: test à postériori ou erreur de créa

par A_lexisb » 07 janv. 2009, 10:36

Bonjour,

je lis un fichier dont la longueur des enregistrements est de 128 octets.
Je vous fais grace des variables, mais voici le code réduit de mon programme qui lit un fichier en entrée et écrit dans une base de données en sortie:
<?php
//
//programme de chargement des fichiers FC STX dans les bases de données
// déclaration des compteurs
//
$ind=0;
$ligne=0;

...

//récupération de la valeur du fichier à traiter
//$flec=$_GET['liste'];
$flec="FC1008AC";
$fichier = '.\\..\\'.$fic.$flec;
//procédure de lecture avec lecture préalable du premier enregistrement.
$fp = fopen($fichier, "r") or die("Impossible d'ouvrir le fichier $flec");
//
//routine de lecture et de chargement
//
  while (! feof($fp))
        {
        echo "-";
        $ligne = fread($fp, 128);
...
        $ind=$ind+1;
        echo "+".$ind."+";
...        
        }
?>
Admettons que je n'aie qu'un enregistrement, l'exécution donnera le résultat suivant:
-+1+-+2+
ce qui semble démontrer que la fin de fichier n'est pas détectée dès la première lecture et qu'un second passage dans la boucle soit nécessaire.
Cela me pose un problème de compteur dans un premier temps car je veux savoir combien d'enregistrements je traite, et surtout je transfère les enregistrements du fichier en entrée dans une base mysql en sortie avec des risques de corruption de ma base.

Ma question est donc la suivante: le comportement de !feof est-il à postériori, et en ce cas dois-je trouver une astuce pour éviter de repasser dans la boucle après le dernier enregistrement ou existe-t-il un moyen d'intégrer le test de fin de fichier dès la lecture du dernier enregistrement d'un fichier?

Amicalement, Alexis.