實(shí)現(xiàn)大文件下載的關(guān)鍵在于循環(huán)讀取字節(jié)流
function downloadFile($filename) {//獲取文件的擴(kuò)展名$allowDownExt = array ( rar , zip , png , txt , mp4 , html );//獲取文件信息$fileExt = pathinfo($filename);//檢測文件類型是否允許下載if(!in_array($fileExt[ extension ], $allowDownExt)) {return false;//設(shè)置腳本的最大執(zhí)行時間,設(shè)置為0則無時間限制set_time_limit(0);ini_set( max_execution_time , 0 );//通過header()發(fā)送頭信息//因?yàn)椴恢牢募鞘裁搭愋偷模嬖V瀏覽器輸出的是字節(jié)流header( content-type:application/octet-stream );//告訴瀏覽器返回的文件大小類型是字節(jié)header( Accept-Ranges:bytes );//獲得文件大小//$filesize = filesize($filename);//(此方法無法獲取到遠(yuǎn)程文件大小)$header_array = get_headers($filename, true);$filesize = $header_array[ Content-Length //告訴瀏覽器返回的文件大小header( Accept-Length: .$filesize);//告訴瀏覽器文件作為附件處理并且設(shè)定最終下載完成的文件名稱header( content-disposition:attachment;filename= .basename($filename));//針對大文件,規(guī)定每次讀取文件的字節(jié)數(shù)為4096字節(jié),直接輸出數(shù)據(jù)$read_buffer = 4096;$handle = fopen($filename, rb );//總的緩沖的字節(jié)數(shù)$sum_buffer = 0;//只要沒到文件尾,就一直讀取while(!feof($handle) $sum_buffer $filesize) {echo fread($handle,$read_buffer);$sum_buffer += $read_buffer;//關(guān)閉句柄fclose($handle);exit;}以上就是PHP如何實(shí)現(xiàn)大文件下載?(代碼實(shí)例)的詳細(xì)內(nèi)容,PHP教程
鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請第一時間聯(lián)系我們修改或刪除,多謝。
新聞熱點(diǎn)
疑難解答
圖片精選