Фатальна помилка: Allowed Memory Size of 134217728 Bytes Exhausted (CodeIgniter + XML-RPC)

У мене є купа клієнтських POS-систем, які періодично відправляють нові дані про продажі в одну централізовану базу даних, яка зберігає ці дані в одну велику базу даних для формування звітів.

Клієнтська POS заснована на PHPPOS, і я реалізував модуль, який використовує стандартну бібліотеку XML-RPC для відправки даних про продажі в сервіс. Серверна система побудована на CodeIgniter, і використовує бібліотеки XML-RPC і XML-RPCS для компонента веб-сервісу. Щоразу, коли я відправляю велику кількість даних про продажі (до 50 рядків з таблиці sales, а також окремі рядки з sales_items, що стосуються кожного товару в межах продажу), я отримую наступну помилку:

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

128M - це значення за замовчуванням в php.ini, але я припускаю, що це величезне число, яке можна порушити. Насправді, я навіть спробував встановити це значення на 1024M, і все, що це робить, це займає більше часу для помилки.

Що стосується кроків, які я зробив, я спробував відключити всю обробку на стороні сервера, і налаштував його так, щоб він повертав шаблонну відповідь незалежно від введених даних. Однак, я вважаю, що проблема полягає у фактичній відправці даних. Я навіть спробував відключити максимальний час виконання сценарію для PHP, і він все одно видає помилку.

ini_set('memory_limit', '-1'); перевизначає значення за замовчуванням ліміт пам'яті PHP.

Коментарі (17)

Отримати витік пам'яті в PHP-скрипті дуже легко, особливо якщо ви використовуєте абстракції, такі як ORM. Спробуйте використовувати Xdebug для профілювання вашого скрипта і з'ясувати, куди пішла вся пам'ять.

Коментарі (6)

Для користувачів Drupal ця відповідь Кріса Лейна:

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

працює, але ми повинні поставити його відразу після відкриття

<?php

у файлі index.php в кореневому каталозі вашого сайту.

Коментарі (0)