783 Stimmen

Schwerwiegender Fehler: Erlaubte Speichergröße von 134217728 Bytes erschöpft (CodeIgniter + XML-RPC)

Ich habe eine Reihe von POS-Systemen (Point of Sale), die regelmäßig neue Verkaufsdaten an eine zentrale Datenbank senden, die die Daten zur Berichterstellung in einer großen Datenbank speichert.

Die Client-Kasse basiert auf PHPPOS, und ich habe ein Modul implementiert, das die Standard-XML-RPC-Bibliothek verwendet, um Verkaufsdaten an den Dienst zu senden. Das Serversystem basiert auf CodeIgniter und verwendet die XML-RPC und XML-RPCS Bibliotheken für die Webservice-Komponente. Immer wenn ich viele Verkaufsdaten sende (nur 50 Zeilen aus der Verkaufstabelle und einzelne Zeilen aus sales_items, die sich auf jeden Artikel innerhalb des Verkaufs beziehen), erhalte ich den folgenden Fehler:

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

128M ist der Standardwert in php.ini aber ich gehe davon aus, dass das eine große Zahl ist, die es zu knacken gilt. In der Tat habe ich sogar versucht, diesen Wert auf 1024M, und alles, was es tut, ist eine längere Zeit dauern, um Fehler aus.

Was die Schritte angeht, die ich unternommen habe, so habe ich versucht, alle Verarbeitungen auf der Serverseite zu deaktivieren, und ich habe es so eingerichtet, dass ich unabhängig von der Eingabe eine vorgefertigte Antwort erhalte. Ich glaube jedoch, dass das Problem in der tatsächlichen Übermittlung der Daten liegt. Ich habe sogar versucht, die maximale Skriptausführungszeit für PHP zu deaktivieren, und es tritt immer noch ein Fehler auf.

6 Stimmen

Ich bin etwas verwirrt... wo tritt der Fehler auf - im Client oder im Server? Und in welchem Stadium... Client sendet, Server empfängt, Server verarbeitet, Server sendet, Client empfängt oder Client verarbeitet?

0 Stimmen

Wie/wo setzen Sie das memory_limit auf 1024M?

3 Stimmen

Der Fehler scheint entweder beim Senden durch den Client oder beim Empfangen durch den Server aufzutreten. Ich habe versucht, die gesamte serverseitige Verarbeitung zu deaktivieren und den Server so einzustellen, dass er unabhängig von den gesendeten Daten eine Standardantwort sendet. Der Fehler tritt auf, wenn ich mehr als eine bestimmte Menge an Daten sende. Ich habe die PHP.ini-Einstellung geändert.

-1voto

In meinem Fall war es eine volle Festplatte und mysql hat sich selbst beschissen.

Nachdem ich den Speicherplatz freigegeben, die Datenbank repariert und den Apache neu gestartet hatte, funktionierte meine Website wieder!

Irgendein vorbeifahrendes Kind hat es geschafft, meine Logs zu überfluten und die knappen 500 maybebytes, die ich noch auf der VM hatte, aufzufüllen :D

-8voto

Omar Al-Azzawi Punkte 1

Als ich die folgenden Zeilen aus meinem Code entfernt habe, hat alles funktioniert!

set_include_path(get_include_path() . get_include_path() . '/phpseclib');
include_once('Net/SSH2.php');
include_once('Net/SFTP.php');

Diese Zeilen waren in jeder Datei enthalten, die ich ausführte. Wenn ich die Dateien einzeln ausführe, funktionieren sie alle, aber wenn ich alle Dateien zusammen ausführe, habe ich das Problem mit dem Speicherverlust. Irgendwie die "include_once" ist nicht einschließlich Dinge einmal, oder ich bin etwas falsch machen ...

1 Stimmen

set_include_path(get_include_path() . get_include_path().'/phpseclib'); Dies fügt den Pfad '/phpseclib' einmal für jede Datei hinzu, die diese Zeile enthält... es kann also viele Male hinzugefügt werden! Ich würde vorschlagen, es in eine Einstellungsdatei zu packen und include_once die Einstellungsdatei.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X