Lire et écrire dans un fichier txt?
4 messages
• Page 1 sur 1
-

tryan - WRInaute passionné

- Messages: 2355
- Inscription: 20 Fév 2005
Lire et écrire dans un fichier txt?
Bonjour,
Je me pose quelques questions sur la fonction fopen() et compagnie !
Pourquoi ne peut on pas écrire puis lire un fichier .txt si on ne ferme pas la connexion juste après l'écriture?
Un exemple qui ne fonctionne pas :
Un exemple qui fonctionne :
A quoi sert exactement le chiffre "1024" dans la fonction fgets() ?
Exemple :
J'ai crue comprendre que ce chiffre permet d'afficher le nombre de lettres ... En supposant que mon texte contient 2000 lettres et que j'indique par exemple "150" dans fgets(), ça fonctionne.
Par contre, si j'indique "2048", seul la première ligne du fichier est lut malgré qu'elle contient moins de 2048 caractères ... Pourquoi la fonction ne passe pas à la ligne suivante pour afficher le reste?
Autre question ^^ :
J'ai crus comprendre que le chiffre "1024" indique la première ligne ... Quand est il vraiment ? Quelle chiffre est ton censé mettre si on lit qu'une seule ligne ou l'intégralité d'un fichier ? Je vois du 1024 ou du 4096 dans les tutos. que je trouve ??
Dernière question :
Lors de la lecture intégrale d'un fichier et dans la boucle "while", doit on utiliser :
ou
???
Les 2 affichent le même résultat et je ne vois pas ou est la différence ??
Merci
Je me pose quelques questions sur la fonction fopen() et compagnie !
Pourquoi ne peut on pas écrire puis lire un fichier .txt si on ne ferme pas la connexion juste après l'écriture?
Un exemple qui ne fonctionne pas :
- Code: Tout sélectionner
<?php
$fichier_a_ouvrir = fopen ("b.txt", "a+");
//on écrit dans le fichier
fwrite($fichier_a_ouvrir,"Bonjour et bienvenue :)!<br/>");
//on lit tout
while (!feof($fichier_a_ouvrir)) {
$ligne = fgets($fichier_a_ouvrir, 1024);
// le echo ne retourne rien
echo $ligne;
}
fclose ($fichier_a_ouvrir);
?>
Un exemple qui fonctionne :
- Code: Tout sélectionner
<?php
$fichier_a_ouvrir = fopen ("b.txt", "a+");
fwrite($fichier_a_ouvrir,"Bonjour et bienvenue :)!<br/>");
//Ici je ferme puis ré ouvre la connexion pour lire le contenu du fichier
fclose ($fichier_a_ouvrir);
$fichier_a_ouvrir = fopen ("b.txt", "a+");
while (!feof($fichier_a_ouvrir)) {
$ligne = fgets($fichier_a_ouvrir, 1024);
echo $ligne;
}
fclose ($fichier_a_ouvrir);
?>
A quoi sert exactement le chiffre "1024" dans la fonction fgets() ?
Exemple :
- Code: Tout sélectionner
<?php
$fichier_a_ouvrir = fopen ("b.txt", "r");
$contenu_du_fichier = fgets ($fichier_a_ouvrir, 1024);
fclose ($fichier_a_ouvrir);
echo $contenu_du_fichier;
?>
J'ai crue comprendre que ce chiffre permet d'afficher le nombre de lettres ... En supposant que mon texte contient 2000 lettres et que j'indique par exemple "150" dans fgets(), ça fonctionne.
Par contre, si j'indique "2048", seul la première ligne du fichier est lut malgré qu'elle contient moins de 2048 caractères ... Pourquoi la fonction ne passe pas à la ligne suivante pour afficher le reste?
Autre question ^^ :
J'ai crus comprendre que le chiffre "1024" indique la première ligne ... Quand est il vraiment ? Quelle chiffre est ton censé mettre si on lit qu'une seule ligne ou l'intégralité d'un fichier ? Je vois du 1024 ou du 4096 dans les tutos. que je trouve ??
Dernière question :
Lors de la lecture intégrale d'un fichier et dans la boucle "while", doit on utiliser :
- Code: Tout sélectionner
$ligne = fgets($fichier_a_ouvrir, 1024);
ou
- Code: Tout sélectionner
$ligne = fread($fichier_a_ouvrir, 1024);
???
Les 2 affichent le même résultat et je ne vois pas ou est la différence ??
Merci
- NextGeneration
- WRInaute occasionnel

- Messages: 428
- Inscription: 27 Sep 2006
Re: Lire et écrire dans un fichier txt?
fgets($stream, $limit) retourne $limit octets dans le stream $stream jusqu'au prochain symbole EOL (CR/LF ou CR selon ta religion).
En moins abscons, fgets() retourne une seule ligne de ton fichier, avec une limite (pour éviter de saturer la pile si tu lis une ligne de 1 Mo).
C'est pourquoi on utilise souvent:
while($line = fgets($stream, 1024)) {}
1024 c'est par convention, 1 Ko c'est pratique à travailler.
Si tu utilises PHP > 5.0, je te conseille d'oublier tout ca et d'utiliser 2 fonctions bien plus pratiques:
file_get_contents($filename) et file_put_contents($filename, $contents).
Cf la doc php pour les arguments supplémentaires (contextes de stream, flags de manipulation des EOL).
En moins abscons, fgets() retourne une seule ligne de ton fichier, avec une limite (pour éviter de saturer la pile si tu lis une ligne de 1 Mo).
C'est pourquoi on utilise souvent:
while($line = fgets($stream, 1024)) {}
1024 c'est par convention, 1 Ko c'est pratique à travailler.
Si tu utilises PHP > 5.0, je te conseille d'oublier tout ca et d'utiliser 2 fonctions bien plus pratiques:
file_get_contents($filename) et file_put_contents($filename, $contents).
Cf la doc php pour les arguments supplémentaires (contextes de stream, flags de manipulation des EOL).
- jcaron
- WRInaute accro

- Messages: 2685
- Inscription: 13 Fév 2004
Re: Lire et écrire dans un fichier txt?
Quand tu accèdes à un fichier, il y a un "pointeur de fichier" qui indique où on lit/écrit. Dans ton premier exemple, tu commences par écrire, donc le pointeur se déplace et est toujours à la fin de ce que tu viens d'écrire. Ensuite, tu lis, mais forcément, tu es à la fin du fichier, donc il n'y a rien à lire. Il faut utiliser fseek pour modifier le pointeur et le ramener au début par exemple (ceci dit, l'intérêt de relire ce que tu viens d'écrire...).
Note aussi que tu utilises fopen en mode "a+" qui signifie qu'à la base, tu ajoutes à la fin de ton fichier.
fgets lit toujours une "ligne", avec une limite éventuelle sur la taille de cette ligne. Si tu veux lire exactement X octets, utilise fread (note qu'évidemment fread peut te renvoyer moins que X si tu es à la fin du fichier par exemple).
Si tu fais une lecture intégrale et que tu te moques de la structure du fichier (i.e. tu n'as pas besoin de le découper en lignes), le résultat est effectivement le même dans les deux cas, mais sur un fichier texte par exemple (i.e. qui contient des lignes plus courtes que la taille max donnée), ça va faire plus d'appels avec fgets qu'avec fread.
Il est temps d'aller lire la doc
Jacques.
Note aussi que tu utilises fopen en mode "a+" qui signifie qu'à la base, tu ajoutes à la fin de ton fichier.
fgets lit toujours une "ligne", avec une limite éventuelle sur la taille de cette ligne. Si tu veux lire exactement X octets, utilise fread (note qu'évidemment fread peut te renvoyer moins que X si tu es à la fin du fichier par exemple).
Si tu fais une lecture intégrale et que tu te moques de la structure du fichier (i.e. tu n'as pas besoin de le découper en lignes), le résultat est effectivement le même dans les deux cas, mais sur un fichier texte par exemple (i.e. qui contient des lignes plus courtes que la taille max donnée), ça va faire plus d'appels avec fgets qu'avec fread.
Il est temps d'aller lire la doc
Jacques.
4 messages
• Page 1 sur 1
Lectures recommandées sur ce thème :
- [réglé] Lire et écrire un fichier XML en PHP
- [Résolu] Lire/ecrire cookie sur un autre site
- Soucis pour écrire un fichier
- Ecrire un fichier CSV en php
- Ouvrir et écrire dans un fichier texte
- lire un fichier ioncube
- Ecrire un fichier sitemaps pour Google News
- lire fichier XML en javascript
- Lire un fichier .wav dasn Flash
- [flash] lire et traiter un fichier xml
- Article sur le fichier .htaccess - 11-01-2003
- Déclarer son fichier sitemap dans le fichier robots.txt - 16-04-2007
- Ecrire un sitemap pour Google News - 25-11-2006
- Sortie de GoogleStats v2.01 - 02-03-2003
- Suite de l'article sur le fichier .htaccess : l'URL rewriting - 16-01-2003
- Sitemaps : protocole commun pour Google, Yahoo et Live Search - 16-11-2006
- Comment gérer simplement les sitemaps de plusieurs sites au même endroit - 28-02-2008
- L'URL Rewriting expliqué aux débutants - 04-08-2008
Qui est en ligne
Utilisateurs parcourant ce forum: Aucun utilisateur enregistré et 1 invité
