Metre à jour un fichier

Metre à jour un fichier - PHP - Programmation

Marsh Posté le 06-11-2004 à 20:22:12    

Salut,
j'ai juste un tout petit soucis.
 
J'écrit sur des fichiers avec fopen.
Je désire les changer à un certain endroit parfois.
J'utilise donc la fonction fseek pour remonter a cet endroit, et j'ouvre mon fichier en mode r+.
 
Mon problème est qu'alors c'est comme si j'avais appuyé sur la touche insert de mon clavier. Je ne rajoute pas du texte mais je remplace ce qui existe deja ( à partir de l'emplacement choisi par fseek).
 
j'ai essayé en a,a+, mais alors le fseek ne fonctionne plus.
 
Merci pour l'aide,

Reply

Marsh Posté le 06-11-2004 à 20:22:12   

Reply

Marsh Posté le 06-11-2004 à 20:29:27    

j'suis pas sur que ca soit possible d'inserer du texte comme ca au milieu d'un fichier.
Il faut peut etre passé par un fichier temporaire:
tu recopies tout jusqu'a la position voulue, tu ecris et tu finis de recopier...

Reply

Marsh Posté le 06-11-2004 à 20:41:09    

Oh, c'est peut etre pour cela que je ne trouvais pas depuis jeudi comment faire.
 
Ca parait assez lourd d'utiliser 2 fichiers pour juste ca, je pensais que c'était faisable. Mais si tu me dis que non alors je vais faire comme tu me dis, merci.

Reply

Marsh Posté le 06-11-2004 à 22:05:31    

Salut,
Je v te donner quelques piste :
 
1: ouvrir le fichier texte et obtenir une array:

Code :
  1. $record_array = file($path_text_file);


 
2: tu modifie ou ajoute ou efface un record dans $record_array.
 
3: tu "transforme" ta nouvelle array en text file :

Code :
  1. $file = fopen($path_text_file, "w+" );
  2. for($element=0;$element<count($record_array) ;$element++)
  3. {
  4.     $record = trim($record_array[$element]);
  5.             fwrite($file, $record . "\n" );
  6.     chmod("$textfilename",777);
  7. }
  8. fclose($file);


 
4 : dans le php manual jette un coup d'oeil sur les fonction consernant :
-les fichiers : fopen(), fwrite(), fclose()...
-les arrays : array_search() ...

Reply

Marsh Posté le 06-11-2004 à 22:40:48    

Merci c'est gentil, mais je me suis débrouillé avec

Code :
  1. if ($handle = fopen($fichier, 'r+'))
  2.   {
  3.    fseek($handle,2862); //2862
  4.    $test = fgets($handle);
  5.    $test = trim ($test);
  6.    if ($test != $var )
  7.    {
  8.     fseek($handle,0);
  9.     $test = fread($handle,9);
  10.     $tmp = substr($test,0,2862);
  11.     $test = $test . $page;
  12.     $test = $test . substr($test,2863);
  13.     fseek($handle,0);
  14.     fwrite ($handle,$test);
  15.    }
  16.    fclose($handle);
  17.   }


 
A part que le fread ne fonctionne pas bien, je vais probablement mettre un file_get_contents()a la place de quelques trucs.
 
Merci bien
 
edit : le code n'est pas tout à fait bon, je le sais, c'est juste pour la forme donc ne vous embetez pas à tenter de le corriger :)


Message édité par gee le 06-11-2004 à 22:51:00
Reply

Marsh Posté le 07-11-2004 à 00:40:39    

C'est le bordel la fonction substr j'ai eu l'impression, car parfois si je faisais un length aussi grand que je voulais, il ne me prenait plus rien.
J'ai pas trop compris.
Je m'en suis sorti avec

Code :
  1. if ($test = file_get_contents($fichier))
  2.   {
  3.    $tmp = $test[2899] . $test[2900];
  4.    $tmp2 = $champ3 ." ";
  5.    $tmp2 = substr($tmp2,0,2);
  6.    if ($tmp != $tmp2)
  7.    {
  8.     echo 'toto';
  9.     $tmp = substr($test,0,2854) . $page . substr($test,2859);
  10.     if ($handle = fopen($fichier, 'w'))
  11.     {
  12.      fwrite($handle,$tmp);
  13.      fclose($handle);
  14.     }
  15.    }
  16.   }

Reply

Sujets relatifs:

Leave a Replay

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