[PHP] lecture dans un fichier txt

Résolu/Fermé
Shenko90 - 1 juin 2010 à 16:15
 Shenko90 - 1 juin 2010 à 17:07
Bonjour, merci de prendre un peu de temps pour me lire et me répondre.

Je voudrai récupérer ce qui est écrit à la deuxième ligne d'un fichier .txt mais je n'y arrive pas. Voilà mon code :

$fichier=fopen "monfichier.txt", "r+"); //ouverture du fichier
fseek($fichier, 255); //positionnement du curseur au début de la 2° ligne
$texte=fgets($fichier); //lecture de la 2° ligne et affectation de la variable

Est-ce que ça vient du curseur mal positionné ou est-ce tout à fait autre chose ?

Je sais qu'il est plus facile de lire un fichier avec la fonction file() mais j'ai également besoin d'écrire dans le fichier (il est ouvert en "r+") et je n'ai pas trouvé comment faire avec file(). Si quelqu'un a la solution je suis preneur.

Shenko90
A voir également:

1 réponse

jbnor Messages postés 26 Date d'inscription vendredi 14 mai 2010 Statut Membre Dernière intervention 13 mai 2011 4
1 juin 2010 à 16:19
Moi ce que je fais dans ces cas là, c'est lire la premiere ligne pour rien. Je sais pas si ça se fait, peut être que les puristes vont râler mais en tout cas ça marche :

fgets($fichier,longueur_de_ligne);
$texte=fgets($fichier,longueur_de_ligne);


D'ailleurs, il me semble que fgets necessite un deuxieme parametre qui est la longeur de la ligne. L'erreur vient peut être de là.
0
Merci de l'astuce, je n'y avait pas pensé. Je vais essayé d'utiliser ça.

Pour ce qui est de fgets(), le deuxième paramètre n'est pas obligatoire, la lecture s'arrête également si il y a une nouvelle ligne ou un EOF. J'avais d'ailleurs essayer en mettant une longueur mais j'avais le même résultat.

Shenko90
0
Ça marche, merci.

Je vais me servir de ça pour l'instant, mais quelqu'un aurait-il une solution plus "réglementaire" ?
0
jbnor Messages postés 26 Date d'inscription vendredi 14 mai 2010 Statut Membre Dernière intervention 13 mai 2011 4
1 juin 2010 à 16:41
http://www.php.net/manual/fr/function.fseek.php

Il est ici indiqué que "fseek() ne peut pas être utilisé sur les pointeurs retournés par fopen() s'ils sont au format HTTP ou FTP. fseek() donne également des résultats indéfinis pour les flux "append-only" (ouvert avec l'option "a"). "

Peut etre une occasion de se mettre à file(), parce que ma méthode est bien sauf quand il faut se deplacer à la 500e ligne, il faut alors mettre une boucle de lectures inutiles.
0
En fait c'est bon, j'ai résolu le problème :

j'avais lu quelque part (je ne sais plus où par contre) qu'une ligne comportait 256 caractères et qu'il fallait donc mettre fseek($fichier, 255); pour passer à la deuxième ligne mais c'est vrai que si les lignes sont complètement rempli. Le pointeur passe à la ligne en même temps que le texte et il se positionnait donc après la fin de mon fichier et ne renvoyait aucun texte.

Merci de ton aide, je vais mettre que le sujet est résolu.

Shenko90
0