Errore fatale: Allowed Memory Size of 134217728 Bytes Exhausted (CodeIgniter + XML-RPC)

Ho un mucchio di sistemi di punti vendita (POS) dei clienti che periodicamente inviano nuovi dati di vendita a un database centralizzato, che memorizza i dati in un grande database per la generazione di rapporti.

Il POS client è basato su PHPPOS, e ho implementato un modulo che usa la libreria standard XML-RPC per inviare i dati di vendita al servizio. Il sistema server è costruito su CodeIgniter, e usa le librerie XML-RPC e XML-RPCS per il componente webservice. Ogni volta che invio molti dati di vendita (fino a 50 righe dalla tabella delle vendite, e singole righe da sales_items relative a ciascun articolo all'interno della vendita) ottengo il seguente errore:

Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 54 bytes)

128M è il valore predefinito in php.ini, ma presumo che sia un numero enorme da rompere. In effetti, ho anche provato a impostare questo valore a 1024M, e tutto ciò che fa è un tempo più lungo per l'errore.

Per quanto riguarda i passi che ho fatto, ho provato a disabilitare tutta l'elaborazione sul lato server, e l'ho truccato per restituire una risposta in scatola indipendentemente dall'input. Tuttavia, credo che il problema risieda nell'effettivo invio dei dati. Ho anche provato a disabilitare il tempo massimo di esecuzione dello script per PHP, e continua a dare errori.

ini_set('memory_limit', '-1'); sovrascrive il [limite di memoria PHP] predefinito (http://php.net/memory_limit).

Commentari (17)

È molto facile avere perdite di memoria in uno script PHP - specialmente se si usa un'astrazione, come un ORM. Prova ad usare Xdebug per tracciare il profilo del tuo script e scoprire dove è finita tutta quella memoria.

Commentari (6)

Per gli utenti di Drupal, questa risposta di Chris Lane:

ini_set('memory_limit', '-1');

funziona ma dobbiamo metterlo subito dopo l'apertura

<?php

nel file index.php nella directory principale del tuo sito.

Commentari (0)