Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
961 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  Remplacer une ligne par une autre dans un fichier texte

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Remplacer une ligne par une autre dans un fichier texte

n°967164
lolofora
Posté le 31-01-2005 à 18:38:24  profilanswer
 

:hello:  
J'essaie de faire une page de configuration qui me permettra de modifier un fichier de config où se trouve identifiant mysql et autres variables du site.
 
Mon problème est que quand je remplace une chaines par une autre qui n'est pas de la même taille, l'écriture plante et mange la ligne suivante (problème de pointeur sur le fichier ?)
 
voici mon code :
 

Code :
  1. $nomFic="../Connection/Connection.php";
  2. $Fic=fopen($nomFic,"r+b" );
  3. if($_POST["chemR"]!="" ){
  4. fseek($Fic,0);
  5. $ligne4=fgets($Fic,255);
  6. $ligne4=fgets($Fic,255);
  7. $ligne4=fgets($Fic,255);
  8. $saveL=ftell($Fic);
  9. $ligne4=fgets($Fic,255);
  10. $resC=explode("\"",$ligne4);
  11. $text=str_replace($resC[1],$_POST["chemR"],$ligne4);
  12. $lg=strlen($text);
  13. fseek($Fic,$saveL);
  14. fputs($Fic,$text,$lg);
  15. $error="no";
  16. }


 
NB : Ce code marche si la nouvel chaine est de même taille que l'ancienne
 
çà c'est la chaine que j'essaie de modifier : $repDoc="./ressources/";
qui se trouve à la ligne 4 de mon fichier texte
 
Est-ce que j'ai été clair ?   :heink:


Message édité par lolofora le 31-01-2005 à 18:38:50
mood
Publicité
Posté le 31-01-2005 à 18:38:24  profilanswer
 

n°967243
lolofora
Posté le 31-01-2005 à 19:57:37  profilanswer
 

up!
 
personne n'a rencontré ce problème auparavant?

n°967255
omega2
Posté le 31-01-2005 à 20:03:54  profilanswer
 

Entre nous, c'est normal un fichier texte ou binaire n'est qu'une suite d'octet. Un fichier texte n'est pas une feuille cadrié ou on peut remplacer une ligne de texte par une autre de taille différente sans déborder sur la ligne qu'est en dessous.
Dans ton code, tu lis les 4 premiéres lignes, tu réécrit la quatriéme mais tu ne décales pas tout ce qu'il suit. Du coup quand la nouvelle ligne est plus courte que l'ancienne il te reste un bout de ligne en plus et quand c'est plus court tu manges le début de la ligne suivante.
 
Pour ne plus avoir de probléme, il faudrait soit que :
- tu utilises un fichier temporaire dans lequel tu sauve directements toutes les lignes non modifié et les nouvelles lignes quand il y a un changement puis que tu remplace l'ancien fichier par le nouveau
- tu charges tout le fichier en mémoire (dans un tableau de chaine de caractére par exemple) pour modifier ce qui doit l'être, que tu fasses les modifs puis que tu vides ton fichier et enfin que tu le réécrives intégralement.

n°967269
lolofora
Posté le 31-01-2005 à 20:22:06  profilanswer
 

Merci gars !!
 

Code :
  1. if($_POST["chemR"]!="" ){
  2. $i=0;
  3. fseek($Fic,0);
  4. $i++;$ligne[$i]=fgets($Fic,255);
  5. $i++;$ligne[$i]=fgets($Fic,255);
  6. $i++;$ligne[$i]=fgets($Fic,255);
  7. $ligne4=fgets($Fic,255);
  8. $resC=explode("\"",$ligne4);
  9. $i++;$ligne[$i]=str_replace($resC[1],$_POST["chemR"],$ligne4);
  10. while(!feof($Fic)){
  11. $i++;$ligne[$i]=fgets($Fic,255);
  12. }
  13. fseek($Fic,0);
  14. $j=0;
  15. while($j<$i){
  16. $j++;fputs($Fic,$ligne[$j]);
  17. }
  18. $error="no";
  19. }


 
Pour ceux qui pourrait rencontrer la même difficulté...


Message édité par lolofora le 31-01-2005 à 20:22:26

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  Remplacer une ligne par une autre dans un fichier texte

 

Sujets relatifs
Problème include de fichier [résolu][Excel - VBA] Ouverture Fichier en VBA
inclure un fichier txt a une page web en htmlDEBUTANT aidez moi svp : compiler un fichier .jar ????
Parametres de la ligne de commande ...[htaccess] interdire un fichier dans l'url mais pas dans la page
Ecriture de fichier texte incompletMSQL vers fichier txt
[DOS] Récupération dernière ligne d'un fichier 
Plus de sujets relatifs à : Remplacer une ligne par une autre dans un fichier texte


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR