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.

19voto

Prem Kumar Maurya Punkte 437

Nachdem ich diese beiden Zeilen aktiviert hatte, funktionierte es:

; Determines the size of the realpath cache to be used by PHP. This value should
; be increased on systems where PHP opens many files to reflect the quantity of
; the file operations performed.
; http://php.net/realpath-cache-size
realpath_cache_size = 16k

; Duration of time, in seconds for which to cache realpath information for a given
; file or directory. For systems with rarely changing files, consider increasing this
; value.
; http://php.net/realpath-cache-ttl
realpath_cache_ttl = 120

16voto

mykeels Punkte 532

Anstatt die memory_limit Wert in Ihrem php.ini Datei, wenn es einen Teil Ihres Codes gibt, der viel Speicherplatz verbrauchen könnte, könnten Sie die memory_limit bevor dieser Abschnitt läuft, und ersetzen Sie ihn danach.

$limit = ini_get('memory_limit');
ini_set('memory_limit', -1);
// ... do heavy stuff
ini_set('memory_limit', $limit);

15voto

LK7889 Punkte 179

In Drupal 7 können Sie das Speicherlimit in der Datei settings.php in Ihrem Ordner sites/default ändern. In Zeile 260 sehen Sie dies:

ini_set('memory_limit', '128M');

Selbst wenn Ihre php.ini-Einstellungen hoch genug sind, werden Sie nicht in der Lage sein, mehr als 128 MB zu verbrauchen, wenn dies nicht in Ihrer Drupal settings.php-Datei eingestellt ist.

1 Stimmen

Nicht in Drupal7, dort gibt es keine solche Codezeile in der settings.php

0 Stimmen

Es gibt auch keinen String in der settings.php für drupal 6

14voto

Ändern Sie das Speicherlimit in der php.ini Datei und starten Sie Apache neu. Nach dem Neustart führen Sie die phpinfo(); Funktion aus einer beliebigen PHP-Datei für eine memory_limit Änderungsbestätigung.

memory_limit = -1

Speicherlimit -1 bedeutet, dass es kein Speicherlimit gibt. Es ist jetzt das Maximum erreicht.

12voto

Pankaj Pratik Rai Punkte 192

Fügen Sie einfach eine ini_set('memory_limit', '-1'); Zeile am oberen Rand Ihrer Webseite.

Und Sie können Ihren Speicher nach Bedarf anstelle von -1 einstellen, um 16M , usw..

13 Stimmen

Dies scheint das Gleiche zu sagen wie viele bereits vorhandene Antworten. Es ist am besten, nur dann eine Antwort auf eine beliebte Frage hinzuzufügen, wenn das neue Material etwas Neues bietet.

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