Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
3030 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  Quelles différences entre fread() et fgets() ?

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Quelles différences entre fread() et fgets() ?

n°613162
-ET-
Eternel newbie
Posté le 16-01-2004 à 00:51:05  profilanswer
 

J'ai besoin pour un MOD phpBB d'évaluer la taille en ko et en pixels de fichiers images à partir d'urls. Pour cela, il existe 2 fct (filesize() & getimagesize() ) qui font ça très bien... mais à condition d'avoir la bonne version php (php 5 pour filesize() et 4.0.5 pour getimagesize() ) ou les images en local.
 
Or comme n'importe qui pourra installer le MOD (y compris avec un php 3.0.9 et +) et que ce sont des urls qui sont utilisées, j'ai besoin de rendre le script utilisable quitte à ne pas employer ces fonctions.
 
Pour cela, la technique semble t-il communément admise est d'utiliser ce genre de script...

Code :
  1. $buffer = '';
  2. if( $fd = @fopen($image_url, "r" ) )
  3. {
  4. while (!feof($fd))
  5. {
  6.  $buffer .= fgets($fd, 1024);
  7. }
  8. fclose($fd);
  9. $files_size = strlen($buffer);
  10. $image = ImageCreateFromString($buffer);
  11. if ( $image )
  12. {
  13.  $files_dim[0] = ImageSX($image);
  14.  $files_dim[1] = ImageSY($image);
  15. } else
  16. {
  17.  ...
  18. }
  19. ImageDestroy($image);
  20. } else
  21. {
  22. ...
  23. }


Alors voilà ma question : là j'ai mis fgets() mais j'aurais mis fread() c'était pareil, quelle différence ?
On voit des exemples avec les 2 :sarcastic:  
 
Un semble lire le binaire et l'autre que depuis peu mais concrètement ?
Lequel vaut-il mieux ?
 
Merci d'avance :)

mood
Publicité
Posté le 16-01-2004 à 00:51:05  profilanswer
 

n°614249
fritzoune
PSN: F_r_i_t_z_007
Posté le 17-01-2004 à 02:48:55  profilanswer
 

fgets --  Renvoie la ligne courante sur laquelle se trouve le pointeur du fichier
 
fread -- Lecture du fichier en mode binaire


---------------
Protégez la Nature ! Message écrit sur des électrons recylcés !
n°614296
Taz
bisounours-codeur
Posté le 17-01-2004 à 09:44:34  profilanswer
 

RTFM

n°614327
-ET-
Eternel newbie
Posté le 17-01-2004 à 12:11:36  profilanswer
 

Merci pour les réponses qui recopient le manuel ou du genre démerde toi mais elles ne me sont pas d'une grande utilité toi... :sarcastic:  
 
Evidement que j'ai lu le manuel (et c'est pas la peine d'en recopier un phrase par fonction), mais c'est précisement par qu'il n'apporte pas d'élément de différenciation important que j'ai posé la question.
Les descritions que fait le manuel de ces 2 fonctions sont TRES similaires et des exemples utilisent indifférement l'une ou l'autre des fonctions pour faire la même chose, c'est à dire l'évaluation de la taille d'un fichier distant (à partir d'une url).
 
Bref, vous avez aucune idée de la réponse à ma question apparement... :sarcastic:

n°614329
Taz
bisounours-codeur
Posté le 17-01-2004 à 12:17:19  profilanswer
 

les premières lignes de chacun des manuels
 

fread -- Lecture du fichier en mode binaire
Description
string fread ( resource handle, int length)
 
fread() lit jusqu'à length octets dans le fichier reférencé par handle. La lecture s'arrête lorsque length octets ont été lus, ou que l'on a atteint la fin du fichier, ou qu'une erreur survient (le premier des trois).


 

fgets --  Renvoie la ligne courante sur laquelle se trouve le pointeur du fichier.
Description
string fgets ( resource handle [, int length])
 
fgets() retourne la chaîne lue jusqu'à la longueur length - 1 octet, ou bien la fin du fichier, ou encore un retour chariot (le premier des trois qui sera rencontré).


 
on doit pas lire pareil

n°614340
-ET-
Eternel newbie
Posté le 17-01-2004 à 12:47:57  profilanswer
 

Et tu vois une grosse différence ?
Elles lisent le contenu d'un fichier, jusqu'à une certaine longueur, si tu avais fait une copie complète du manuel tu verrais que fgets lit aussi le binaire, et les 2 s'arrêtent une fois la longueur atteinte, à la fin du fichier ou sur une erreur.
 
Bref si tu apprenais à lire tu verrais que les différences sont TRES minimes :
- fread ne lit que le binaire.
- fgets s'arrête aussi s'il rencontre un retour chariot.
 
Voilà pourquoi je demande si quelqu'un en sait plus sur l'intérêt concret ou les pb concret que l'on peut rencontrer à utiliser l'une ou l'autre de ces fct, en sachant qu'elles font quasiment la même chose et que de nombreux exemples utilisent l'une ou l'autre quasiment indifferement.


Message édité par -ET- le 17-01-2004 à 12:49:34
n°614343
Taz
bisounours-codeur
Posté le 17-01-2004 à 12:49:27  profilanswer
 

ok, on lit pas pareil

n°614347
Taz
bisounours-codeur
Posté le 17-01-2004 à 12:57:18  profilanswer
 

RTFM stat

n°614520
Tentacle
Posté le 17-01-2004 à 20:16:43  profilanswer
 

Si c'est juste pour avoir la taille du fichier, utilise fread, car si par exemple tu as un fichier de 1024 caractères avec un retour chariot tout les 10 caractères, faudrait faire au moins 10 fois fgets($fd, 1024) alors qu'un fread($fd, 1024) suffira. On utilise fgets principalement pour lire un fichier de texte, genre un dump d'une base de donnée, qui doit être traité ligne par ligne.
 
Sous Windows, n'oublie pas le 'b' lors du fopen (cf doc), et là fread est obligatoire car fgets prend le caractère h00 (il me semble) comme une fin de fichier.

n°614521
Taz
bisounours-codeur
Posté le 17-01-2004 à 20:19:04  profilanswer
 

taz a écrit :

RTFM stat

[:quoted]

mood
Publicité
Posté le 17-01-2004 à 20:19:04  profilanswer
 

n°614537
-ET-
Eternel newbie
Posté le 17-01-2004 à 20:44:52  profilanswer
 

Tentacle > merci beaucoup pour cette réponse. J'en ai eu une autre tout aussi intéressante sur un autre forum, complémentaire à la tienne.
 
Ca change de celle des imbéciles niveau neuneu qu'on croise parfois ;)

n°614538
Taz
bisounours-codeur
Posté le 17-01-2004 à 20:47:10  profilanswer
 

mais tu le fais exprès ou quoi ? t'as regardé ce que faisais stat ?


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  Quelles différences entre fread() et fgets() ?

 

Sujets relatifs
[c] problème de fgets --> bus error core dumped[C] fread -> segmentation fault
Différences entre gcc 2.95 et 3.2 ?[C] pb avec fgets
interet du read par rapport au fread bufferiséProbleme de retour a la ligne avec fgets( )...
Buffer, fichier, read et freadfgets
[programmation systeme] popen et fgets[C/C++] Comparaison de fichier: fread / fgetc
Plus de sujets relatifs à : Quelles différences entre fread() et fgets() ?


Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)