Problème d'alloc mémoire avec PHP et lib GD pour générer des images

Problème d'alloc mémoire avec PHP et lib GD pour générer des images - PHP - Programmation

Marsh Posté le 03-10-2019 à 17:36:12    

Bonjour,J'ai un script PHP qui doit générer environ 3000 petites images (430x400px) en PNG. En gros, j'ai une requête SQL qui extrait une liste d'éléments pour lesquels il faut générer une image.J'ai donc un while() qui parcourt le résultat de ma requête et pour chaque enregistrement trouvé, j'appelle une fonction qui crée mon image. En gros, cette fonction fait :1) utilisation de JPGraph pour créer mon image initiale (c'est un graphique de stats)2) j'ouvre l'image générée via imagecreatefrompng()3) je fais quelques manips sur cette image (une rotation et ajout d'une titre et d'une légende)4) j'enregistre le fichier image final via imagepng() et je détruis ma variable image via imagedestroy()5) ma fonction renvoie true ou false.
Problème : au bout de 105 images générées, PHP crashe. Il me dit que sur la fonction imagecreatefrompng() veut allouer de la mémoire mais ne peut pas. J'ai pourtant mis la limite de mémoire à 1028Mo. Si je la passe à 200Mo, j'arrive à générer 3 fois plus de graphiques.J'ai du mal à comprendre pourquoi malgré la libération des ressources images, le script prend plus de 128 ou 200Mo de RAM :??:
J'ai regardé sur Google mais en-dehors de la solution bête d'augmenter la limite de mémoire dans le php.ini, j'ai pas trouvé d'explication. C'est GD qui fait de la merde ?
Merci :)


Message édité par rufo le 03-10-2019 à 17:40:31

---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 03-10-2019 à 17:36:12   

Reply

Marsh Posté le 04-10-2019 à 09:11:13    

Tu as ptet une fuite de mémoire dans JPGRaph...
Si j'avais a faire un truc de ce genre je ferais une moulinette en AJAX qui appelle un script pour générer une seule image, avec une barre de progression et tout et tout.
Comme ça chaque process php garde une utilisation modéré de mémoire.


---------------
D3
Reply

Marsh Posté le 04-10-2019 à 11:14:36    

Tu as probablement déjà lu ceci, mais si ce n'était pas le cas, https://stackoverflow.com/questions [...] f-function
 
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Marsh Posté le 05-10-2019 à 10:04:53    

Merci Gilou. Je n'avais pas vu ce topic, pensant que ça venait de GD alors qu'il semblerait que ça vienne de JPGraph. Je vais tester la solution proposée pour voir si ça résout mon pb.
Merci :jap:


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 08-10-2019 à 09:40:19    

@mechkurt : Oui, effectivement, c'est une idée. J'avais essayé en ligne de commande mais bizarrement JPGraph me lève une erreur dans ce contexte et j'ai pas trouvé pourquoi.
Finalement, j'avais fait le bourrin et avais passé la limite mémoire à 512Mo et le max execution time à 1200. Le script a fonctionné (820s).
 
Mais je vais tester la modif de la lib JPGraph dès que j'ai un moment.
Merci à tous en tout cas :jap:


Message édité par rufo le 08-10-2019 à 09:40:53

---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 08-10-2019 à 11:52:10    

Bon, je viens de tester la correction : ça me fait gagner quelques images crées en plus mais ça plante avec 128Mo de limite RAM. Je vais rester sur mes 512 Mo de limite de RAM. C'est sur un PC local à usage ponctuel, donc pas gênant.
@+


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 08-10-2019 à 19:41:15    

Alors franchement je n'ai aucune idée de comment fonctionne la limite de RAM, mais est-on certain que ça ne calcule pas la mémoire consommée par le script plutôt que la mémoire "instantanée" ?


---------------
C'est en écrivant n'importe quoi qu'on devient n'importe qui.
Reply

Marsh Posté le 08-10-2019 à 22:55:02    


Les variables sont dans une fonction. Du coup, à la sortie de celle-ci, elles sont supprimées.


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Sujets relatifs:

Leave a Replay

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