„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 vermeide ich Speichererschöpfung bei der Verarbeitung großer Dateien in PHP mit File_get_contents?

Wie vermeide ich Speichererschöpfung bei der Verarbeitung großer Dateien in PHP mit File_get_contents?

Veröffentlicht am 23.11.2024
Durchsuche:948

How to Avoid Memory Exhaustion When Processing Large Files in PHP Using File_get_contents?

Bei der Dateiverarbeitung mit File_get_contents kommt es zu Speichererschöpfung

Wenn Sie mit großen Dateien in PHP arbeiten, verwenden Sie die Funktion „file_get_contents“, um den gesamten Dateiinhalt abzurufen Eine Variable kann Speicherauslastungsfehler verursachen. Dies liegt daran, dass sich die Variable, die den Dateiinhalt enthält, im Speicher befindet und bei großen Dateien das zugewiesene Speicherlimit überschritten werden kann.

Um dieses Problem zu lösen, besteht ein effizienterer Ansatz darin, Dateizeiger zu verwenden und die Datei zu verarbeiten in Stücken. Auf diese Weise wird jeweils nur der aktuelle Teil der Datei im Speicher gehalten.

Hier ist eine benutzerdefinierte Funktion, die diese Chunked-Dateiverarbeitung 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;
    }
}

Um diese Funktion zu verwenden, definieren Sie eine Rückruffunktion, um jeden Datenblock zu verarbeiten:

$success = file_get_contents_chunked("my/large/file", 4096, function($chunk, &$handle, $iteration) {
    // Perform file processing here
});

Darüber hinaus sollten Sie erwägen, Ihre Regex-Operationen umzugestalten, um native String-Funktionen wie strpos, substr, trim und explosion zu verwenden. Dies kann die Leistung beim Arbeiten mit großen Dateien erheblich verbessern.

Freigabeerklärung Dieser Artikel wird reproduziert unter: 1729143376 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