-=Érico=- 5 Denunciar post Postado Fevereiro 1, 2007 Olá a todos, estou usando o FPDF para exportar para um arquivo PDF apartir de um comando SQL, mas estou com um problema, dependendo do período que o usuário seleciona, se ele seleciona um periodo muito grande, a memória do servidor estora, pelo que eu pude perceber , o FDPF ele joga tudo na memória pra depois desenhar o arquivo PDF, não sei ao certo.O que tem no arquivo PDF são simplesmente celulas, nada mais, mas os documentos grandes tem de 5.000 a 15.000 páginas, e o servidor não aguenta, já que o metodo que o FDPF faz tem a vantagem de ser bem rápido, mas ele joga tudo na memória, e acaba usando toda memória tradicional e SWAP da maquina.Teria algum jeito de contornar essa situação? Alguém teria algum jeito de fazer de outro metodo pelo FPDF? ou até mesmo algum jeito de concatenar arquivos PDF, assim eu fazia varios outputs no meio do laço e juntava depois. Compartilhar este post Link para o post Compartilhar em outros sites
-=Érico=- 5 Denunciar post Postado Fevereiro 2, 2007 Olá Adailton, time_out() seria o tempo excedido de execução da página? Antes estava dando o erro de tempo execedido, ai eu aumentei o parametro max_execution_time do php.ini para 3600, ai não tive esse problema. p.s.: Agradeço pela ajuda no outro tópico que você respondeu a respeito do preenchimento das celulas no FDPF, era aquilo mesmo o meu erro. Obrigado! =) Compartilhar este post Link para o post Compartilhar em outros sites
-=Érico=- 5 Denunciar post Postado Fevereiro 2, 2007 Adailton, eu desconheço a função, eu dei uma lida e não entendi muito bem, você poderia dar um exemplo pra mim, tô colocando um trecho com a condição que vai até o laço mais simples do meu arquivo que gera o pdf. define('FPDF_FONTPATH', $root_path . 'include/pdf/font/');require($root_path . 'include/pdf/fpdf.php');$tb1 = "relgeral_".$userdata['login'].rand(1,999999999);$pdf = new FPDF('L','cm','A4');$pdf->Open();$pdf->AddPage();$pdf->SetMargins(1,1,1);$pdf->SetAutoPageBreak(true, 1.5);$pdf->AliasNbPages();$h = 0.5;............ else # -- ANALITICO SEM AGRUPAMENTO -------------------------------------------- # { while ($Resultset = $db->sql_fetchrow($Result)) { $cont = 0; if ($rowbg == 'true') { $rowbg = 'false'; $pdf->SetFillColor(255,255,255); } else { $rowbg = 'true'; $pdf->SetFillColor(224,224,224); } while ($numCampos > 6) { if ($numCampos == 7) { $kk = 1; } else { $kk = 0; } $pdf->Cell($tamanho[$cont],$h, $Resultset[$cont],1,$kk,$align[$cont],1); $numCampos--; $cont++; } $numCampos = $db->sql_fields($Result); } }......$pdf->Output($root_path . "mysql/$tb1.pdf",'F');system ("/usr/bin/zip -j -q " . BASE_DIR . "mysql/$tb1.zip " . BASE_DIR . "mysql/$tb1.pdf");unlink (BASE_DIR . "mysql/$tb1.pdf"); Ou eu teria que colocar esses parametros que você mencionou dentro do fpdf.php? Obrigado. Compartilhar este post Link para o post Compartilhar em outros sites
-=Érico=- 5 Denunciar post Postado Fevereiro 2, 2007 isso e tentativa no inicio da página starta o buffer <?php ob_start(); a cada while() você encerrra liberando com ob_end_flush() Adailton Adailton, gerou um Notice... Notice: ob_end_flush() [ref.outcontrol]: failed to delete and flush buffer. No buffer to delete or flush. Chutei um ob_flush no começo do while mas outro Notice. Notice: ob_flush() [ref.outcontrol]: failed to flush buffer. No buffer to flush. Eu tava dando uma olhada agora no código do fpdf, ele tem a propria variavel lah ($buffer) onde armazena os binarios, colocar essas funções dentro do meu código não vai mudar nada, teria que mudar o conceito do código do fpdf. EDITANDO.... Consegui! Fiz de um jeito que ele vai dando output() de 1000 em 1000 paginas, desse jeito ele esvazia o buffer, ai eu peguei um binario que concaneta PDFs, ai é só executar um system() e pronto, funcionou perfeitamente!!! =D Compartilhar este post Link para o post Compartilhar em outros sites