Crée un text en php et allé a la ligne

Résolu
Bonjour,
voila mon problème mon script marche bien, j'arrive a allé a la troisième ligne comme vous pouvez le voir sur le script ci-dessous c'est mon but, mais je voudrai allé a la fin de la ligne pour ne pas écrasé les donnés qui s'y trouve
ex:
1ligne
2ligne
3ligne (ne pas écrire ici )essfdsfgfsg(je voudrai écrire ici)

pourrez vous m'aidez car je patauge depuis des heures :(

Merci d'avance, voici mon script :

<?php

$monfichier = fopen('teste.txt', 'r+');

$ligne = fgets($monfichier);
$ligne = fgets($monfichier);
$ligne = fgets($monfichier);

fputs($monfichier, ($_POST['nom']));

fclose($monfichier);
?>

6 réponses

Résumé de la discussion

Modifier uniquement la fin d'une ligne précise dans un fichier texte via PHP sans écraser les données des autres lignes constitue la problématique centrale discutée. Des solutions variées émergent, notamment la réécriture via un fichier temporaire: lire chaque ligne, modifier la troisième selon $_POST et écrire les autres intactes, puis remplacer l'ancien fichier. D'autres propositions évoquent l'utilisation de fseek ou rewind pour reprendre au bon endroit, ou l'emploi de fputs sur une ligne modifiée suivie d'un renommage du fichier temporaire. Des échanges notent également qu'une erreur fréquente est l'utilisation d'une fonction inexistante (puts) au lieu de fputs et que la création d'un fichier temporaire est souvent recommandée.

Bobot (l’IA à votre service)
  1. ajouter fseek($monfichier,0,SEEK_END); avant le fputs te convient-il?
    0
    1. Si tu veux juste mettre $_POST['nom'] à la fin du fichier il suffit de faire

      $monfichier = fopen('teste.txt', 'a');
      fputs($monfichier, $_POST['nom']);
      0
      1. je vais tester tout de suite, Leviathan49 le problème c'est que je ne veut pas que se soit a la fin du texte il y à des ligne après environ 15 lign ( programmation bat ) donc je vise la fin de la troisième ligne pour compléter mon bat
        0
        1. auquel cas ma solution ne marchera pas non plus. en fait je n'arrive pas à voir ou est le problème?
          s'il s'agit de creer un retour à la ligne, le couple \r\n suffira.
          0
        2. non justement je ne veut pas allé a la ligne mais complété la ligne justement

          imaginon

          ligne 1 = un petit mouton rouge
          ligne 2 = un petit mouton bleue
          ligne 3 = un petit mouton (la je v mettre mon texte )
          ligne 4 = un petit mouton orange
          ....

          tu voi se que je v dire si je vai a la ligne sa remplasera la ligne 4 , et je ne pe pas crer la lign 3
          complète car c'est du langage bat, donc il faut que ce langage soi déjà écrie
          0
      2. fseek($monfichier,0,SEEK_END); a quoi correspond le 0 ?
        0
        1. Ah, une ligne précise... Je propose alors :

          $monfichier = fopen('t.txt', 'r+');

          $ligne = fgets($monfichier);
          $ligne = fgets($monfichier);
          $ligne = fgets($monfichier);

          $var = trim($ligne); // recupèrer la troisième ligne sans saut de ligne
          rewind($monfichier); // reviens au début du fichier

          $ligne = fgets($monfichier);
          $ligne = fgets($monfichier);
          fputs($monfichier, $var."test");

          fclose($monfichier);
          0
          1. oui, mais sa supprime le début de la ligne en gros je veut que mon curseur soi a la fin de la troisième ligne
            0
        2. Oui, après reflexion cette solution risque de ne pas marcher et d'ecraser les lignes du dessous...

          Solution de facilité :

          $monfichier =file('t.txt');   
          $monfichier2 = fopen('t2.txt', 'w');  
          
          $i=0;  
           foreach($monfichier as $line)  
          {  
             $i++;  
             if($i==3)  
             {  
                fputs($monfichier2,trim($line)."test\n");  // trim pour virer le retour à la ligne 
             }  
             else  
             {  
                fputs($monfichier2,$line);  
             }  
          }  
          fclose($monfichier2);  
          
          rename('t2.txt','t.txt');  
          
          


          J'ai testé et ça met bien test a la fin de la troisième ligne sans supprimer le reste.
          -1
          1. Je test sa, et te donne mes résulta :)
            0
          2. c'est une avancé, mais sa me mais le mot a la fin de toute les ligne en grop j'ai 15 ligne je veut y mettre sur la fin mais de la troisième ligne
            0
          3. Hum, bizarre, je teste si le numéro de la ligne (stocké dans $i) est bien de 3. C'est étrange...

            Edit: j'ai beau retester je vois pas comment ça peut te rajouter ça à chaque ligne malgré le if :/
            Chez moi c'est donc bien uniquement la troisième ligne qui est modifié.
            0
          4. pas a chaque ligne mais a la fin du texte :)
            0
          5. $monfichier = file('teste.txt');
            $monfichier2 = fopen('t2.txt', 'w');
            $i=0;
            foreach($monfichier as $line)
            {
            $i++;
            if($i==3)
            {
            fputs($monfichier2,trim($line)."test\n"); // trim pour virer le retour à la ligne
            }
            else
            {
            fputs($monfichier2,$line);
            }
            }

            fputs($monfichier2, ($_POST['nom']));
            fclose($monfichier2);
            rename('t2.txt','teste.txt');
            0