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.'; }
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!