Je viens de passer de la version
4.1.2 a la version 4.3.10 et ca merdouille un peu partout.
parmi les choses incompréhensibles :
- le fread qui n'accepte plus de lire 0 octet. Ce qui veut dire que le code
suivant:
$file = '/tmp/file.txt';
n'est plus valide, puisque si le fichier existe mais ne contrient aucun
caractère, et bien ca plante...
Autant dire que j'ai utilisé ce code au moins 1000 fois... donc, et bien
c'est pas cool.
Ils sont un peu a coté de la plaque sur ce coup la je pense...
De toutes façons, c'est un peu stupide le fread filesize. Il faut faire fread avec un buffer statique (genre 512, 1048 ou 2096).
Marc
De toutes façons, c'est un peu stupide le fread filesize. Il faut faire fread avec un buffer statique (genre 512, 1048 ou 2096).
la notion de "buffer", c'est une notion C, C++, en php, l'allocation est toujours dynamique et completement transparente. Ce qui n'empeche pas dans ce cas precis d'avoir envie de lire 4 octets et pas tout le buffer ; ca peut service dans le cas ou on veut faire de la lecture binaire conjoiintement a unpack().
Sinon, pour la question, il est possible de placer un error-handler et de masquer cette erreur de facon générique.
le retour de fread($fd, 0) retour false et ca devrait le faire, quelque soit les contions d'appel.
Mais tu as raison (Etienne), ce n'est pas logique d'autant que c'est textuellement l'expemple employé dans la doc fread() qui est indiqué ici.
De toutes façons, c'est un peu stupide le fread filesize.
Il faut faire fread avec un buffer statique (genre 512, 1048 ou 2096).
la notion de "buffer", c'est une notion C, C++, en php, l'allocation
est toujours dynamique et completement transparente. Ce qui n'empeche
pas dans ce cas precis d'avoir envie de lire 4 octets et pas tout le
buffer ; ca peut service dans le cas ou on veut faire de la lecture
binaire conjoiintement a unpack().
Sinon, pour la question, il est possible de placer un error-handler
et de masquer cette erreur de facon générique.
le retour de fread($fd, 0) retour false et ca devrait le faire, quelque
soit les contions d'appel.
Mais tu as raison (Etienne), ce n'est pas logique d'autant que c'est
textuellement
l'expemple employé dans la doc fread() qui est indiqué ici.
De toutes façons, c'est un peu stupide le fread filesize. Il faut faire fread avec un buffer statique (genre 512, 1048 ou 2096).
la notion de "buffer", c'est une notion C, C++, en php, l'allocation est toujours dynamique et completement transparente. Ce qui n'empeche pas dans ce cas precis d'avoir envie de lire 4 octets et pas tout le buffer ; ca peut service dans le cas ou on veut faire de la lecture binaire conjoiintement a unpack().
Sinon, pour la question, il est possible de placer un error-handler et de masquer cette erreur de facon générique.
le retour de fread($fd, 0) retour false et ca devrait le faire, quelque soit les contions d'appel.
Mais tu as raison (Etienne), ce n'est pas logique d'autant que c'est textuellement l'expemple employé dans la doc fread() qui est indiqué ici.
m-e-
"loufoque" a écrit dans le message de news: 41e6881e$0$29890$
[...] De toutes façons, c'est un peu stupide le fread filesize. Il faut faire fread avec un buffer statique (genre 512, 1048 ou 2096).
Pourriez-vous nous expliquer pourquoi ?
"loufoque" <mat.wilmots.remove@nospam.wanadoo.fr> a écrit dans
le message de news: 41e6881e$0$29890$636a15ce@news.free.fr...
[...]
De toutes façons, c'est un peu stupide le fread filesize.
Il faut faire fread avec un buffer statique (genre 512, 1048
ou 2096).
"loufoque" a écrit dans le message de news: 41e6881e$0$29890$
[...] De toutes façons, c'est un peu stupide le fread filesize. Il faut faire fread avec un buffer statique (genre 512, 1048 ou 2096).
Pourriez-vous nous expliquer pourquoi ?
Cedric Nilly
De toutes façons, c'est un peu stupide le fread filesize. Il faut faire fread avec un buffer statique (genre 512, 1048 ou 2096).
Pourriez-vous nous expliquer pourquoi ?
Par exemple, pour envoyer un fichier a l'internaute, en lisant le fichier d'un coup le serveur web va devoir le placer entierement en RAM. Pour un fichier de 200 megs, 5 utilisateurs qui telechargent, et vlan 1Go de RAM de pris. D'où le coup de buffer.
De toutes façons, c'est un peu stupide le fread filesize.
Il faut faire fread avec un buffer statique (genre 512, 1048
ou 2096).
Pourriez-vous nous expliquer pourquoi ?
Par exemple, pour envoyer un fichier a l'internaute, en lisant le fichier
d'un coup le serveur web va devoir le placer entierement en RAM.
Pour un fichier de 200 megs, 5 utilisateurs qui telechargent, et vlan 1Go de
RAM de pris.
D'où le coup de buffer.
De toutes façons, c'est un peu stupide le fread filesize. Il faut faire fread avec un buffer statique (genre 512, 1048 ou 2096).
Pourriez-vous nous expliquer pourquoi ?
Par exemple, pour envoyer un fichier a l'internaute, en lisant le fichier d'un coup le serveur web va devoir le placer entierement en RAM. Pour un fichier de 200 megs, 5 utilisateurs qui telechargent, et vlan 1Go de RAM de pris. D'où le coup de buffer.
m-e-
"Cedric Nilly" a écrit dans le message de news: 41e7bc1d$0$29451$ [...]
Par exemple, pour envoyer un fichier a l'internaute, en lisant le fichier d'un coup le serveur web va devoir le placer entierement en RAM. Pour un fichier de 200 megs, 5 utilisateurs qui telechargent, et vlan 1Go de RAM de pris. D'où le coup de buffer.
D'accord. Mais en soit la lecture du fichier en une fois est-elle stupide ? Je comprends que dans le cas que vous indiquez il vaille mieux lire par blocs, mais dans d'autres, on aura besoin de travailler sur une variable contenant l'ensemble du fichier. A ce moment, la récupération par blocs devient inutile, n'est-ce pas ?
"Cedric Nilly" <lordgun@lordgun.com> a écrit dans le message de
news: 41e7bc1d$0$29451$626a14ce@news.free.fr...
[...]
Par exemple, pour envoyer un fichier a l'internaute, en lisant
le fichier
d'un coup le serveur web va devoir le placer entierement en
RAM.
Pour un fichier de 200 megs, 5 utilisateurs qui telechargent,
et vlan 1Go de
RAM de pris.
D'où le coup de buffer.
D'accord. Mais en soit la lecture du fichier en une fois
est-elle stupide ? Je comprends que dans le cas que vous
indiquez il vaille mieux lire par blocs, mais dans d'autres, on
aura besoin de travailler sur une variable contenant l'ensemble
du fichier. A ce moment, la récupération par blocs devient
inutile, n'est-ce pas ?
"Cedric Nilly" a écrit dans le message de news: 41e7bc1d$0$29451$ [...]
Par exemple, pour envoyer un fichier a l'internaute, en lisant le fichier d'un coup le serveur web va devoir le placer entierement en RAM. Pour un fichier de 200 megs, 5 utilisateurs qui telechargent, et vlan 1Go de RAM de pris. D'où le coup de buffer.
D'accord. Mais en soit la lecture du fichier en une fois est-elle stupide ? Je comprends que dans le cas que vous indiquez il vaille mieux lire par blocs, mais dans d'autres, on aura besoin de travailler sur une variable contenant l'ensemble du fichier. A ce moment, la récupération par blocs devient inutile, n'est-ce pas ?
Marc
Par exemple, pour envoyer un fichier a l'internaute, en lisant le fichier d'un coup le serveur web va devoir le placer entierement en RAM. Pour un fichier de 200 megs, 5 utilisateurs qui telechargent, et vlan 1Go de RAM de pris. D'où le coup de buffer.
dans ce cas, il s'agit plus de flux (facon pipe Unix) que de buffer.
Par exemple, pour envoyer un fichier a l'internaute, en lisant le fichier
d'un coup le serveur web va devoir le placer entierement en RAM.
Pour un fichier de 200 megs, 5 utilisateurs qui telechargent, et vlan 1Go de
RAM de pris.
D'où le coup de buffer.
dans ce cas, il s'agit plus de flux (facon pipe Unix) que de buffer.
Par exemple, pour envoyer un fichier a l'internaute, en lisant le fichier d'un coup le serveur web va devoir le placer entierement en RAM. Pour un fichier de 200 megs, 5 utilisateurs qui telechargent, et vlan 1Go de RAM de pris. D'où le coup de buffer.
dans ce cas, il s'agit plus de flux (facon pipe Unix) que de buffer.
Etienne SOBOLE
Mais tu as raison (Etienne), ce n'est pas logique d'autant que c'est textuellement l'expemple employé dans la doc fread() qui est indiqué ici.
Surtout qu'on se demande en quoi ca derange de retourner une chaine vide... ce qui est le comportement logiqu auquel on peut s'attendre
cette modification a eu lieu dans la version 4.3.10 Fixed bug #26752 (Silent unterminated loop when length parameter for fgets(), fread() and fgetss() is 0). (Ilia)
Mais bon il y a un monde entre corriger un probleme de boucle silencieuse (mais qu'est ce que ca peut bien etre ;)) et perdre de façon importante la compatibilté... j'ajouterai SANS RAISON...
Enfin bon. c'est la vie.
foreach($tableau AS $res) a aussi disparu semble t-il. mais la ca doit dater d'une beaucoup plus ancienne version du PHP.
Etienne
Mais tu as raison (Etienne), ce n'est pas logique d'autant que c'est
textuellement
l'expemple employé dans la doc fread() qui est indiqué ici.
Surtout qu'on se demande en quoi ca derange de retourner une chaine vide...
ce qui est le comportement logiqu auquel on peut s'attendre
cette modification a eu lieu dans la version 4.3.10
Fixed bug #26752 (Silent unterminated loop when length parameter for
fgets(), fread() and fgetss() is 0). (Ilia)
Mais bon il y a un monde entre corriger un probleme de boucle silencieuse
(mais qu'est ce que ca peut bien etre ;)) et perdre de façon importante la
compatibilté... j'ajouterai SANS RAISON...
Enfin bon. c'est la vie.
foreach($tableau AS $res)
a aussi disparu semble t-il. mais la ca doit dater d'une beaucoup plus
ancienne version du PHP.
Mais tu as raison (Etienne), ce n'est pas logique d'autant que c'est textuellement l'expemple employé dans la doc fread() qui est indiqué ici.
Surtout qu'on se demande en quoi ca derange de retourner une chaine vide... ce qui est le comportement logiqu auquel on peut s'attendre
cette modification a eu lieu dans la version 4.3.10 Fixed bug #26752 (Silent unterminated loop when length parameter for fgets(), fread() and fgetss() is 0). (Ilia)
Mais bon il y a un monde entre corriger un probleme de boucle silencieuse (mais qu'est ce que ca peut bien etre ;)) et perdre de façon importante la compatibilté... j'ajouterai SANS RAISON...
Enfin bon. c'est la vie.
foreach($tableau AS $res) a aussi disparu semble t-il. mais la ca doit dater d'une beaucoup plus ancienne version du PHP.
Etienne
Vincent Lascaux
De toutes façons, c'est un peu stupide le fread filesize. Il faut faire fread avec un buffer statique (genre 512, 1048 ou 2096).
Pourriez-vous nous expliquer pourquoi ?
Par exemple, pour envoyer un fichier a l'internaute, en lisant le fichier d'un coup le serveur web va devoir le placer entierement en RAM. Pour un fichier de 200 megs, 5 utilisateurs qui telechargent, et vlan 1Go de RAM de pris. D'où le coup de buffer.
C'est un peu stupide d'utiliser un buffer pour ca. Il y a la fonction readfile qui fait exactement ca. Et puis, tu dis que faire un fread filesize est stupide et pour le prouver tu prends un cas particulier où c'est stupide. C'est comme si je disais "c'est stupide d'avoir la marche arrière sur une voiture. Imagines, t'es sur l'autoroute, t'utilises la marche arrière, à tous les coups tu fait un accident".
Remarques, il y a la fonction file_get_contents qui doit faire pareil que fread filesize, mais qui marche même si filesize est à 0...
-- Vincent
De toutes façons, c'est un peu stupide le fread filesize.
Il faut faire fread avec un buffer statique (genre 512, 1048
ou 2096).
Pourriez-vous nous expliquer pourquoi ?
Par exemple, pour envoyer un fichier a l'internaute, en lisant le fichier
d'un coup le serveur web va devoir le placer entierement en RAM.
Pour un fichier de 200 megs, 5 utilisateurs qui telechargent, et vlan 1Go
de
RAM de pris.
D'où le coup de buffer.
C'est un peu stupide d'utiliser un buffer pour ca. Il y a la fonction
readfile qui fait exactement ca.
Et puis, tu dis que faire un fread filesize est stupide et pour le prouver
tu prends un cas particulier où c'est stupide. C'est comme si je disais
"c'est stupide d'avoir la marche arrière sur une voiture. Imagines, t'es sur
l'autoroute, t'utilises la marche arrière, à tous les coups tu fait un
accident".
Remarques, il y a la fonction file_get_contents qui doit faire pareil que
fread filesize, mais qui marche même si filesize est à 0...
De toutes façons, c'est un peu stupide le fread filesize. Il faut faire fread avec un buffer statique (genre 512, 1048 ou 2096).
Pourriez-vous nous expliquer pourquoi ?
Par exemple, pour envoyer un fichier a l'internaute, en lisant le fichier d'un coup le serveur web va devoir le placer entierement en RAM. Pour un fichier de 200 megs, 5 utilisateurs qui telechargent, et vlan 1Go de RAM de pris. D'où le coup de buffer.
C'est un peu stupide d'utiliser un buffer pour ca. Il y a la fonction readfile qui fait exactement ca. Et puis, tu dis que faire un fread filesize est stupide et pour le prouver tu prends un cas particulier où c'est stupide. C'est comme si je disais "c'est stupide d'avoir la marche arrière sur une voiture. Imagines, t'es sur l'autoroute, t'utilises la marche arrière, à tous les coups tu fait un accident".
Remarques, il y a la fonction file_get_contents qui doit faire pareil que fread filesize, mais qui marche même si filesize est à 0...
-- Vincent
Cedric Nilly
C'est un peu stupide d'utiliser un buffer pour ca. Il y a la fonction readfile qui fait exactement ca.
Ce n'est pas stupide, puisque readfile() marche de la meme facon, il faut splitter le fichier en plusieurs morceaux.
Prends quelques secondes pour lire les commentaires de la fonction sur http://fr.php.net/readfile
C'est un peu stupide d'utiliser un buffer pour ca. Il y a la fonction
readfile qui fait exactement ca.
Ce n'est pas stupide, puisque readfile() marche de la meme facon, il faut
splitter le fichier en plusieurs morceaux.
Prends quelques secondes pour lire les commentaires de la fonction sur
http://fr.php.net/readfile