Erro Fatal: Tamanho de memória permitido de 134217728 Bytes Exaustos (CodeIgniter + XML-RPC)

Tenho um monte de sistemas de pontos de venda (POS) de clientes que periodicamente enviam novos dados de vendas para uma base de dados centralizada, que armazena os dados em uma grande base de dados para geração de relatórios.

O POS cliente é baseado em PHPPOS, e eu implementei um módulo que usa a biblioteca padrão XML-RPC para enviar dados de vendas para o serviço. O sistema servidor é construído no CodeIgniter e utiliza as bibliotecas XML-RPC e XML-RPCS para o componente webservice. Sempre que envio muitos dados de vendas (apenas 50 linhas da tabela de vendas e linhas individuais de sales_items referentes a cada item dentro da venda), recebo o seguinte erro:

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

128M é o valor padrão em php.ini, mas eu assumo que é um número enorme a ser quebrado. Na verdade, eu até tentei definir este valor para 1024M, e tudo o que eu faço é demorar mais tempo para errar.

Quanto aos passos I'tomei, I'tentei desabilitar todo o processamento no lado do servidor, e manipulei-o para retornar uma resposta enlatada, independentemente da entrada. Entretanto, eu acredito que o problema está no envio dos dados. I'tentei até mesmo desabilitar o tempo máximo de execução do script para o PHP, e ele ainda erra.

ini_set('memory_limit', '-1'); substitui o padrão limite de memória PHP.

Comentários (17)

É muito fácil obter vazamentos de memória em um script PHP - especialmente se você usa abstração, como um ORM. Tente usar Xdebug para traçar o perfil do seu script e descubra para onde foi toda essa memória.

Comentários (6)

Para usuários do Drupal, esta resposta de Chris Lane's:

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

funciona, mas temos de o colocar logo após a abertura.

<?php

no ficheiro index.php do seu site's root directory.

Comentários (0)