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).È 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.
Per gli utenti di Drupal, questa risposta di Chris Lane:
funziona ma dobbiamo metterlo subito dopo l'apertura
nel file index.php nella directory principale del tuo sito.