Menstrim Fail Besar dengan PHP
Apabila berurusan dengan fail besar yang melebihi had memori PHP, ia menjadi perlu untuk menstrim fail terus ke pelayar pengguna tanpa memuatkannya sepenuhnya ke dalam memori. Teknik ini membolehkan pengendalian data besar yang cekap tanpa menyebabkan masalah keletihan memori.
Satu pendekatan untuk menstrim fail ialah dengan menggunakan fungsi file_get_contents(). Walau bagaimanapun, kaedah ini memerlukan keseluruhan fail dimuatkan ke dalam memori, yang tidak sesuai untuk fail besar.
Untuk mengatasi had ini, kami boleh melaksanakan pendekatan chunking, di mana fail dibahagikan kepada ketulan yang lebih kecil dan distrim secara berurutan. Berikut ialah pendekatan yang disyorkan:
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.'; }
Dalam kod ini, fungsi readfile_chunked() membahagikan fail kepada ketulan 1MB dan menstrim setiap bahagian ke penyemak imbas pengguna. Pencairan penimbal output memastikan bahawa ketulan dihantar serta-merta tanpa menunggu keseluruhan fail dibaca.
Dengan melaksanakan pendekatan ini, anda boleh menstrim fail besar dengan cekap kepada pengguna tanpa menghadapi masalah memori.
Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Menstrim Fail Besar dalam PHP Tanpa Melebihi Had Memori?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!