lunes, 20 de julio de 2009

Problema "Fatal error: allowed memory size of X exhausted"

Me ha surgido en el trabajo el siguiente problema. No me voy a molestar en cambiar demasiado el correo interno que sugería la solución.

El bloque de código que fallaba estaba localizado en otra parte de gd.func.php, al habernos visto forzados a resamplear las imágenes de otra manera (mediante la opción ‘2’ de las opciones de campo en el gestor). He comprobado que la imagen sí que conseguía subirla. Resampleaba el thumb y lo copiaba correctamente a su carpeta, pero fallaba al resamplear la imagen normal y dejaba el archivo sin resamplear dentro de uploads. De nuevo, el problema se concentraba en la función imagecreatetruecolor, pero en este caso no parecía deberse a un error de código.


Activé el ‘reporting’ de errores mediante ini_set(“display_errors”, 1); error_reporting (E_ALL | E_STRICT); , lo que me permitió ver que se estaba produciendo el siguiente error fatal:


Fatal error: allowed memory size of X exhausted (tried to allocate 49 bytes), siendo X un número cercano a 17M.


Parece que el servidor tiene asociada una memoria de trabajo baja que provoca errores en funciones que consumen considerable cantidad, como imagecreatetruecolor. Por fortuna, en este caso podemos establecer la variable memory_limit de php.ini a una cantidad superior para que tenga más margen. He corregido el problema, de momento, poniendo la siguiente orden antes de la llamada a la función imagetruecolor que fallaba:


ini_set (“memory_limit”, “20M”);


Si vuelve a fallar, habría que comprobar cuánta memoria está usando y cuánta más necesitaría, y en caso de que ya no se pueda andar cambiando los parámetros por ini_set no quedaría más remedio que sugerir al hosting que eche una mano.

No hay comentarios: