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