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’ai prises, j’ai essayé de désactiver tout traitement du côté du serveur et j’ai fait en sorte qu’il renvoie une réponse standard quelle que soit l’entrée. Cependant, je pense que le problème réside dans l'envoi réel des données. J’ai même essayé de désactiver le temps d’exécution maximal des scripts pour PHP, mais les erreurs persistent.
ini_set('memory_limit' ;, '-1' ;);
remplace la [limite de mémoire PHP] par défaut (http://php.net/memory_limit).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.
Pour les utilisateurs de Drupal, c’est la réponse de Chris Lane :
fonctionne mais il faut le mettre juste après l'ouverture
dans le fichier index.php du répertoire racine de votre site.