2009-06-05 6 views
3

Je viens d'hériter d'un projet PHP qui génère de gros fichiers PDF et étouffe généralement après quelques milliers de pages et plusieurs concerts de la mémoire du serveur. Le projet utilisait PDFLib pour générer ces fichiers 'en mémoire'.PDFLib dans PHP hogging ressources et ne pas vidanger dans le fichier

J'ai été chargé de résoudre ce problème, donc la première chose que j'ai faite a été d'envoyer la sortie PDFLib à un fichier au lieu de la construire en mémoire. Le problème est, il semble toujours construire la mémoire PDF. Et une grande partie de la mémoire ne semble jamais être retournée au système d'exploitation. Finalement, l'ensemble étouffe et meurt.

Lorsque je charge le programme de créer uniquement des extraits de fichiers PDF volumineux, il semble que les données ne sont pas entièrement vidées dans le fichier end_document(). Je ne reçois aucune erreur, pourtant le PDF n'est pas lisible et l'ouvrir dans un éditeur hexadécimal fait qu'il est évident que le flux est incomplet. J'espère que quelqu'un a connu des difficultés similaires.

+0

Q: Le serveur génère-t-il des documents PDF de plusieurs milliers de pages ou le serveur génère-t-il plusieurs milliers de fichiers PDF? Est-ce que le php-programme CLI ou basé sur le Web? C'est à dire comment est-il commencé? Et combien de temps est-il gardé en mémoire? – 0scar

+0

Beaucoup de pages, pas beaucoup de PDF. C'est basé sur le Web (mod_php) dans Apache. Une partie de la mémoire est restituée, une grande partie n'est jamais restituée avant le redémarrage du serveur. –

Répondre

2

Résolu! Nécessité d'appeler PDF_delete_textflow() sur chaque flux de texte, car ils ont une portée documentaire et ne disparaissent pas tant que le document n'est pas fermé, ce qui n'a jamais été fait puisque toute la mémoire disponible était épuisée avant ce point.

1

Vous devez vous assurer que vous fermez chaque page ainsi que la fermeture du document. Cela serait fait en appelant le "end_page_ext" à la fin de chaque page écrite.

De plus, si vous importez des pages d'un autre PDF, vous devez appeler "close_pdi_page" après chaque page imprimée et "close_pdi_document" lorsque vous avez terminé avec chaque document importé.

Questions connexes