Heim > Backend-Entwicklung > PHP-Tutorial > Wie kann ich große Dateien in PHP effizient streamen, um Speichererschöpfung zu vermeiden?

Wie kann ich große Dateien in PHP effizient streamen, um Speichererschöpfung zu vermeiden?

Patricia Arquette
Freigeben: 2024-12-05 14:38:15
Original
480 Leute haben es durchsucht

How Can I Efficiently Stream Large Files in PHP to Avoid Memory Exhaustion?

Streaming großer Dateien mit PHP

In Szenarien, in denen Sie Benutzern einen einmaligen Download einer riesigen Datei sicher und ohne übermäßigen Aufwand anbieten möchten Speicher stellt sich die Frage: Wie können Sie die Datei effizient streamen?

Der herkömmliche Ansatz, file_get_contents() zu verwenden, um den gesamten Dateiinhalt gleichzeitig abzurufen erweist sich aufgrund möglicher Speicherbeschränkungen als unpraktisch. Um dieses Problem zu beheben, sollten Sie den Einsatz einer Streaming-Methode in Betracht ziehen, die Daten in überschaubaren Blöcken liefert.

Eine Lösung, wie in einer Online-Quelle vorgeschlagen, ist die Verwendung der Funktion readfile_chunked(). Mit dieser Funktion können Sie eine Blockgröße angeben und den Dateiinhalt iterativ lesen und ausgeben, um eine Speicherüberlastung zu vermeiden.

Das bereitgestellte Codebeispiel demonstriert die Implementierung dieses Ansatzes:

// Define the chunk size in bytes
define('CHUNK_SIZE', 1024*1024);

// Function to read a file and display its content chunk by chunk
function readfile_chunked($filename, $retbytes = TRUE) {
    $buffer = '';
    $cnt = 0;
    $handle = fopen($filename, 'rb');

    if ($handle === false) {
        return false;
    }

    while (!feof($handle)) {
        $buffer = fread($handle, CHUNK_SIZE);
        echo $buffer;
        ob_flush();
        flush();

        if ($retbytes) {
            $cnt += strlen($buffer);
        }
    }

    $status = fclose($handle);

    if ($retbytes & $status) {
        return $cnt; // Return the number of bytes delivered.
    }

    return $status;
}

// Restrict access to logged-in users
if ($logged_in) {
    $filename = 'path/to/your/file';
    $mimetype = 'mime/type';
    header('Content-Type: '.$mimetype );
    readfile_chunked($filename);
} else {
    echo 'Access denied.';
}
Nach dem Login kopieren

Dieser Ansatz Streamt die Datei in überschaubaren Blöcken, vermeidet Speicherbeschränkungen und stellt die Datei den Benutzern effizient zur Verfügung.

Das obige ist der detaillierte Inhalt vonWie kann ich große Dateien in PHP effizient streamen, um Speichererschöpfung zu vermeiden?. 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