Réécrire une ligne dans un fichier txt

Avatar du membre
Eléphanteau du PHP | 30 Messages

19 janv. 2019, 23:18

Bonjour,
Je cherche à remplacer une ligne dans un fichier txt.

Ledit fichier txt se présente avec un contenu qui apparait comme tel
pseudo;date;score;scorebis;ip_chiffree;

J'ai une condition qui vérifie que les données envoyées correspondent au pseudo et à l'ip
si l'utilisateur envoie une ligne qui correspond à son ip + pseudo, le but est de remplacer la ligne avec des données renouvelées

J'ai tenté ce script, mais il ne fonctionne pas (identifie la ligne à remplacer mais ne remplace rien dans le fichier texte.txt :
//nouvelles donnees
$nom = 'Polipol';
$date = '2018-02-23';
$points = 345;
$nbmots = 34;
$ipcryptee = '4b84b15bff6ee5796152495a230e45e3d7e947d9';

// Ce qui existe
// fichier texte.txt contient :
// poil;2018-12-12;23;10;4b84b15bff6ee5796152495a230e45e3d7e947d9;
// pipi;2018-12-19;123;82;4b84b15bff6ee3216152495a230e45e3d7e946ec;

// Ce qu'on cherche
$search = 'poil';
$ipcryptee_check = '4b84b15bff6ee5796152495a230e45e3d7e947d9';

// Ce qu'on remplace
$txt = "$nom;$date;$points;$nbmots;$ipcryptee;\n";

// Fichier
$myfile = fopen("texte.txt", "a+") or die("Unable to open file!");

$lines = file('texte.txt');
foreach($lines as $line)
{
  // Vérifier si le fichier contient ce que je cherche 
  if(strpos($line, $search) !== false && strpos($line,$ipcryptee_check) !== false) {
    echo $line;

    // si c'est le cas, remplacer la ligne par le nouveau contenu
    $repl = substr_replace($line, $txt, 0);
    fwrite($myfile, $repl);
    fclose($myfile);
  }
}
Pourriez-vous me donner un coup de pouce pour le rendre fonctionnel, svp?
Par avance, un tout grand merci !
Modifié en dernier par Reka le 20 janv. 2019, 01:17, modifié 1 fois.

Mammouth du PHP | 2703 Messages

19 janv. 2019, 23:30

$myfile est ouvert à un moment dans du code que l'on a pas ?

Avatar du membre
Eléphanteau du PHP | 30 Messages

20 janv. 2019, 01:18

$myfile est ouvert à un moment dans du code que l'on a pas ?
Maintenant, oui :lol:

(Mais ça ne marche quand même pas)

Avatar du membre
Eléphanteau du PHP | 30 Messages

21 janv. 2019, 17:11

Personne pour me donner une piste ? svp ?

Mammouth du PHP | 1967 Messages

22 janv. 2019, 01:36

Il faut que ton pointeur dans $myfile correspondent à la ligne à modifié, et même comme ça je pense que tu ne fera qu'ajouter une ligne.

le plus simple est de récupérer toutes les lignes, de trouver la bonne de la modifier et ensuite remettre toutes les lignes dans le fichier en écrasant la version précédente.
Je pense pas qu'il existe l'inverse de file() en php mais un file_put_contents() avec un implode() fera l'affaire
Spols
pour les fan de rubik's cube ou pour les curieux ==> le portail francophone du rubik's cube

Avatar du membre
Eléphanteau du PHP | 30 Messages

26 janv. 2019, 14:10

Merci Spols, désolée pour le délai de réponse.
Je comprends en théorie l'idée, je vais essayer de la mettre en pratique.