Problème d'upload de grosses images

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Problème d'upload de grosses images

par abelthorne » 25 mars 2008, 22:40

Une variable à quel niveau ?

J'ai des fonctions qui redimensionnent des images, avec une syntaxe du style resize($source,$dest,$largeur,$hauteur), que j'appelle plusieurs fois dans le script : d'abord un recadrage, ensuite un redimensionnement, etc.
À chaque fois, la fonction correspondante charge l'image, la traite et la réenregistre. Le problème de mémoire a lieu à l'intérieur de la fonction, quand je veux créer une "ressource" image à partir du fichier source via la fonction impagecreatefromjpeg().

D'après mes tests, il y a effectivement un accroissement de la mémoire utilisée à chaque appel de mes fonctions. C'est la variable utilisée pour imagecreatefromjpeg() locale à la fonction que je dois détruire ?

Code : Tout sélectionner

$image_source=imagecreatefromjpeg($source); [...] unset($image_source);

par orgerix » 25 mars 2008, 20:55

Tout dépend si tu utilise la même variable ou non.

Si c'est des variables différentes, alors elle sera 3 fois en mémoire. Tu peux utiliser unset() pour effacer des variable.

par abelthorne » 25 mars 2008, 15:07

Bonjour,
Toujours sur le même sujet, j'ai un petit problème.

J'ai fait une fonction qui vérifie la mémoire nécessaire pour le traitement (redimensionnement) d'une image uploadée et qui la traite seulement si c'est possible vis-à-vis de la limite de mémoire sur le serveur.

Sur mon poste de développement, la limite est de 8M. Si j'uploade une grosse image (pas en taille de fichier mais en dimensions), pas de problème, j'affiche un message d'erreur.

Par contre, en faisant un test en ligne chez mon hébergeur, j'ai une limite mémoire de 40M et ça plante sur une image qui a l'air d'avoir besoin d'environ 33 Mo : j'ai le message d'erreur Fatal error: Out of memory (allocated 33292288) (tried to allocate 10368 bytes)

Néanmoins, je précise que je traite mon image trois fois à la suite dans le même fichier (1) recadrage, 2) redimensionnement sur cette version recadrée et 3) création d'une vignette à partir de l'image redimensionnée). Est-ce que ça viendrait du fait que PHP ne libère pas la mémoire ? et donc pour mes trois traitements je dépasserais la limite de 40 Mo ?
Si c'est bien le problème, peut-on forcer PHP à libérer la mémoire au milieu d'un script ?

Sinon, est-ce qu'il y a une autre limite de mémoire dans PHP dont j'ignore l'existence ?

par abelthorne » 05 mars 2008, 02:50

Oui, c'est une idée. Comme je devrai de toute façon les contacter pour des questions de nom de domaine, j'en profiterai.

Merci.

par AB » 05 mars 2008, 01:41

Excellent si tu peux faire des test avant de choisir, c'est la seule manière d'être sûr.
...
En admettant que mes tests soient concluants, est-ce que je dois m'attendre à ce que les bons réglages de PHP ne soient pas forcément présents sur toutes les offres ? autrement dit, est-ce que c'est possible/crédible qu'un hébergeur configure PHP différemment selon ses différentes offres mutualisées ?
Je saurai pas te répondre mais peut-être qu'en leur demandant directement et précisément si pour tel type d'offre tu peux monter le memory limit à 128 M pour faire un upload d'image suivi d'un redimentionnement, ils te donneront la réponse. C'est peut-être aussi une manière de tester leur service clientèle :wink:

par abelthorne » 04 mars 2008, 20:11

Excellent si tu peux faire des test avant de choisir, c'est la seule manière d'être sûr.
J'ai encore une petite question par rapport à ça : mon hébergement chez 1&1 fait partie d'une promo qu'ils avaient faite il y a pas mal de temps et ne correspond pas, au niveau des options, à un type d'abonnement normal (je suis en quelque sorte privilégié pour le moment). Quant à OVH, je pourrai tester deux de leurs abonnements en mutualisé, mais pas tous ceux qu'ils proposent (et que je suis susceptible de conseiller à la cliente pour laquelle je développe actuellement un backoffice basique).

En admettant que mes tests soient concluants, est-ce que je dois m'attendre à ce que les bons réglages de PHP ne soient pas forcément présents sur toutes les offres ? autrement dit, est-ce que c'est possible/crédible qu'un hébergeur configure PHP différemment selon ses différentes offres mutualisées ?

par AB » 04 mars 2008, 02:35

Ok. Je devrais avoir la possibilité de faire des tests chez OVH et 1&1 avant de choisir l'hébergement pour le projet en question. Je verrai ce que ça donne.

OVH a si mauvaise presse que ça ? pour des points particuliers (limitations techniques comme celle qui me préoccupe actuellement) ou de manière plus globale ?
J'ai l'habitude de gérer des projets qui sont hébergés chez eux et je n'ai jamais eu de problème. Il me semblait qu'ils avaient une bonne réputation dans le domaine.
Excellent si tu peux faire des test avant de choisir, c'est la seule manière d'être sûr.

Concernant OVH ce n'est pas un avis perso mais comme je lis beaucoup de sujets sur le forum disons qu'ils ne font pas l'unanimité. Mais la meilleur façon de te faire un avis est de rentrer 'OVH' ou 'OVH hébergement' dans le moteur de recherche de ce forum pour te faire ton opinion.
D'un autre côté les mécontents s'expriment plus souvent que les autres et faut savoir faire bonne mesure. Cela dit j'ai l'impression quand même qu'ils ont loin d'avoir 100% de satisfaits... et même parmi des utilisateurs expérimentés.

par abelthorne » 04 mars 2008, 02:12

Ok. Je devrais avoir la possibilité de faire des tests chez OVH et 1&1 avant de choisir l'hébergement pour le projet en question. Je verrai ce que ça donne.

OVH a si mauvaise presse que ça ? pour des points particuliers (limitations techniques comme celle qui me préoccupe actuellement) ou de manière plus globale ?
J'ai l'habitude de gérer des projets qui sont hébergés chez eux et je n'ai jamais eu de problème. Il me semblait qu'ils avaient une bonne réputation dans le domaine.

Re: Problème d'upload de grosses images

par AB » 03 mars 2008, 21:42

EDIT : ça a l'air de marcher (du moins en local) en utilisant ini_set("memory_limit", "128M"); mais je doute que je puisse changer la mémoire allouée lorsque ce sera sur le serveur de production ?
Tu peux mais ça dépend de la config des serveurs... donc à moins de connaitre les possibilités de paramétrage de ces hébergements impossible de te donner une réponse catégorique.

Concernant OVH fais quelques recherches sur le forum. Certains utilisateurs en sont particulièrement mécontents...

Problème d'upload de grosses images

par abelthorne » 03 mars 2008, 18:41

Bonjour,
Je suis en train de développer un script qui doit me permettre d'uploader de grosses images sur un serveur en les redimensionnant au passage.
L'upload se passe bien mais dès que je veux passer au redimensionnement, rien ne va plus.

Si j'ai bien compris le principe par rapport à la doc et aux exemples que j'ai trouvés, je dois créer une ressource à partir de mon image d'origine via la fonction imagecreatefromjpeg(), une ressource vierge pour l'image de destination via imagecreatetruecolor() puis copier la source dans la destination via imagecopyresized().
Le problème c'est que mes images d'origine sont assez grosses (1944x2592 pour celle qui me sert de test) et quand j'utilise imagecreatefromjpeg() dessus, j'ai un message d'erreur Fatal error: Allowed memory size of 8388608 bytes exhausted (tried to allocate 7776 bytes). Ça vient bien du fait que l'image est trop grosse ?

Je précise que je suis encore en environnement de développement (XAMPP) et pas sur le serveur final. Je suppose que je devrais augmenter la mémoire allouée aux scripts, ce qui doit être faisable sur mon poste mais ça risque alors de poser problème sur le serveur final (hébergement en mutualisé qui sera probablement chez OVH ou 1&1), non ?

EDIT : ça a l'air de marcher (du moins en local) en utilisant ini_set("memory_limit", "128M"); mais je doute que je puisse changer la mémoire allouée lorsque ce sera sur le serveur de production ?