Bonjour à tous,
Nous utilisons html2pdf pour générer des rapports relativement conséquents (une 50aine pour les plus simples, plus d'une 100aine pour les plus complexes). J'ai fréquemment dû augmenter l'ouverture mémoire de PHP (jusqu'à 512Mo !) pour pouvoir générer ces rapports. Dernièrement, la charge mémoire est montée crescendo jusqu'à ce qu'il soit impossible de supporter l'allocation mémoire nécessaire sur notre serveur.
J'ai fait une rapide analyse du code et j'ai pu localisé le problème du côté de PHP : la fonction preg_match_all() crée un **enorme!** tableau mémoire et gère (semble-t-il) très mal l'extraction des tags et des textes. Cette fonction est fréquemment suivie d'une boucle qui itère sur le tableau résultat et extrait des informations intéressantes pour html2pdf. J'ai donc fait un prototype en remplaçant preg_match_all + boucle par une structure while() qui itère directement sur les résultats d'un preg_match.
Les résultats sont pour l'instant très concluants : j'ai pu réduire sans problème l'ouverture mémoire à 128Mo (je testerai plus bas d'ici quelques jours) et le temps moyen d'exécution a été divisé par deux (pas de chiffres à l'appui : juste une impression).
Je vais généraliser la correction aux autres usages de preg_match_all(). Si la modification s'avère concluante et si vous êtes intéressés par le patch, merci de me faire signe que je vous envoie la classe modifiée.
Julien.