Heim > Backend-Entwicklung > PHP-Tutorial > Wie verarbeitet man große Zeichenfolgen, ohne die Speichergrenzen zu überschreiten?

Wie verarbeitet man große Zeichenfolgen, ohne die Speichergrenzen zu überschreiten?

Linda Hamilton
Freigeben: 2024-11-13 06:37:02
Original
1117 Leute haben es durchsucht

How to Process Huge Strings Without Exceeding Memory Limits?

Manipulieren von Zeichenfolgen, die die Speichergrenzen überschreiten

Beim Umgang mit übermäßig großen Zeichenfolgen, wie im Fall einer CSV-Datei mit 30 Millionen Zeichen, treten Speicherzuordnungsfehler auf entstehen kann. Um dieses Problem zu beheben, laden Sie nicht die gesamte Zeichenfolge in den Speicher. Verwenden Sie stattdessen alternative Strategien, um die Daten zu verarbeiten, ohne die Speichergrenzen zu überschreiten.

Alternative Ansätze:

  1. CURLOPT_FILE verwenden: CURLOPT_FILE verwenden Option in Verbindung mit CURL, um die Zieldatei anzugeben, in die die Daten geschrieben werden sollen. Dieser Ansatz ermöglicht das direkte Schreiben der Daten in eine Datei und vermeidet so Speicherbeschränkungen.
  2. Erstellen Sie einen benutzerdefinierten Stream-Wrapper: Durch das Erstellen eines benutzerdefinierten Stream-Wrappers können Sie Daten im Speicher verarbeiten, sobald sie ankommen anstatt die gesamte Zeichenfolge im Speicher zu speichern. Mit dieser Methode können Sie Daten in Blöcken verarbeiten und so den Speicherverbrauch reduzieren.

Beispielimplementierung mit Stream Wrapper:

class MyStream {
    protected $buffer;

    function stream_open($path, $mode, $options, &$opened_path) {
        // Has to be declared, it seems...
        return true;
    }

    public function stream_write($data) {
        $lines = explode("\n", $data);
        $lines[0] = $this->buffer . $lines[0];
        $nb_lines = count($lines);
        $this->buffer = $lines[$nb_lines-1];
        unset($lines[$nb_lines-1]);
        var_dump($lines); // Process data as needed
        echo '<hr />';
        return strlen($data);
    }
}

// Register custom stream
stream_wrapper_register("test", "MyStream");

// Configure curl with target "file"
$fp = fopen("test://MyTestVariableInMemory", "r+");
curl_setopt($ch, CURLOPT_FILE, $fp); // Data will be sent directly to stream

curl_exec($ch);
curl_close($ch); // Don't forget to close file / stream
fclose($fp);
Nach dem Login kopieren

Diese Strategie ermöglicht Ihnen die Verarbeitung die Daten inkrementell, sobald sie eintreffen, wodurch Probleme bei der Speicherzuweisung vermieden werden.

Das obige ist der detaillierte Inhalt vonWie verarbeitet man große Zeichenfolgen, ohne die Speichergrenzen zu überschreiten?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage