Erreur fatale : La taille mémoire autorisée de 134217728 octets est épuisée (CodeIgniter + XML-RPC)

J'ai plusieurs systèmes de point de vente (POS) de clients qui envoient périodiquement les nouvelles données de vente à une base de données centralisée, qui stocke les données dans une grande base de données pour la génération de rapports.

Le POS client est basé sur PHPPOS, et j'ai implémenté un module qui utilise la bibliothèque standard XML-RPC pour envoyer les données de vente au service. Le système serveur est construit sur CodeIgniter, et utilise les bibliothèques XML-RPC et XML-RPCS pour le composant webservice. Chaque fois que j'envoie beaucoup de données sur les ventes (aussi peu que 50 lignes de la table des ventes, et des lignes individuelles de sales_items se rapportant à chaque article de la vente), j'obtiens l'erreur suivante :

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

128M est la valeur par défaut dans php.ini, mais je suppose que c'est un nombre énorme à casser. En fait, j'ai même essayé de fixer cette valeur à 1024M, et tout ce que cela fait est de prendre plus de temps pour l'erreur.

En ce qui concerne les mesures que j&#8217ai prises, j&#8217ai essayé de désactiver tout traitement du côté du serveur et j&#8217ai fait en sorte qu&#8217il renvoie une réponse standard quelle que soit l&#8217entrée. Cependant, je pense que le problème réside dans l'envoi réel des données. J&#8217ai même essayé de désactiver le temps d&#8217exécution maximal des scripts pour PHP, mais les erreurs persistent.

ini_set('memory_limit&#39 ;, '-1&#39 ;); remplace la [limite de mémoire PHP] par défaut (http://php.net/memory_limit).

Commentaires (17)

Il est très facile d'avoir des fuites de mémoire dans un script PHP, surtout si vous utilisez une abstraction, comme un ORM. Essayez d'utiliser Xdebug pour profiler votre script et découvrir où toute cette mémoire est passée.

Commentaires (6)

Pour les utilisateurs de Drupal, c&#8217est la réponse de Chris Lane :

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

fonctionne mais il faut le mettre juste après l'ouverture

<?php

dans le fichier index.php du répertoire racine de votre site.

Commentaires (0)