Để tải xuống file lớn qua script PHP, mã như sau:
Ví dụ
<?php
function readfile_chunked($filename, $retbytes = true) {
$chunksize = 1 * (1024 * 1024); // số byte mỗi chunk muốn đọc
$buffer = '';
$cnt = 0;
$handle = fopen($filename, 'rb');
if ($handle === false) {
return false;
}
while (!feof($handle)) {
$buffer = fread($handle, $chunksize);
echo $buffer;
if ($retbytes) {
$cnt += strlen($buffer);
}
}
$status = fclose($handle);
if ($retbytes && $status) {
return $cnt; // trả về số byte đã truyền như readfile()
}
return $status;
}
?>
Kết quả
File lớn sẽ được tải xuống.
Hàm 'readfile_chunked' (tự định nghĩa) nhận hai tham số: tên file và giá trị mặc định 'true' cho số byte trả về, nghĩa là file lớn đã tải xuống thành công. Biến 'chunksize' khai báo số byte mỗi chunk cần đọc. Biến 'buffer' gán null và 'cnt' đặt bằng 0. File mở ở chế độ đọc nhị phân và gán cho biến 'handle'.
Cho đến khi hết file của 'handle', vòng lặp while chạy và đọc nội dung file dựa trên số chunk cần đọc. Tiếp theo hiển thị ra màn hình. Nếu giá trị 'retbytes' (tham số thứ hai của hàm) là true, độ dài buffer được cộng vào biến 'cnt'. Ngược lại, file được đóng và giá trị 'cnt' trả về. Cuối cùng, hàm trả về 'status'.