Précédent   Forum des professionnels en informatique > PHP > Bibliothèques et frameworks > Images > GD
GD Forum d'entraide pour l'extension GD permettant de manipuler des images en PHP. Avant de poster -> tutoriels GD
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 09/03/2007, 10h44   #1
Membre du Club
 
Inscription : avril 2003
Messages : 117
Détails du profil
Informations personnelles :
Âge : 29

Informations forums :
Inscription : avril 2003
Messages : 117
Points : 62
Points : 62
Par défaut Erreur mémoire lors génération de vignettes

Bonjour à tous,

je suis en train d'essayer d'améliorer mon script de création de vignettes, surtout pour que cela fonctionne avec des images assez grandes.

Visiblement le problème venait de l'allocation mémoire, généralement limitée à 8M sur le serveur. Grâce à une astuce trouvée sur le net, j'ai augmenté cette valeur dans un htaccess.

Lors je génère les vignettes sur plusieurs petites images à la volée, pas de problème.

Lors j'essaie avec des images plus importantes (genre 2560 x 1920), j'ai le message suivant

Citation:
Fatal error: Allowed memory size of 25165824 bytes exhausted (tried to allocate 10240 bytes) in xxxxx
ce que je ne comprend pas dans ce message c'est qu'il essaie de me dire que je peux pas allouer 10kb dans ma mémoire portée à 24Mb.

Si mes calculs sont bons, j'ai besoin d'environ 12Mb pour cette image. Comme j'en ai plusieurs à redimensionner dans le même script, je m'étais dis qu'il suffirait de rajouter un imagedestroy et un unset à la fin des instructions de ma boucle pour "libérer de la mémoire". Est-ce une bonne idée ?

La ligne incriminée par l'erreur ci-dessus est la ligne où j'ai mon 'ImageCreateFromJpeg'.

Je vous remercie par avance si vous avez des pistes.

PHP 4.4.1
GD 2.0.28
r-zo est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/03/2007, 11h57   #2
Membre chevronné
 
Inscription : mai 2005
Messages : 657
Détails du profil
Informations forums :
Inscription : mai 2005
Messages : 657
Points : 722
Points : 722
Salut,

Citation:
ce que je ne comprend pas dans ce message c'est qu'il essaie de me dire que je peux pas allouer 10kb dans ma mémoire portée à 24Mb.
En fait il veut dire qu'il a dépasser les 24MB autorisés en essayant d'allouer un bloc de 10KB. Il n'alloue probablement pas toute la mémoire d'un coup, et si tu as déjà 23,999MB d'alloués, l'allocation d'un bloc de 10KB échouera, d'où ton message d'erreur.

Citation:
Comme j'en ai plusieurs à redimensionner dans le même script, je m'étais dis qu'il suffirait de rajouter un imagedestroy et un unset à la fin des instructions de ma boucle pour "libérer de la mémoire". Est-ce une bonne idée ?
Libérer la mémoire avec imagedestroy et unset est évident une bonne idée
Pour débugger, tu peux essayer aussi de voir l'utilisation memoire de ton script avec get_memory_usage().
D'autre part je ne suis pas très sur de ton calcul. D'après les commentaires sur php.net à propos de imagecreatefromjpeg, la mémoire nécessaire serait environ :
mémoire = (x* y * bits/8 * channels + 65536) * 1.65)
soit pour une image 2560 x 1920 x 24bits pas loin de 24MB.
Tu peux éventuellement essayer d'augmenter encore un peu la limite de mémoire et voir ce que ça donne
Taum est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/03/2007, 13h34   #3
Membre du Club
 
Inscription : avril 2003
Messages : 117
Détails du profil
Informations personnelles :
Âge : 29

Informations forums :
Inscription : avril 2003
Messages : 117
Points : 62
Points : 62
Il y a des fois on cherche les trucs compliqués

J'ai suivi ton conseil le plus simple en modifiant ma limite pour la porter à 50M. Et là ça marche.

Donc je me suis fait avoir par mon calcul au départ.

Merci pour ton aide.

Bon me reste plus qu'à dire à mon bourrin de client de réduire légèrement ces images issus de son apn
r-zo est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 04h45.


 
 
 
 
Partenaires

Hébergement Web