Error fatal: Tamaño de memoria permitido de 134217728 Bytes agotado (CodeIgniter + XML-RPC)
Tengo un montón de sistemas de punto de venta (TPV) de clientes que envían periódicamente nuevos datos de ventas a una base de datos centralizada, que almacena los datos en una gran base de datos para la generación de informes.
El TPV cliente está basado en PHPPOS, y he implementado un módulo que utiliza la librería estándar XML-RPC para enviar los datos de ventas al servicio. El sistema del servidor está construido sobre CodeIgniter, y utiliza las librerías XML-RPC y XML-RPCS para el componente de webservice. Siempre que envío muchos datos de ventas (tan solo 50 filas de la tabla de ventas, y filas individuales de sales_items pertenecientes a cada artículo dentro de la venta) obtengo el siguiente error:
Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 54 bytes)
128M es el valor por defecto en php.ini
, pero supongo que es un número enorme para romper. De hecho, incluso he probado a poner este valor a 1024M, y lo único que hace es que el error tarde más tiempo en producirse.
En cuanto a los pasos que he dado, he intentado desactivar todo el procesamiento en el lado del servidor, y lo he manipulado para que devuelva una respuesta enlatada independientemente de la entrada. Sin embargo, creo que el problema radica en el envío real de los datos. Incluso he probado a desactivar el tiempo máximo de ejecución del script para PHP, y sigue dando errores.
ini_set('memory_limit', '-1');
anula el [límite de memoria PHP] por defecto (http://php.net/memory_limit).Es muy fácil que se produzcan fugas de memoria en un script PHP - especialmente si se utiliza una abstracción, como un ORM. Intente usar Xdebug para perfilar su script y averiguar a dónde fue a parar toda esa memoria.
Para los usuarios de Drupal, esta respuesta de Chris Lane's de:
funciona pero hay que ponerlo justo después de la apertura
en el archivo index.php del directorio raíz de su sitio.