dompdf problemas de memory

Estou usando DOMPDF para gerar cerca de 500 relatórios de um script. Está ficando sem memory depois de cerca de 10-15 PDFs terem sido gerados.

Na debugging, parece que está carregando 8M cada vez que ele chega à fonte carregando coisas, mas isso parece ser algo que deve ser tratado com o código de cache de fonts.

Alguma idéia do que está acontecendo aqui? Gostaria de publicar um snippet de código simples, mas a maioria é abstraída em múltiplas camadas, então não é apenas uma simples cópia / colar.

Primeiro, se isso for para qualquer coisa remotamente comercial, comece o Prince XML . É substancialmente melhor e mais rápido do que qualquer outra solução de HTML para PDF (e eu olhei para todos). O custo será recuperado rapidamente no tempo de desenvolvimento salvo.

Em segundo lugar, a solução mais rápida é provavelmente imprimir cada relatório em um processo separado para resolver problemas de memory leaks. Se isso estiver sendo executado a partir da linha de comando, o loop externo seja algo como um script de shell que iniciará um processo para cada relatório. Se é executado a partir do Web fork um processo para cada script, se você estiver em um sistema operacional que pode fazer isso.

Dê uma olhada em Convert HTML + CSS para PDF com PHP? .

Se você estiver usando o dompdf 0.6 beta, o erro de memory é o resultado de um loop infinito que dompdf entra ao renderizar tabelas. Este é um problema conhecido que não consegui resolver.

URLs relevantes:

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

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

(O erro que você vê é pdf PHP Erro fatal: Tamanho da memory permitida de 268435456 bytes esgotados)

Conforme indicado por cletus, a solução mais rápida para você com o DOMPDF provavelmente estará renderizando cada relatório em um processo separado. Você pode escrever um script mestre que chama um script filho (usando o exec) que executa a renderização real. Como você pode ver nesta discussão sobre o grupo de suporte DOMPDF, parece ter o potencial de proporcionar um pouco de impulso no desempenho.

É difícil dizer o que está acontecendo de outra forma em relação ao uso da memory sem algum tipo de exemplo que demonstre o problema. Não acredito que haja uma grande otimização do DOMPDF e do motor de renderização CPDF subjacente para várias instâncias em um único script. Portanto, a fonte provavelmente está sendo carregada na memory de cada vez, embora possa usar uma variável estática para armazenar esses dados.