Foros del Web » Programando para Internet » PHP »

Ayuda con DOMPdf

Estas en el tema de Ayuda con DOMPdf en el foro de PHP en Foros del Web. Hola a todos, soy un seguidor del foro, que está excelente, pero recién hoy me registré para plantearles un problema: Estoy renegando con la librería ...
  #1 (permalink)  
Antiguo 02/06/2009, 19:31
 
Fecha de Ingreso: junio-2009
Mensajes: 1
Antigüedad: 10 años, 8 meses
Puntos: 0
Ayuda con DOMPdf

Hola a todos, soy un seguidor del foro, que está excelente, pero recién hoy me registré para plantearles un problema:

Estoy renegando con la librería DOMPdf (Versión 0.5.1, que es la última), y estoy teniendo problemas de memoria al momento de generar un PDF.

Los pongo en situación:

Tengo contratado un Plan de Hosting que tiene un límite de Memoria de 16Mb (en Php.ini memory_limit = 16M) y si intento utilizar la función ini_set("memory_limit","32M"); la obvia, es decir, no me deja modificar los límites de memoria más allá de los 16Mb.

Al llamar a la rutina de generación del PDF, lo que noto es que las primeras dos veces lo hace bien, es decir, me genera el PDF sin ningún problema, pero la tercera vez es donde me arroja el mensaje de error tal cual les trascribo:

Fatal error: Allowed memory size of 16777216 bytes exhausted (tried to allocate 1245184 bytes) in /www/docs/cbase.com.ar/public_html/fe/dompdf/lib/class.pdf.php(2219) : eval()'d code on line 5914

Después de unos momentos, si vuelvo a intentar la generación, vuelve a funcionar bien las primeras dos veces, y la tercera falla, por lo que presupongo que se debe a que es cuando el servidor libera la memoria...

Yo fui siguiendo la ejecución de todas las veces anteponiendole la función memory_get_usage(), para que en cada ejecución me mostrara cuanto era la memoria libre hasta el momento en que se está por crear el objeto DOMPdf y siempre me devuelve valores similares a estos bytes: 346676; lo cual está bastante lejos de los 16777216 bytes que tengo como límite.

Por lo que pude observar, el archivo "dompdf.cls.php" que viene en la librería DOMPdf y que tiene definida la clase que es instanciada, no tiene un destructor, por lo que supuse que al no tener un destructor, el objeto quedaba en memoria y al realizar varias llamadas eso estaba provocando que la misma se agotara, por lo que me tomé el atrevimiento de agregarle un destructor:
Código PHP:
function __destruct() {
       print 
"Objeto DomPDF Destruido" "\n";

Y gracias al print que le coloqué pude observar que lo ejecuta; pero así y todo sigo con el problema

La porción de código con la que creo el objeto DOMPdf es la siguiente:

Código PHP:
$dompdf = new DOMPDF();
$dompdf->load_html(generarHtmlPdf());
$dompdf->render();
$pdf $dompdf->output();
file_put_contents("temp/".$nombre.".pdf"$pdf);

/** 
La función generarHtmlPdf() es la que retorna el código html que intento enviar al PDF
*/ 
Tomé todas las precauciones que fuí leyendo en distintos lugares, es decir, no colocar tablas anidadas, no usar links a estilos, sino colocarlos dentro del código html... Y considero que si algo de esto estaría mal no se generaría bien ni siquiera una vez.

Sé que si hubiera una forma de aumentar el límite de memoria se solucionaría, pero si en vez de 16Mb tuviera 80Mb, presumo que en vez de pasarme a la tercera vez, me pasaría a la décima.

Espero puedan ayudarme, les envio un abrazo, y desde ya, muchas gracias a todos.

Christian
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 18:13.