2009-06-05 5 views
3

ich geerbt nur ein PHP-Projekt-Datei, die große PDF-Dateien und in der Regel Drosseln nach ein paar tausend Seiten und mehrere Konzerte von Serverspeicher erzeugt. Das Projekt verwendete PDFLib, um diese Dateien "im Speicher" zu erzeugen.PDFLib in PHP hogging Ressourcen und Spülung nicht

Ich war mit Festsetzung dieser Aufgabe, so das erste, was ich tat, war PDFLib Ausgabe in eine Datei statt Gebäuden im Speicher zu senden. Das Problem ist, dass es immer noch PDF-Speicher zu erstellen scheint. Und ein großer Teil des Speichers scheint nie in das Betriebssystem zurückgekehrt zu sein. Irgendwann würgt und stirbt das ganze Ding.

Als ich mit dem Bau nur Schnipsel der großen PDFs die Programm-Task, so scheint es, dass die Daten in die Datei auf end_document nicht vollständig geleert wird(). Ich bekomme keine Fehler, aber die PDF ist nicht lesbar und das Öffnen in einem Hex-Editor macht es offensichtlich, dass der Stream unvollständig ist.

Ich hoffe, dass jemand ähnliche Schwierigkeiten erlebt hat.

+0

F: Generiert der Server PDF-Dokumente mit mehreren tausend Seiten oder generiert der Server mehrere tausend PDF-Dateien? Ist das PHP-Programm CLI oder webbasiert? Dh wie ist es angefangen? Und wie lange wird es gespeichert? – 0scar

+0

Viele Seiten, nicht viele PDFs. Es ist webbasiert (mod_php) in Apache. Einige Speicher werden zurückgegeben, viel wird erst beim Serverneustart zurückgegeben. –

Antwort

2

Gelöst! Für jeden Textfluss muss PDF_delete_textflow() aufgerufen werden, da ihnen der Dokumentbereich zugewiesen wird und sie nicht verschwinden, bis das Dokument geschlossen wird. Dies war nie der Fall, seit der gesamte verfügbare Speicherplatz vor diesem Zeitpunkt erschöpft war.

1

Sie müssen sicherstellen, dass Sie jede Seite sowie das Schließen des Dokuments schließen. Dies würde durch Aufrufen des "end_page_ext" am Ende jeder geschriebenen Seite erfolgen.

Wenn Sie Seiten aus einer anderen PDF-Datei importieren, müssen Sie nach jeder improvisierten Seite "close_pdi_page" und nach jedem importierten Dokument "close_pdi_document" aufrufen.