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