Récupérer puis modifier des infos depuis un fichier texte

Récupérer puis modifier des infos depuis un fichier texte - PHP - Programmation

Marsh Posté le 13-06-2006 à 11:22:45    

Salut,
 
Je n'ai pas trouvé de sujet similaire, j'éspère que mon post ne fait pas doublon.
Je rencontre un petit probleme : J'ai un fichier type texte, avec des mots dedans. En fait c'est l'utilisateur de mon site qui l'envoit, donc je veux faire une vérification de sécurité : enlever tout ce qui n'est pas des lettres pour éviter un eventuel code malicieux.
 
J'ai donc mon code :

$handle=fopen($mon_fichier,"r+" );
while (!feof($handle)) {
 $data_fichier=fgets($handle,1024);
 $search="#[^\-'a-zæÆàÀâÂäÄåÅçÇðÐéÉèÈêÊëËîÎïϜŒôÔöÖùÙûÛüÜÿŸÁáÍíÓóÚúÝýÑñßÞþØøŠšŽž ]#si";
 $data_checked = preg_replace($search,"",$data_fichier);
 fwrite($handle, $data_checked);
}
fclose($handle);


Donc voila le principe : on parcours les lignes du fichier, si on trouve un caractère qui n'est pas répértorié par le masque $search, alors on le supprime, puis on recopie dans le fichier.
Mais dans la pratique, ca fonctionne pas très bien... Par exemple pour un fichier texte comme suit :

Toto
Tata
Titi-hihi
Jojo le rigolo
Tutu
L'analphabète


Je me retrouve après execution de ma fonction avec le fichier suivant :

Toto
Toto
Titi-hihi
Titi-hihiigolo
igolo
L'analphabèteL'analphabète


Ce qui est bien mais pas top... Où ais-je fais une erreur ? Ca ne vient meme pas encore de preg_replace puisque le texte passe mal dès récupération (j'ai fait un test en mettant un echo $data_fichier; ca plante déjà à ce moment.
 
Merci d'avance pour votre aide !

Reply

Marsh Posté le 13-06-2006 à 11:22:45   

Reply

Marsh Posté le 13-06-2006 à 12:16:11    

euh, lire un fichier et ecrire dedans, tres tres mauvaise idee (d'ailleurs ca ne doit pas marcher...)
 
ensuite tu essaye d'ecrire dans un fichier en lecture, donc ca ne doit pas marcher quand tu essaye d'ecrire (et vu que c'est le fichier que tu lis le resultat est *limite* imprevisible)


---------------
my flick r - Just Tab it !
Reply

Marsh Posté le 13-06-2006 à 12:21:07    

Il est en lecture et ecriture : 'r+'   Ouvre en lecture et écriture, et place le pointeur de fichier au début du fichier.
 
Comment me conseillerais-tu de procéder dans ce cas là ?

Reply

Marsh Posté le 13-06-2006 à 12:24:26    

a oui tiens, je croyais que r+ c'etait pour lecture et creation si le fichier n'existe pas ([:pingouino])
 
Pour ma part, je ferais une lecture du fichier entier, traitement du bordel,  
remetre ton pointeur de fichier au debut (rewind()) et ecriture de ton traitement
 
fermeture du fichier


---------------
my flick r - Just Tab it !
Reply

Marsh Posté le 13-06-2006 à 13:11:31    

pas bete, je vais essayer, merci.

Reply

Marsh Posté le 13-06-2006 à 13:32:42    

ah ca marche presque !
 
J'ai juste quelques scories a la fin, bizarre...

Code :
  1. $handle=fopen("noms/".$nom_txt_noms,"r+" );
  2. $i=0;
  3. while (!feof($handle)) {
  4. $data_fichier[$i]=fgets($handle,1024);
  5. $i++;
  6. }
  7. $nb_lignes=$i--;
  8. rewind($handle);
  9. for($i=0;$i<$nb_lignes;$i++) {
  10. $search="#[^\-'a-zæÆàÀâÂäÄåÅçÇðÐéÉèÈêÊëËîÎïϜŒôÔöÖùÙûÛüÜÿŸÁáÍíÓóÚúÝýÑñßÞþØøŠšŽž ]#si";
  11. $data_checked[$i] = preg_replace($search,"",$data_fichier[$i]);
  12. if(!empty($data_checked[$i])) {
  13.   fwrite($handle, $data_checked[$i]."\n" );
  14. }
  15. }
  16. fclose($handle);


Et donc de ça :

Jojo le rigolo!
Toto
Tata
Titi-hihi
Jojo, le rigolo
Tutu
Ty?ty
"L'analphabète"
Århus


J'obtiens :

Jojo le rigolo
Toto
Tata
Titi-hihi
Jojo le rigolo
Tutu
Tyty
L'analphabète
Århus
bète"
Århus


Je sais pas d'où viennent ces 2 dernières lignes ni comment les virer >_<
Une idée siouplé ?

Reply

Marsh Posté le 13-06-2006 à 15:03:39    

J'ai trouvé la réponse, je la poste si jamais quelqu'un la cherche... Donc pour supprimer les caractères en fin de fichier, il suffisait d'ouvrir le fichier en mode w+ qui remet la taille à 0. Voilà donc mon code au final
 

Code :
  1. $handle=fopen($monfichier,"r" );
  2. $data_checked="";
  3. while (!feof($handle)) {
  4. $data_fichier=fgets($handle,4096);
  5. $search="#[^\-'a-zæÆàÀâÂäÄåÅçÇðÐéÉèÈêÊëËîÎïϜŒôÔöÖùÙûÛüÜÿŸÁáÍíÓóÚúÝýÑñßÞþØøŠšŽž ]#si";
  6. if(preg_match($search,$data_fichier)) {
  7.   $data_checked.= preg_replace($search,"",trim($data_fichier));
  8.   $data_checked.="\n";
  9. }
  10. else {
  11.   $data_checked .= $data_fichier."\n";
  12. }
  13. }
  14. fclose($handle);
  15. $handle=fopen($monfichier,"w+" );
  16. fwrite($handle, $data_checked);
  17. fclose($handle);

Reply

Marsh Posté le 13-06-2006 à 15:32:30    

eiuh je pense a un truc
 

Code :
  1. $search="#[^\-'a-zæÆàÀâÂäÄåÅçÇðÐéÉèÈêÊëËîÎïϜŒôÔöÖùÙûÛüÜÿŸÁáÍíÓóÚúÝýÑñßÞþØøŠšŽž ]#si";
  2. $content = file_get_contents($monfichier);
  3. $data_checked= preg_replace($search,"",$content);
  4. file_put_contents($monfichier, $content);


Ca marche pas ca ? [:petrus75] (verifie la doc pour les fonctions file_get_contents et file_put_contents par contre j'suis pas sur de moi)


---------------
my flick r - Just Tab it !
Reply

Marsh Posté le 13-06-2006 à 21:28:18    

$search = "#[^\w\s'-]#";
 
:s
 
et le "s" ne sert a rien dans tes options de masque :s
le "s" c'est pour faire matcher le caractere jocker "." avec "\n" et "\r" ... or tu n'utilises pas de "." dans ton masque :s tu cofonds "s" et "m" a mon avis :s
 
Normalement "-" dans une classe [] se met a la fin de la classe :s


Message édité par afbilou le 13-06-2006 à 21:31:03
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed