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

Quelles différences entre fread() et fgets() ? - PHP - Programmation

Marsh Posté le 16-01-2004 à 00:51:05    

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 :)

Reply

Marsh Posté le 16-01-2004 à 00:51:05   

Reply

Marsh Posté le 17-01-2004 à 02:48:55    

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 !
Reply

Marsh Posté le 17-01-2004 à 09:44:34    

RTFM

Reply

Marsh Posté le 17-01-2004 à 12:11:36    

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:

Reply

Marsh Posté le 17-01-2004 à 12:17:19    

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

Reply

Marsh Posté le 17-01-2004 à 12:47:57    

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
Reply

Marsh Posté le 17-01-2004 à 12:49:27    

ok, on lit pas pareil

Reply

Marsh Posté le 17-01-2004 à 12:57:18    

RTFM stat

Reply

Marsh Posté le 17-01-2004 à 20:16:43    

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.

Reply

Marsh Posté le 17-01-2004 à 20:19:04    

taz a écrit :

RTFM stat

[:quoted]

Reply

Marsh Posté le 17-01-2004 à 20:19:04   

Reply

Marsh Posté le 17-01-2004 à 20:44:52    

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 ;)

Reply

Marsh Posté le 17-01-2004 à 20:47:10    

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

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed