Menstrim Fail Besar dengan PHP
Dalam senario di mana anda ingin menawarkan pengguna muat turun satu kali fail besar-besaran dengan selamat tanpa menggunakan yang berlebihan ingatan, persoalan timbul: bagaimana anda boleh menstrim fail dengan cekap?
Pendekatan konvensional menggunakan file_get_contents() untuk mendapatkan semula keseluruhan kandungan fail secara serentak terbukti tidak praktikal kerana potensi had memori. Untuk menangani isu ini, pertimbangkan untuk menggunakan kaedah penstriman yang menghantar data dalam ketulan terurus.
Satu penyelesaian, seperti yang dicadangkan dalam sumber dalam talian, ialah menggunakan fungsi readfile_chunked(). Fungsi ini membolehkan anda menentukan saiz ketulan dan membaca dan mengeluarkan kandungan fail secara berulang, mengelakkan beban memori yang berlebihan.
Sampel kod yang disediakan menunjukkan pelaksanaan pendekatan ini:
// 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.'; }
Pendekatan ini menstrim fail dalam bahagian yang boleh diurus, mengelakkan kekangan memori dan menghantar fail kepada pengguna dengan cekap.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menstrim Fail Besar dengan Cekap dalam PHP untuk Mengelakkan Keletihan Memori?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!