實現大文件下載的關鍵在于循環讀取字節流
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;}
以上就是PHP如何實現大文件下載?(代碼實例)的詳細內容,PHP教程
鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。
|
新聞熱點
疑難解答