2010-02-24 5 views
3

Я использую DOMPDF для создания около 500 отчетов из одного сценария. У него заканчивается память после создания 10-15 PDF-файлов.dompdf проблемы с памятью

В отладке, похоже, что он загружает 8M каждый раз, когда он загружается, но это похоже на то, что должно быть обработано с помощью кода кэширования шрифтов.

Какие-нибудь идеи о том, что здесь происходит не так? Я бы хотел опубликовать простой фрагмент кода, но большая часть его абстрагируется на несколько слоев, поэтому это не просто копия/вставка.

+0

Сколько раз шрифты загружаются в PDF? –

ответ

1

Прежде всего, если это для чего-либо удаленно коммерческого, просто получите Prince XML. Это значительно лучше и быстрее, чем любое другое решение HTML для PDF (и я просмотрел их все). Стоимость будет быстро окупиться в сохраненное время разработчика.

Во-вторых, самым быстрым решением, вероятно, является печать каждого отчета в отдельном процессе для решения любых проблем с утечкой памяти. Если это выполняется из командной строки, внешний цикл будет похож на сценарий оболочки, который запустит процесс для каждого отчета. Если он запускается из веб-вилки для каждого сценария, если вы работаете в ОС, который может это сделать.

Посмотрите на Convert HTML + CSS to PDF with PHP?.

1

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

Трудно сказать, что происходит в противном случае в отношении использования памяти без какого-либо примера, демонстрирующего проблему. Я не верю, что существует большая оптимизация DOMPDF и подстилающего механизма рендеринга CPDF для нескольких экземпляров в одном скрипте. Поэтому шрифт, вероятно, каждый раз загружается в память, хотя он может использовать статическую переменную для кэширования этих данных.

2

Если вы используете бета-версию dompdf 0.6, ошибка памяти является результатом бесконечного цикла, который dompdf входит в таблицы рендеринга. Это известная проблема, которую я не смог решить.

Соответствующие URL-адреса:

http://code.google.com/p/dompdf/issues/detail?id=34

http://code.google.com/p/dompdf/issues/detail?id=91

(Ошибка вы видите PDF PHP Фатальная ошибка: Разрешены памяти размером 268435456 байт исчерпаны)

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