Consommation mémoire avec GD Library

opusdei
Invité n'ayant pas de compte PHPfrance

13 sept. 2011, 16:42

Bonjour à tous,

Je vais bientôt faire l'acquisition d'un serveur dédié pour héberger un site qui proposera de créer sa propre galerie photo.

Les utilisateurs seront donc amenés à uploader des images. J'ai actuellement un script (qui utilise la Library GD) qui resize l'image uploadée. Sur des images, même "petites" en poids (4Mo) et en taille (2000x2000 par ex.), je dépasse largement mon seuil de Memory Limit fixé (volontairement) à 32Mo, d'où un crash du script.

MISE EN SITUATION : Sur un serveur dédié auquel j'allouerai 128 Mo de Mémoire pour les scripts, plusieurs personnes (disons plus de 5) uploadent simultanément une image qui doit être resizée, sachant que chaque action d'upload/resize consomme environ 32Mo de mémoire, ce qui fait 5x32=160Mo, soit plus que la mémoire allouée initialement.

MA QUESTION : Le serveur fait-il crasher le script à cause du cumul de consommation mémoire ?

MA QUESTION BONUS : Comment font les sites comme Facebook & Co. pour gérer autant d'upload/resize en même temps, sans crasher ?

ViPHP
ViPHP | 3607 Messages

13 sept. 2011, 18:37

Bonjour,

Une solution à envisager, déléguer les redimmensions à un script qui tourne en background...
Un truc tout simple à mettre en place:
  • tu places dans un répertoire les images à redimmensionner.
  • tu faits tourner un cron toute les x secondes qui redimmensionne une seule image et la vire ensuite de la file de traitement.
  • sur les interfaces ou tu es censé afficher les images redimmensionés, tu vérifie si elle sont disponible, si non tu affiches un message du genre "traitement en cours"
Voilà pour une idée.
Après il faudrait être sur que ton script de redimmension est bien optimisé aussi....

opusdei
Invité n'ayant pas de compte PHPfrance

14 sept. 2011, 20:40

Ok jojolapine, c'est une bonne idée !