Rumah >pembangunan bahagian belakang >tutorial php >Bagaimanakah Saya Boleh Menstrim Fail Besar dalam PHP Tanpa Memuatkannya Sepenuhnya ke dalam Memori?
Menstrim Fail Besar dalam PHP
Fungsi file_get_contents terbina dalam PHP ialah cara yang mudah untuk membaca fail ke dalam rentetan, tetapi ia mempunyai had yang ketara: ia memuatkan keseluruhan fail ke dalam memori sekaligus. Ini boleh menjadi masalah untuk fail besar, kerana ia boleh menghabiskan had memori PHP anda dan menyebabkan skrip anda gagal.
Nasib baik, terdapat cara untuk menstrim fail besar kepada pengguna tanpa memuatkan semuanya ke dalam memori. Satu teknik melibatkan penggunaan fungsi readfile_chunked. Fungsi ini mengambil nama fail sebagai hujahnya dan menghantar kandungan fail ke penimbal output dalam ketulan saiz yang ditentukan.
Berikut ialah contoh cara menggunakan fungsi readfile_chunked:
define('CHUNK_SIZE', 1024 * 1024); // Size (in bytes) of tiles chunk // 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 num. bytes delivered like readfile() does. } return $status; } // Check if the user is logged in // ... if ($logged_in) { $filename = 'path/to/your/file'; $mimetype = 'mime/type'; header('Content-Type: ' . $mimetype); readfile_chunked($filename); } else { echo 'Tabatha says you haven\'t paid.'; }
Dalam contoh ini, kami mentakrifkan pemalar CHUNK_SIZE untuk menentukan saiz setiap bahagian (dalam bait). Fungsi readfile_chunked kemudian membaca fail dalam ketulan dan menghantarnya ke penimbal output. Fungsi ob_flush dan flush dipanggil untuk memastikan ketulan dihantar kepada klien semasa ia dijana.
Teknik ini membolehkan anda menstrim fail besar kepada pengguna tanpa perlu memuatkan keseluruhan fail ke dalam memori. Ia merupakan cara yang cekap untuk menghantar fail besar melalui sambungan HTTP.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menstrim Fail Besar dalam PHP Tanpa Memuatkannya Sepenuhnya ke dalam Memori?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!