Проблемы с памятью dompdf

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

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

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

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

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

Взгляните на Преобразование HTML + CSS в PDF с PHP? ,

Если вы используете dompdf 0.6 beta, ошибка памяти является результатом бесконечного цикла, который 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 байт исчерпан)

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

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