Speicher erschöpft Fehler für json_parse mit PHP
Ich habe den folgenden code:
<?php
$FILE="giant-data-barf.txt";
$fp = fopen($FILE,'r');
//read everything into data
$data = fread($fp, filesize($FILE));
fclose($fp);
$data_arr = json_decode($data);
var_dump($data_arr);
?>
Die Datei giant-data-barf.txt ist, wie der name schon sagt, eine riesige Datei(5,4 mb, gerade jetzt, aber es könnte gehen bis zu mehreren GB)
Wenn ich das Skript, bekomme ich die folgende Fehlermeldung:
Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 71 bytes) in ........./data.php on line 12
Schaute ich auf mögliche Lösungen, und sah dies:
ini_set('memory_limit','16M');
und meine Frage ist, gibt es ein limit, wie groß sollte ich mein Gedächtnis? Oder gibt es eine bessere Möglichkeit, dieses problem zu lösen?
- Dies kann nicht ein job von PHP ist perfekt geeignet für. Können Sie Befehlszeilen-tools?
- flat-file-Speicher von einer Datei, die Größe zu führen, dass Sie viele Probleme. Verwenden von sqlite oder mysql. wenn die Datei enthält nur eine variable, die wurde json codiert und es ist, dass riesige, es ist unwahrscheinlich, dass Sie werde in der Lage sein, diese zu lösen. json ist nicht dazu gedacht, für so große Dateien. Verwenden Sie eine Datenbank oder speichern Sie Sie in CSV, oder speichern Sie jede Zeile in der json anstatt die ganze Sache
- Das problem ist nur, jemanden exportieren ist mir die gesamte DB im JSON-format...
- Wie etwa JSON-streaming-parser? github.com/salsify/jsonstreamingparser
Du musst angemeldet sein, um einen Kommentar abzugeben.
DIES IST EINE SEHR SCHLECHTE IDEE, das heißt, Sie müssen
weil Sie gerade Lesen, die ganze Sache in Erinnerung. Sie können sehr gut stellen müssen, um das memory limit zu zwei mal die Größe der Datei, da Sie auch wollen
JSON_DECODE
BEACHTEN SIE, DASS AUF EINEM WEB-SERVER, DIES WIRD VERBRAUCHEN GROßE MENGEN AN SPEICHER UND MAN NICHT TUN SOLL, WENN DIE DATEI VIELE GIGABYTES WIE DU GESAGT HAST!!!!
Ist es wirklich ein Riesen JSON-blob? Sie sollten sich bei der Umwandlung dieser Daten in einer Datenbank oder einem anderen format, die Sie verwenden können zufällige oder Zeile zugreifen, mit vor Parsen mit PHP.
Ich habe alle meine Server ein
memory_limit
von 100M... und nicht in Schwierigkeiten noch.Ich würde aufteilen, dass die Datei irgendwie, oder es loswerden und nutzen eine Datenbank