Remplacer une ligne par une autre dans un fichier texte

Remplacer une ligne par une autre dans un fichier texte - PHP - Programmation

Marsh Posté le 31-01-2005 à 18:38:24    

: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
Reply

Marsh Posté le 31-01-2005 à 18:38:24   

Reply

Marsh Posté le 31-01-2005 à 19:57:37    

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

Reply

Marsh Posté le 31-01-2005 à 20:03:54    

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.

Reply

Marsh Posté le 31-01-2005 à 20:22:06    

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
Reply

Sujets relatifs:

Leave a Replay

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