Ich habe den folgenden ziemlich einfachen Test-PHP-Code, der die Daten extrahiert und sie in JSON-formatierten Text einfügt.
Ich bekomme den folgenden Fehler ..
Fataler Fehler: Erlaubte Speichergröße von 33554432 Bytes erschöpft (versucht, 1979603 Bytes zuzuweisen) in /var/www/test.php in Zeile 33
Wo Zeile 33 die json_encode()
-Zeile ist.
Gibt es eine Möglichkeit, dies effizienter zu machen? Der PHP.ini
ist bereits auf 32M als max gesetzt, also vom 8M-Standard her gesehen!
Sie codieren wahrscheinlich einen sehr großen Datensatz. Sie können jede Zeile einzeln codieren, anstatt sie in einem großen Vorgang zu codieren.
%Vor% Auf diese Weise codiert jeder Aufruf von json_encode()
nur ein kleines Array anstelle eines großen. Das Endergebnis ist das gleiche. Dies ist IMO die Lösung, die weniger Speicherplatz benötigt.
Beenden Sie das Duplizieren Ihres Datenbereichs
%Vor%hilft dabei, die Speichernutzung zu reduzieren
Als ersten Work-Around setzen Sie es auf 256M oder sogar 512M.
Es ist wahrscheinlich, dass der Datensatz, den MySQL Ihnen zurückgibt, ziemlich groß ist. Selbst wenn Ihr PHP sehr speichereffizient ist, erhalten Sie immer noch den OoM-Fehler. Als langfristige Lösung nutzen Sie die Anweisung LIMIT
( SELECT * FROM $table WHERE 1=1 LIMIT 0,30
(beginnend mit Index 0, 30 Elemente).
EDIT: Oh wow, ich habe das Problem nicht einmal von der ersten Lösung aus gesehen ... Nun, vielleicht ist es trotzdem eine gute Idee, LIMIT
deine Frage: -)