El otro día me encontré con un problema al generar un PDF de factura en Prestashop. La pantalla se quedaba en blanco y tardaba mucho en generarlo, llegando al punto de que daba un error y no se llegaba a generar.
Tabla de contenidos
Revisando errores en el Log
Activando el modo debug de Prestashop pude determinar el error que estaba sucediendo.
Fatal error: Uncaught exception 'ImagickException' with message 'unable to open image `/httpdocs/cache/tcpdf/mska_fb834670e9598553dc57a74c3995df8e': No such file or directory' in /httpdocs/tools/tcpdf/tcpdf.php:8613 Stack trace: #0 /httpdocs/tools/tcpdf/tcpdf.php(8613): Imagick->writeimage('/var/www/vhosts...') #1 /httpdocs/tools/tcpdf/tcpdf.php(8073): TCPDF->ImagePngAlpha('/var/www/vhosts...', 10.980722222222, -13.069277777778, 283, 61, 94.01935, 20.265654946996, 'PNG', '', 'B', false, 300, '', 'fb834670e959855...') #2 /httpdocs/tools/tcpdf/tcpdf.php(23813): TCPDF->Image('/var/www/vhosts...', 10.980722222222, -13.069277777778, 99.836111111111, 21.519444444444, '', '', 'B', false, 300, '', false, false, 0, false, false, true) #3 /httpdocs/tools/tcpdf/tcpdf.php(23209): TCPDF->openHTMLTagHandler(Array, 2, true) #4 /httpdocs/tools/tcpdf/tcpdf.php on line 8613
Sino, desde el servidor en los logs de Apache se ve también:
Este primer error que obtuve me indicaba, tras comprobar las carpetas en el servidor, que la carpeta /cache/tcpdf no existía en mi servidor. La creé, le dí permisos 777 para que pudiera escribir, y volví a probar el pdf de la factura. Realmente, tras pruebas posteriores, esta carpeta no es necesario que exista ya que la carpeta cache tiene permiso de escritura y borrado y la creará y borrará cuando se genere la factura. Por lo que no es necesario que exista permanentemente.
Ampliar memoria del servidor
El error que obtuve tras esta segunda prueba fue de memoria:
Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 51789 bytes) in /httpdocs/tools/tcpdf/tcpdf.php on line 8079
A partir de aquí, inicié muchas líneas de investigación:
- Amplié la memoria del servidor, modificando la variable max_limit del php.ini a 256mb
- Amplié el tiempo máximo de ejecución a 60 segundos
Actualizar la versión de TCPDF
Pero eso no era suficiente, seguía sin generarse. Por lo que actualicé la versión de TCPDF, ya que uno de los problemas que vi que ocurría es que la carpeta cache/tcpdf se llenaba de miles de archivos de pocos kb de tamaño llegando a ocupar 1.6Gb de espacio del servidor. Cogí la carpeta tools/tcpdf de una versión más antigua de prestashop en la que sí me funcionaba (v1.5.2.0) y la reemplacé en mi prestashop 1.5.3.1 que era donde me daba problemas, y tampoco se solucionaba el problema.
Otra vía de investigación que tomé fue descargarme la web completa en mi PC e instalarlo en Xampp y ver qué ocurría. Tras probar, los pdfs se generaban correctamente y en pocos segundos. El problema parecía estar en el servidor ya que en local no conseguía reproducirlo, ya que funcionaba correctamente. Pero no conseguía dar con la solución en el servidor.
Solución para generar la factura en Prestashop
Al final, investigando mucho, encontré en el foro de Prestashop que alguién averiguó que el problema estaba en el logo de la web. Un poco extraño, pero sí. Si el logo de las facturas está en PNG sucede este problema. Lo subí de nuevo en JPG y el problema desapareció. Las facturas se generaban correctamente en PDF. Aun así, sigo pensando de que en el servidor ha ocurrido algún cambio que desconozco, ya que mi cliente genera todas las facturas de sus pedidos al finalizar el trimestre para la declaración del IVA y hasta ahora no había tenido problemas.
Pero bueno, misterio resuelto, y a seguir vendiendo con Prestashop ;).
Conclusiones
Así que si os sucede algo similiar, ya sabéis que una de estas cosas puede resolver vuestro problema. Resumo:
- Ampliar la memoria del servidor
- Ampliar el tiempo máximo de ejecución
- Actualizar la versión de TCPDF
- Cambiar el logo de las facturas por uno que esté en JPG
Espero que os haya servido y no se os convierta este problema en un expediente x como me pasó a mí.
Muchas gracias por tu aportación me has salvado!!!
De nada. Gracias por tu comentario 😉
Gracias, gracias, gracias, gracias, gracias, gracias, gracias, gracias, gracias, gracias, gracias, gracias, gracias, gracias, gracias, gracias, gracias, gracias, gracias, gracias, gracias, gracias, gracias, gracias, gracias, gracias,.
Me estaba volviendo loco por no poder generar las facturas, y es que mi cliente habia cambiado el logo, porque habia decidido que no se veia lo suficientemente nítido.
Cuando lo he cambiado y se ha generado la factura, casi lloro.
jejeje. Me alegro que te haya funcionado. Saludos 😉