limiter le nombre de ligne inséré dans un fichier texte

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 : limiter le nombre de ligne inséré dans un fichier texte

par jpaul » 13 juin 2006, 07:46

Hum, ton fwrite() est bizare, il manque le 'ressource handle' (descripteur de fichier) que tu dois récupérer avec le fopen.
D'autre part pour eviter les accès concurents, à ta place, j'essayerais d'utiliser flock.

par lospericos » 12 juin 2006, 23:57

Bonjour Sadeq,

J'ai essayé de mettre en pratique ton script mais malheureusement je n'ai pas la version 5 de PHP alors la fonction "file_put_contents" ne fonctionne pas sur mon server.
J'ai donc modifié comme tel selon les instructions du manuel PHP mais j'ai l'erreur: "Parse error: parse error, unexpected T_STRING in refresh.php on line 31"
line 31 -> fwrite(implode("\n", $t)).

Code : Tout sélectionner

<?php //lire l'existant du fichier $existant = @file ("messages.txt"); //$existant est un tableau //Règle d'enregistrement : enregistrement limité à 20 lignes if (count($existant) >= 20){ echo "<p>Limite d'enregistrement atteinte!"; exit; } //insérer la nouvelle ligne dans un tableau $t[0] = "'pseudo', 'message'"; //verser $existant dans $t à partir de la case n°1 $case = 1; if ($existant) foreach ($existant as $ligne){ if ($ligne) { $t[$case] = $ligne; $case++; } } //Remplacer le fichier existant @unlink("messages.txt"); //suppression if ( fopen("messages.txt") //ouverture du fichier texte fwrite(implode("\n", $t)) //enregistrer le contenu de $t sous forme de texte multilignes fclose()) //refermer le fichier texte echo "<p>Enregistré."; else echo "<p>Erreur d'enregistrement!"; ?>
Il y a un point sur lequelle je me suis mal exprimé et qui change un peu tout c'est que je veux limiter la longeur de mon fichier à 20 lignes mais sans pour autant le verrouiller des ce quotta atteint.
Le but étant d'en faire un mini-chat, ce serait dès la 20ème ligne supprimer la première et ne garder que les 20 lignes les plus récentes.. :?

par sadeq » 12 juin 2006, 13:49

rewind() ne fait que rembobiner le fichier lu d'une façon séquentielle.
elle ne permet pas l'insertion de lignes.
D'ailleurs ce n'est pas possible d'insérer une ligne dans les lignes existantes celon l'organisation séquentielle.
Ceci dit il faut passer par un traitement :
  • Si la limite des lignes à enregistrer n'est pas atteinte :
    1. insérer la nouvelle ligne dans un tableau à la case n° 0
    2. lire les lignes existantes et les verser dans le tableau à partir de la case n°1
    3. enregistrer ce tableau dans le fichier en mode écriture (remplacement de tous)
Comment?
<?php 
//lire l'existant du fichier 
$existant = @file ("mon_fichier.txt"); //$existant est un tableau 

//Règle d'enregistrement : enregistrement limité à 20 lignes
if (count($existant) >= 20){
	echo "<p>Limite d'enregistrement atteinte!";
	exit;
}

//insérer la nouvelle ligne dans un tableau 
$t[0] = "donnée1;donnée2;donnée3;....."; 

//verser $existant dans $t à partir de la case n°1 
$case = 1; 
if ($existant) foreach ($existant as $ligne){ 
    if ($ligne) {
		$t[$case] = $ligne; 
		$case++;
	}
} 

//Remplacer le fichier existant
@unlink("mon_fichier.txt"); //suppression
if (file_put_contents("mon_fichier.txt", implode("\n", $t) )) //enregistrer le contenu de $t sous forme de texte multilignes 
	echo "<p>Enregistré.";
else echo "<p>Erreur d'enregistrement!";

?>

limiter le nombre de ligne inséré dans un fichier texte

par lospericos » 12 juin 2006, 12:58

Bonjour,

Actuellement je cherche à utiliser cette fonction:
http://www.phpfrance.com/tutoriaux/inde ... s-fichiers
pour créer un petit chat simple genre tagger.
Seulement il me manque deux "fonctions" que je n'arrive pas à faire
1 - n'enregistrer qu'un vingtaine de lignes dans le fichier texte
2 - que la dernière ligne ecrite s'ajoute en haut du fichier texte
J'ai bien essayé la fonction

Code : Tout sélectionner

rewind(); fputs($fb,\n); rewind(); fput($fb,$mon_message);
mais ça ne fonctionne pas...
l'option fopen est (a)

Merci d'avance