Fatal fejl: Tilladt hukommelsesstørrelse på 134217728 Bytes opbrugt (CodeIgniter + XML-RPC)

Jeg har en række POS-systemer (point of sale) hos kunderne, som regelmæssigt sender nye salgsdata til en central database, som gemmer dataene i en stor database til rapportgenerering.

Klientens POS-system er baseret på PHPPOS, og jeg har implementeret et modul, der bruger standard XML-RPC-biblioteket til at sende salgsdata til tjenesten. Server-systemet er bygget på CodeIgniter, og bruger XML-RPC- og XML-RPCS-bibliotekerne til webservicekomponenten. Når jeg sender mange salgsdata (så lidt som 50 rækker fra salgstabellen og individuelle rækker fra sales_items vedrørende hver enkelt vare inden for salget) får jeg følgende fejl:

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

128M er standardværdien i php.ini, men jeg antager at det er et stort tal at bryde. Faktisk har jeg endda prøvet at indstille denne værdi til 1024M, og det eneste det gør er at tage længere tid til at fejlmelde.

Hvad angår de skridt jeg har taget, har jeg prøvet at deaktivere al behandling på serversiden, og har rigget den til at returnere et dåsesvar uanset input. Jeg tror dog, at problemet ligger i selve afsendelsen af dataene. Jeg har endda prøvet at deaktivere den maksimale scriptudførelsestid for PHP, men den giver stadig fejl.

ini_set('memory_limit';, '-1'); tilsidesætter standard-PHP-hukommelsesgrænsen.

Kommentarer (17)

Det er meget nemt at få hukommelseslækager i et PHP-script - især hvis du bruger abstraktion, f.eks. en ORM. Prøv at bruge Xdebug til at profilere dit script og find ud af, hvor al den hukommelse blev af.

Kommentarer (6)

For Drupal-brugere er dette Chris Lane's svar på:

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

virker, men vi skal sætte det lige efter åbningen

<?php

tag i filen index.php i dit webstedets rodmappe.

Kommentarer (0)