[RESOLU] Supprimer premiere ligne d'un fichier txt

Eléphanteau du PHP | 47 Messages

21 juil. 2013, 15:44

Bonjour,
J'utilise un fichier texte pour stocker les scores d'un jeu en php.
Exemple :
Jerome : 8
Sophie : 3
David : 9
Julien : 6

Pour éviter que ce fichier ne devienne trop lourd, j'aimerais supprimer la première ligne du fichier texte quand le nombre de lignes dépasse 10.
Comment fait-on ?

Si possible sans utiliser la méthode du recopiage (car risque d'effacement intégral en cas de lenteur du serveur).

Eléphant du PHP | 229 Messages

22 juil. 2013, 09:42

Bonjour,
tu crées un nouveau fichier et tu le renomme après avoir effacé l'ancien.
Mais je trouve que le recopiage par une itération est moins "lourd", non ?
Bonne journée.

Eléphant du PHP | 190 Messages

22 juil. 2013, 17:53

Salut,

j'avais déjà longuement cherché pour supprimer une ligne X d'un fichier, mais visiblement c'est impossible sans réécrire le fichier.

Pour moi, la meilleure solution reste:
$file = file($filename);
unset($file[0]);
file_put_contents($filename, $file);
Ou alors, passer à mysql :)

;)

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

22 juil. 2013, 22:07

ou simplement sqlite si cela est suffisant ;)


@+
Il en faut peu pour être heureux ......

Eléphanteau du PHP | 47 Messages

23 juil. 2013, 00:19

Salut,

j'avais déjà longuement cherché pour supprimer une ligne X d'un fichier, mais visiblement c'est impossible sans réécrire le fichier.

Pour moi, la meilleure solution reste:
$file = file($filename);
unset($file[0]);
file_put_contents($filename, $file);
;)
Intéressant. Tu peux mettre ton script complet, stp ?

Eléphant du PHP | 190 Messages

23 juil. 2013, 12:14

Complet c'est à dire ?

Cela ne fonctionne pas tel quel ?
$filename="fichier.txt"; // ton fichier
$file = file($filename); // la fonction file, lit ton fichier et met chaque ligne de celui ci dans un tableau
unset($file[0]); // supprime la première ligne du tableau (qui correspond à la première ligne de ton fichier)
file_put_contents($filename, $file); // réinsère les lignes dans le fichier, ça écrase l'ancien fichier. 
Après test chez moi fonctionne parfaitement. ;)

Eléphanteau du PHP | 47 Messages

23 juil. 2013, 17:06

En effet, ça marche. Je pensais que c'est plus lourd que ça.
J'ai ajouté la condition des 10 lignes :
<?
$filename="test.txt"; // nom du fichier
$file = file($filename); // la fonction file, lit le fichier et met chaque ligne de celui-ci dans un tableau

$nbligne = count($file); // compter nb lignes
if($nbligne > 10)
{
unset($file[0]); // supprime la première ligne si le nb de lignes est supérieur à 10
}

file_put_contents($filename, $file); // réinsère les lignes dans le fichier, ça écrase l'ancien fichier.
?>
Pour finir, je ne dois pas fermer le fichier txt avec fclose ?

ViPHP
AB
ViPHP | 5818 Messages

23 juil. 2013, 17:11

Pour finir, je ne dois pas fermer le fichier txt avec fclose ?
Nan, avec les fonctions comme file, file_put_contents, file_get_contents, etc. pas besoin de spécifier que l'on ouvre ou que l'on ferme le fichier, cela se fait automatiquement.