Problème d'alloc mémoire avec PHP et lib GD pour générer des images - PHP - Programmation
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.
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+,
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
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
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.
@+
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" ?
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.
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