Vérifier la derniere ligne d'un fichier

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 : Vérifier la derniere ligne d'un fichier

par Ryle » 21 juil. 2009, 12:25

Si tu es sous windows, les retours à la ligne n'apparaissent pas simplement comme des "\n", mais comme des "\r\n". Il y a en effet un retour à la ligne + une nouvelle ligne (contrairement à unix ou la nouvelle ligne "\n" suffit).

Du coup, ton fseek avec l'offset -2 doit te ramener non pas sur la ligne précédente, mais sur le "\r", rendant par conséquent ton test faux. Tu peux essayer de faire un offset de -3 octets au lieu de -2, mais cela ne fonctionnera que pour windows (peut être à compléter d'un test pour déterminer sur quel os ton script se trouve ?)

par Invité » 21 juil. 2009, 12:06

Merci de ses explications claires et précises mais cela ne fonctionne pas.
$fd = @fopen($file,"a+");
if (!$fd) die("We can't read the file.");
fseek($fd,-2,SEEK_END);
$before_last_ligne=fgets($fd, 4096);
fseek($fd,-1,SEEK_END);
$last_ligne=fgets($fd, 4096);
if ($before_last_ligne == "\n" && $last_ligne == "\n"){
    $return_treatment['lastline'] = 'OK';        
}else{
    $return_treatment['lastline'] = 'NON';
}
fseek($fd,0,SEEK_SET);
Le script me renvoit toujours NON... Je ne pense pas etre loin de la solution si?

par Ryle » 20 juil. 2009, 16:32

Deux petites choses... En php, pour être interprétés correctement les \n doivent être placés entre guillemets ("\n") et pas entre apostrophes ('\n') ...

L'autre chose, c'est que fgets() te retourne la ligne courante, tu ne peux donc pas y trouver deux retours à la ligne, puisqu'il s'agirait dans ce cas de deux lignes... en gros, il faudrait faire appel deux fois à fgets, et vérifier si chacun te retourne "\n" :)

Vérifier la derniere ligne d'un fichier

par R1D3M4N » 20 juil. 2009, 14:08

Bonjour,

Jespere etre dans la bonne section. J'ai un souci que je n'arrive pas a résoudre. Je voudrais vérifier la présence de deux retours a la ligne a la fin de mon fichier.

En gros j'ai essayé de faire un fseek(fichier, -2, SEEK_END); et derriere un fgets(fichier) et je compare le resultat a '\n\n'. Le soucis c'est que cela ne fonctionne pas et je suppose que cela vient du fait que les \n soient des caracteres speciaux.

Quelqu'un aurait une idée ou une piste pour moi?

Désolé pour les accents je suis sur un clavier anglais et je n'ai trouvé que la touche pour l'accent aigue.