Limite de memória do Apache / PHP exhasted ao renderizar relatório com dompdf

1

Estou desenvolvendo um aplicativo da web e usando uma pilha de lâmpadas típica. Estou usando o dompdf para gerar alguns relatórios para o pdf. Em um caso, eu tenho uma lista de tabelas simples (acho que lista de clientes) com algumas informações simples (nome, número de telefone, e-mail, etc ...), mas o usuário tem cerca de 400 clientes nesta lista. Ao tentar renderizar o relatório em pdf, o tamanho de memória permitido é excedido e ocorre um erro. Minha pergunta é como eu abordo uma solução para isso? Se um usuário executando um relatório está comendo toda a minha CPU, eu só posso imaginar isso quando 100 são usuários tentar e executar relatórios ao mesmo tempo no servidor de produção (servidor em nuvem rackspace)

O erro exato é:

[qua Abr 24 01:06:54 2013] [error] [client 127.0.0.1] PHP Erro fatal: tamanho de memória permitido de 134217728 bytes esgotados (tentou alocar 83 bytes) em / home / redacted / redacted / v2 /application/libraries/dompdf/include/style.cls.php na linha 863, referente: link

Preciso gerar um processo separado para cada execução de relatório? Não sei exatamente como isso é feito (acho que precisaria fazer isso via PHP). Basicamente, não quero que meu servidor pare de funcionar quando qualquer relatório grande é executado. Qualquer pensamento ou conselho é muito apreciado!

    
por Greg 24.04.2013 / 10:39

1 resposta

2

Você pode executar um processo separado que lide com todos os relatórios, dessa forma, apenas um processo precisaria usar recursos em vez de muitos. Especialmente em um ambiente multiusuário, isso seria uma boa ideia. Sim, você pode executar processos do php, verificar a documentação por ex. popen ().

Por outro lado, deve-se também pensar se isso (dompdf with php) é o melhor caminho a percorrer em grandes relatórios. Existem também outras implementações de serviços de criação de pdf que funcionam com mais rapidez e eficiência com recursos.

EDIT: Para uma rápida correção do seu erro atual, você pode aumentar o limite de memória do PHP para, por exemplo, 256M, mas isso seria apenas uma solução alternativa, em vez de uma solução real.

    
por 24.04.2013 / 11:48