Fatāla kļūda: Atļautais atmiņas lielums 134217728 baiti izsmelti (CodeIgniter + XML-RPC)

Man ir vairākas klientu pārdošanas punktu (POS) sistēmas, kas periodiski nosūta jaunus pārdošanas datus uz vienu centralizētu datubāzi, kurā dati tiek glabāti vienā lielā datubāzē pārskatu ģenerēšanai.

Klientu POS ir balstīta uz PHPPOS, un es esmu ieviesis moduli, kas izmanto standarta XML-RPC bibliotēku, lai nosūtītu pārdošanas datus uz pakalpojumu. Servera sistēma ir veidota uz CodeIgniter, un tā izmanto XML-RPC un XML-RPCS bibliotēkas tīmekļa pakalpojuma komponentei. Ikreiz, kad es sūtu daudz pārdošanas datu (tikai 50 rindas no pārdošanas tabulas un atsevišķas rindas no sales_items, kas attiecas uz katru pārdošanas vienību), es saņemu šādu kļūdu:

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

128M ir noklusējuma vērtība php.ini, bet es pieņemu, ka tas ir milzīgs skaitlis, lai to lauztu. Patiesībā es pat esmu mēģinājis iestatīt šo vērtību uz 1024M, un viss, ko tas dara, ir tas, ka kļūdas iznākšana aizņem ilgāku laiku.

Attiecībā uz pasākumiem, ko esmu veicis, esmu mēģinājis atspējot visu apstrādi servera pusē un esmu uzstādījis to, lai neatkarīgi no ievades atgrieztu konservētu atbildi. Tomēr es uzskatu, ka problēma ir faktiskajā datu nosūtīšanā. Esmu pat mēģinājis atslēgt maksimālo skripta izpildes laiku PHP, un tas joprojām kļūdās.

ini_set('memory_limit', '-1'); aizstāj noklusējuma PHP atmiņas limits.

Komentāri (17)

PHP skripta atmiņas noplūdes ir ļoti viegli panākt, īpaši, ja izmantojat abstrakcijas, piemēram, ORM. Izmēģiniet izmantot Xdebug, lai izveidotu skripta profilu un noskaidrotu, kur aizgāja visa šī atmiņa.

Komentāri (6)

Drupal lietotājiem, tas Chris Lane's atbilde:

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

darbojas, bet mums tas jāieliek uzreiz pēc atvēršanas

<?php

tagu index.php failā, kas atrodas jūsu vietnes saknes direktorijā.

Komentāri (0)