Récupérer puis modifier des infos depuis un fichier texte - PHP - Programmation
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)
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à ?
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 ()
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
Marsh Posté le 13-06-2006 à 13:32:42
ah ca marche presque !
J'ai juste quelques scories a la fin, bizarre...
Code :
|
Et donc de ça :
Jojo le rigolo! |
J'obtiens :
Jojo le rigolo |
Je sais pas d'où viennent ces 2 dernières lignes ni comment les virer >_<
Une idée siouplé ?
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 :
|
Marsh Posté le 13-06-2006 à 15:32:30
eiuh je pense a un truc
Code :
|
Ca marche pas ca ? (verifie la doc pour les fonctions file_get_contents et file_put_contents par contre j'suis pas sur de moi)
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
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 !