Heim > Backend-Entwicklung > PHP-Tutorial > Wie kann ich große Dateien in PHP streamen, ohne die Speichergrenzen zu überschreiten?

Wie kann ich große Dateien in PHP streamen, ohne die Speichergrenzen zu überschreiten?

Barbara Streisand
Freigeben: 2024-12-06 03:21:11
Original
608 Leute haben es durchsucht

How Can I Stream Large Files in PHP Without Exceeding Memory Limits?

Große Dateien mit PHP streamen

Beim Umgang mit großen Dateien, die das Speicherlimit von PHP überschreiten, ist es notwendig, die Datei direkt an die zu streamen Browser des Benutzers, ohne es vollständig in den Speicher zu laden. Diese Technik ermöglicht die effiziente Verarbeitung großer Datenmengen, ohne dass es zu Problemen mit der Speichererschöpfung kommt.

Ein Ansatz zum Streamen von Dateien ist die Verwendung der Funktion file_get_contents(). Allerdings erfordert diese Methode, dass die gesamte Datei in den Speicher geladen wird, was bei großen Dateien nicht möglich ist.

Um diese Einschränkung zu überwinden, können wir einen Chunking-Ansatz implementieren, bei dem die Datei in kleinere Stücke aufgeteilt und gestreamt wird Der Reihe nach. Hier ist ein empfohlener Ansatz:

define('CHUNK_SIZE', 1024*1024); // Size (in bytes) of tiles chunk

// 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 num. bytes delivered like readfile() does.
    }

    return $status;
}

if (/* User is 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

In diesem Code unterteilt die Funktion readfile_chunked() die Datei in 1 MB große Blöcke und streamt jeden Block an den Browser des Benutzers. Durch das Leeren der Ausgabepuffer wird sichergestellt, dass die Blöcke sofort gesendet werden, ohne auf das Lesen der gesamten Datei warten zu müssen.

Durch die Implementierung dieses Ansatzes können Sie große Dateien effizient an Benutzer streamen, ohne dass Speicherprobleme auftreten.

Das obige ist der detaillierte Inhalt vonWie kann ich große Dateien in PHP streamen, 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