2009-06-05 2 views
3

Я просто унаследовал проект PHP, который генерирует большие файлы PDF и обычно дросселирует после нескольких тысяч страниц и нескольких концертов серверной памяти. Проект использовал PDFLib для генерации этих файлов в памяти.PDFLib в PHP hogging resources, а не сбрасывание в файл

Мне было поручено исправить это, поэтому первое, что я сделал, это отправить PDFLib-вывод в файл вместо создания в памяти. Проблема в том, что она все еще, кажется, создает память PDF. И большая часть памяти никогда не возвращается в ОС. В конце концов, все это задыхается и умирает.

Когда я задаю программе создание только фрагментов больших PDF-файлов, кажется, что данные не полностью очищены до файла на end_document(). Я не получаю никаких ошибок, но PDF не читается и открытие его в шестнадцатеричном редакторе делает очевидным, что поток неполный.

Я надеюсь, что у кого-то возникли аналогичные трудности.

+0

В: Создает ли сервер PDF-документы размером в несколько тысяч страниц или генерирует ли сервер несколько тысяч PDF-файлов? Является ли CLI для PHP-программы или веб-сайтом? Т.е. как это началось? И как долго он хранится в памяти? – 0scar

+0

Многие страницы, не многие PDF-файлы. Это веб-интерфейс (mod_php) в Apache. Некоторая память возвращается, многое еще не возвращается до перезагрузки сервера. –

ответ

2

Решенный! Нужно вызывать PDF_delete_textflow() для каждого текстового потока, так как им предоставляется область документа и не исчезают до тех пор, пока документ не будет закрыт, что никогда не было, поскольку вся доступная память была исчерпана до этого момента.

1

Вы должны быть уверены, что закрываете каждую страницу, а также закрываете документ. Это будет сделано путем вызова «end_page_ext» в конце каждой письменной страницы.

Кроме того, если вы импортируете страницы из другого PDF-документа, вы должны вызвать «close_pdi_page» после каждой обновленной страницы и «close_pdi_document», когда вы закончите с каждым импортированным документом.

 Смежные вопросы

  • Нет связанных вопросов^_^