Forum |  HardWare.fr | News | Articles | PC | Prix | S'identifier | S'inscrire | Aide | Shop Recherche
1514 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

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

 



 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

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

n°2339835
rufo
Pas me confondre avec Lycos!
Posté le 03-10-2019 à 17:36:12  profilanswer
 

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 Cantine Calandreta : http://sourceforge.net/projects/canteen-calandreta
mood
Publicité
Posté le 03-10-2019 à 17:36:12  profilanswer
 

n°2339840
mechkurt
Posté le 04-10-2019 à 09:11:13  profilanswer
 

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
n°2339843
gilou
Modérateur
Modzilla
Posté le 04-10-2019 à 11:14:36  profilanswer
 

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!    --    In umbra igitur pugnabimus. --
n°2339844
rufo
Pas me confondre avec Lycos!
Posté le 05-10-2019 à 10:04:53  profilanswer
 

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 Cantine Calandreta : http://sourceforge.net/projects/canteen-calandreta
n°2339845
B4X
kebab-case
Posté le 05-10-2019 à 13:28:08  profilanswer
 

Ah ouai, pas mal la librairie qui charge toutes les fonts à chaque instanciation [:b4x:1] c'est certainement ton problème.
La solution proposée par Mechkurt résoudra dans tous les cas ton souci, en plus d'être plus propre. Il faut procéder par lots.


---------------
In vanitas veritas.
n°2339907
rufo
Pas me confondre avec Lycos!
Posté le 08-10-2019 à 09:40:19  profilanswer
 

@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 Cantine Calandreta : http://sourceforge.net/projects/canteen-calandreta
n°2339914
rufo
Pas me confondre avec Lycos!
Posté le 08-10-2019 à 11:52:10  profilanswer
 

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 Cantine Calandreta : http://sourceforge.net/projects/canteen-calandreta
n°2339926
B4X
kebab-case
Posté le 08-10-2019 à 18:42:23  profilanswer
 

Est-ce que tu voudrais bien relancer ton benchmark en settant tes variables à null dans ta boucle, après chaque itération? Notamment pour les variables qui stockent l'image et l'objet.
Je dis bien null et pas unset().
Je serais très curieux de savoir si ça soulage ta RAM.


---------------
In vanitas veritas.
n°2339928
MaybeEijOr​Not
but someone at least
Posté le 08-10-2019 à 19:41:15  profilanswer
 

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.
n°2339933
rufo
Pas me confondre avec Lycos!
Posté le 08-10-2019 à 22:55:02  profilanswer
 

B4X a écrit :

Est-ce que tu voudrais bien relancer ton benchmark en settant tes variables à null dans ta boucle, après chaque itération? Notamment pour les variables qui stockent l'image et l'objet.
Je dis bien null et pas unset().
Je serais très curieux de savoir si ça soulage ta RAM.


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 Cantine Calandreta : http://sourceforge.net/projects/canteen-calandreta

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

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

 

Sujets relatifs
PHP/RubyProbleme "Hello" -> apprentissage
Lire beaucoup d'images BLOB en HTML[Web] Protéger l'accès à des images
Problème code iframe programme Amazon Partenaires et Wordpress[FORTRAN] Problème objet/debug
[PHP] Garder uniquement les enregistrements présents dans un tableauCoder des images pour Livre Bds EPUB
[Résolu] PHP, PDO, transactions et procédures stockéesEnvoi de SMS via une appli PHP
Plus de sujets relatifs à : Problème d'alloc mémoire avec PHP et lib GD pour générer des images


Copyright © 1997-2018 Hardware.fr SARL (Signaler un contenu illicite) / Groupe LDLC / Shop HFR