„Wenn ein Arbeiter seine Arbeit gut machen will, muss er zuerst seine Werkzeuge schärfen.“ – Konfuzius, „Die Gespräche des Konfuzius. Lu Linggong“
Titelseite > Programmierung > Wie kann man große Dateien in PHP effizient verarbeiten, ohne dass es zu einer Speichererschöpfung kommt?

Wie kann man große Dateien in PHP effizient verarbeiten, ohne dass es zu einer Speichererschöpfung kommt?

Veröffentlicht am 31.10.2024
Durchsuche:342

How to Handle Large Files in PHP Efficiently without Causing Memory Exhaustion?

Verarbeiten großer Dateien mit PHP ohne Speichererschöpfung

Das Lesen und Verarbeiten großer Dateien in PHP kann aufgrund von Speicherbeschränkungen eine Herausforderung sein. Die Funktion file_get_contents() kann einen Fehler „Speicher erschöpft“ auslösen, wenn sie mit großen Dateien arbeitet, die mehr Speicher verbrauchen als zulässig.

Informationen zur Speicherzuordnung

Bei Verwendung von file_get_contents( ), wird die gesamte Datei gelesen und als String im Speicher abgelegt. Bei großen Dateien kann dies den zugewiesenen Speicher überschreiten und zu dem Fehler führen.

Alternativer Ansatz: Lesen von Chunked-Dateien

Um dieses Problem zu vermeiden, sollten Sie alternative Methoden verwenden, z B. fopen() und fread(), um die Datei in Blöcken zu lesen. Dadurch können Sie kleinere Abschnitte der Datei gleichzeitig verarbeiten und so die Speichernutzung effektiv verwalten. Hier ist eine Funktion, die diesen Ansatz implementiert:

function file_get_contents_chunked($file, $chunk_size, $callback)
{
    try {
        $handle = fopen($file, "r");
        $i = 0;
        while (!feof($handle)) {
            call_user_func_array($callback, [fread($handle, $chunk_size), &$handle, $i]);
            $i  ;
        }
        fclose($handle);
        return true;
    } catch (Exception $e) {
        trigger_error("file_get_contents_chunked::" . $e->getMessage(), E_USER_NOTICE);
        return false;
    }
}

Beispielverwendung

Um diese Funktion zu verwenden, definieren Sie einen Rückruf, der den Block verarbeitet, und stellen Sie die erforderlichen Parameter bereit:

$success = file_get_contents_chunked("my/large/file", 4096, function ($chunk, &$handle, $iteration) {
    /* Do something with the chunk */
});

Zusätzliche Überlegungen

Eine weitere Optimierung besteht darin, die Verwendung komplexer regulärer Ausdrücke zu vermeiden, die bei der Anwendung auf große Eingaben viel Speicher verbrauchen können. Erwägen Sie stattdessen die Verwendung nativer String-Funktionen wie strpos, substr und explosion.

Freigabeerklärung Dieser Artikel wird reproduziert unter: 1729143617 Wenn ein Verstoß vorliegt, wenden Sie sich bitte an [email protected], um ihn zu löschen.
Neuestes Tutorial Mehr>

Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.

Copyright© 2022 湘ICP备2022001581号-3