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, c'est prendre plus de temps pour se tromper.
Pour ce qui est des mesures que j'ai prises, j'ai essayé de désactiver tous les traitements du côté serveur et j'ai fait en sorte que le serveur renvoie une réponse standard quelle que soit l'entrée. Cependant, je pense que le problème réside dans l'envoi effectif des données. J'ai même essayé de désactiver le temps d'exécution maximum de script pour PHP, et il y a toujours des erreurs.
5 votes
Je suis un peu perdu... où l'erreur se produit-elle - dans le client ou le serveur ? Et à quelle étape... envoi par le client, réception par le serveur, traitement par le serveur, envoi par le serveur, réception par le client ou traitement par le client ?
0 votes
Comment/où définissez-vous la limite de mémoire à 1024M ?
2 votes
L'erreur semble se produire soit pendant l'envoi par le client, soit pendant la réception par le serveur. J'ai essayé de désactiver tous les traitements côté serveur et de faire en sorte qu'il envoie une réponse fixe, quelles que soient les données envoyées. L'erreur se produit si j'envoie plus d'une certaine quantité de données. Je modifie le paramètre PHP.ini.
0 votes
Voici le code que j'utilise... J'ai également inclus la bibliothèque XML-RPC utilisée pour le client : yousendit.com/download/U0d4SlIzcVg4aVBIRGc9PQ (Client) yousendit.com/download/U0d4SlIzcVhPSHhMWEE9PQ (Contrôleur Codeigniter) Merci pour votre temps, par avance :)
47 votes
La limite de mémoire est de 128 Mo, doublez-la :
ini_set('memory_limit', '256M');
12 votes
Le résumé a déclassé toutes les réponses du type "ignorez la fuite", les personnes qui ont confondu CodeIgniter et Drupal et celles qui ont copié-collé les réponses des autres pour obtenir des points. La qualité des réponses à cette question est épouvantable.
1 votes
Duplicata possible de La taille de mémoire autorisée de 33554432 octets est épuisée (tentative d'allocation de 43148176 octets) en php
1 votes
Aucune des réponses ne semble aborder le fait que la taille de la mémoire allouée n'est pas réellement dépassée (comme par l'erreur), cela ressemble à une situation de boucle infinie .
0 votes
Le nombre de personnes suggérant d'ignorer une fuite de mémoire potentielle est hallucinant ici. Je n'ai jamais vu autant de mauvais conseils de gestion de la mémoire concentrés en un seul endroit.