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

  FORUM HardWare.fr
  Programmation
  PHP

  [PHP] problème d'écriture dans un fichier

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[PHP] problème d'écriture dans un fichier

n°1560139
yoleouf
Posté le 14-05-2007 à 14:57:31  profilanswer
 

Salut à tous,
 
J'ai un petit problème...
J'ai créé un site multilingue qui inclus des fichiers de langues selon celle choisi (lang_fr.php, lang_en.php...) et chaque fichier contient des variables PHP.
Jusqu'ici tout va bien.  
J'ai créé un espace administration qui permet à l'admin de modifier les valeurs de ces constantes (pour la traduction par exemple).
Pour cela j'utilise une grosse classe "fichier"...
 
Le code de ma fonction de modification est le suivant :

Code :
  1. function modifier_ligne_numero($num, $val){
  2.  $fichier = fopen($this->chemin, "r+" ); // Ouverture du fichier en lecture/écriture
  3.  $string = "";
  4.  $txt = "";
  5.  $tmp=$this->lit_ligne($num);   // Texte avant
  6.  $delta = $this->compte_nb_caractere($tmp) - $this->compte_nb_caractere($val);
  7.  for ($i = 1; $i<$num; $i++) // On se place directement à la ligne souhaitée
  8.   $string .= fgets($fichier);
  9.  $constante = $this->donne_constante(fgets($fichier));
  10.  $string .= "define (\"" . $constante . "\", \"" . $val . "\" );\n";
  11.  while (!feof($fichier))
  12.   $string .= fgets($fichier);
  13.  fseek($fichier, 0);  // va au début du fichier
  14.  fputs($fichier, $string);
  15.  if ($delta > 0){
  16.   for ($i=0; $i<=$delta+1; $i++)
  17.    fputs($fichier, "" );
  18.  }
  19.  fclose($fichier);
  20. }


 
Lorsque l'on remplace la valeur d'une constante par une autre plus importante => pas de problèmes
Par contre si ce que l'on remplace contient moins de caractères, à la fin de mon fichier, il y a les anciens caractères (qui ne s'effacent pas)... :(
Pour éviter cela, je rajoute des espaces à la fin de mon fichier.
 
Le fichier PHP pose alors problème, mon index (qui inclut les fichiers langues) n'aime pas trop les espaces :
 

Code :
  1. Warning: Cannot modify header information - headers already sent by (output started at ***\LANGUES\lang_fr.php:115) in ***\index.php on line 22
  2. ...


 
 
Aidez-moi svp...


---------------
Achats-Ventes -- feedback
mood
Publicité
Posté le 14-05-2007 à 14:57:31  profilanswer
 

n°1560250
cgo2
Dum spiro spero
Posté le 14-05-2007 à 16:26:56  profilanswer
 

Je vois deux solutions :
- ne ferme pas la balise php (?> ) à la fin de ton fichier.
- utilise un algo qui consiste à lire le fichier, faire les modifications en mémoire, et le réécrire entièrement.


---------------
When it's from Finland it's good.  - Mon blog
n°1560385
omega2
Posté le 14-05-2007 à 18:58:48  profilanswer
 

Si j'ai bien compris ton code, tu lis le fichier en entier, une fois que tu l'as lu, tu le modifie. Puis tu te remets en début de fichier pour écraser ce qui était écrit sans faire gaffe au texte qui pouvait y avoir avant.
 
Solution 1 : Fermer le fichier pour le rouvrir en mode "remplacement par un fichier vide" (mode W+ de mémoire) Vu que tu te fiches de son contenu précédant, autant repartir sur un fichier vide. :)
 
Solution 2 : utiliser file_get_contents et file_put_contents qui te permettront de lire le fichier en une fois sans boucle et de le réécrire en une fois sans avoir à te soucier de son contenu précédant.

n°1560509
yoleouf
Posté le 15-05-2007 à 10:44:04  profilanswer
 

Merci beaucoup de vos réponses, je ne connaissait pas le mode "w+" : c'est super pratique !!
Ça marche niquel, merci encore.
 
Je vous donne le bout de code qui marche :
 

Code :
  1. function modifier_ligne_numero($num, $val){
  2.  $fichier = fopen($this->chemin, "r" ); // Ouverture du fichier en lecture/écriture
  3.  $string = "";
  4.  $txt = "";
  5.  $tmp=$this->lit_ligne($num);   // Texte avant
  6.  for ($i = 1; $i<$num; $i++) // On se place directement à la ligne souhaitée
  7.   $string .= fgets($fichier);
  8.  $constante = $this->donne_constante(fgets($fichier));
  9.  $string .= "define (\"" . $constante . "\", \"" . $val . "\" );\n";
  10.  while (!feof($fichier))
  11.   $string .= fgets($fichier);
  12.  fclose($fichier);
  13.         // Ce qui change :
  14.  $fichier = fopen($this->chemin, "w+" );
  15.  fputs($fichier, $string);
  16.                 fclose($fichier);
  17.         //-------------
  18. }


Message édité par yoleouf le 15-05-2007 à 10:53:14

---------------
Achats-Ventes -- feedback
n°1560830
supermofo
Hello World !
Posté le 15-05-2007 à 18:43:22  profilanswer
 

Merci t trop sympa !


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

  [PHP] problème d'écriture dans un fichier

 

Sujets relatifs
probleme avec xml_load_stringProblème de regexp en JS
Code VBA ouverture fichier!!Problème formulaire JS
probleme javascriptecrire les log erreur dans un fichier text
Problème de construction en CSSProbleme programmation en C jeu de la vie
[PHP] Recherche Freelance[PHP] problème lecture / écriture dans un fichier
Plus de sujets relatifs à : [PHP] problème d'écriture dans un fichier


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