PHP實現大文件下載


實現大文件下載的關鍵在於循環讀取字節流

function downloadFile($filename) { //獲取文件的擴展名 $allowDownExt = array ( 'rar', 'zip', 'png', 'txt', 'mp4', 'html'); //獲取文件信息 $fileExt = pathinfo($filename); //檢測文件類型是否允許下載 if(!in_array($fileExt['extension'], $allowDownExt)) { return false; } //設置腳本的最大執行時間,設置為0則無時間限制 set_time_limit(0); ini_set('max_execution_time', '0'); //通過header()發送頭信息 //因為不知道文件是什么類型的,告訴瀏覽器輸出的是字節流 header('content-type:application/octet-stream'); //告訴瀏覽器返回的文件大小類型是字節 header('Accept-Ranges:bytes'); //獲得文件大小 //$filesize = filesize($filename);//(此方法無法獲取到遠程文件大小) $header_array = get_headers($filename, true); $filesize = $header_array['Content-Length']; //告訴瀏覽器返回的文件大小 header('Accept-Length:'.$filesize); //告訴瀏覽器文件作為附件處理並且設定最終下載完成的文件名稱 header('content-disposition:attachment;filename='.basename($filename)); //針對大文件,規定每次讀取文件的字節數為4096字節,直接輸出數據 $read_buffer = 4096; $handle = fopen($filename, 'rb'); //總的緩沖的字節數 $sum_buffer = 0; //只要沒到文件尾,就一直讀取 while(!feof($handle) && $sum_buffer<$filesize) { echo fread($handle,$read_buffer); $sum_buffer += $read_buffer; } //關閉句柄 fclose($handle); exit; }


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM