Effiziente Bearbeitung großer CSV-Dateien: Zeichenfolgen mit 30 Millionen Zeichen verarbeiten
Bei der Bearbeitung einer großen CSV-Datei tritt der Fehler „Nicht genügend Speicher“ auf Datei über Curl heruntergeladen. Die Datei enthält etwa 30,5 Millionen Zeichen und der Versuch, sie mithilfe von „r“ und „n“ in ein Zeilenarray aufzuteilen, schlägt aufgrund übermäßigen Speicherverbrauchs fehl. Um Zuordnungsfehler zu vermeiden, ziehen Sie alternative Ansätze in Betracht:
Streaming von Daten ohne Dateischreiben:
Verwenden Sie die Option CURLOPT_FILE, um Daten direkt in einen benutzerdefinierten Stream-Wrapper zu streamen, anstatt in ihn zu schreiben eine Datei. Durch die Definition Ihrer eigenen Stream-Wrapper-Klasse können Sie Datenblöcke sofort verarbeiten, ohne übermäßig viel Speicher zuzuweisen.
Beispiel für eine Stream-Wrapper-Klasse:
class MyStream { protected $buffer; function stream_open($path, $mode, $options, &$opened_path) { return true; } public function stream_write($data) { // Extract and process lines $lines = explode("\n", $data); $this->buffer = $lines[count($lines) - 1]; unset($lines[count($lines) - 1]); // Perform operations on the lines var_dump($lines); echo '<hr />'; return strlen($data); } }
Registrieren Sie den Stream-Wrapper:
stream_wrapper_register("test", "MyStream") or die("Failed to register protocol");
Configuration Curl mit dem Stream Wrapper:
$fp = fopen("test://MyTestVariableInMemory", "r+"); // Pseudo-file written to by curl curl_setopt($ch, CURLOPT_FILE, $fp); // Directs output to the stream
Mit diesem Ansatz können Sie weiterarbeiten Datenblöcke inkrementell, wodurch Speicherzuweisungen vermieden werden und die Arbeit mit großen Zeichenfolgen möglich wird.
Weitere Überlegungen:
Das obige ist der detaillierte Inhalt vonWie verarbeitet man große CSV-Dateien mit 30 Millionen Zeichen effizient?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!