PHP下載大文件

項目中有個700M左右的大文件,須要下載到本地電腦上,在網上找了段代碼,以下:php

 1 <?php  2             $realname = "xxx.pdf";  3             $filename = "xxx.pdf";  4             set_time_limit(0);  5             $filesize = filesize($realname);  6             header('Content-Description: File Transfer');  7             header('Content-Type: application/octet-stream');  8             header('Content-Transfer-Encoding: binary');  9             header('Accept-Ranges: bytes'); 10             header('Expires: 0'); 11             header('Cache-Control: must-revalidate'); 12             header('Pragma: public'); 13             header('Content-Length: ' . $filesize); 14             header('Content-Disposition: attachment; filename=' . $filename); 15 
16             // 打開文件
17             $fp = fopen($realname, 'rb'); 18             // 設置指針位置
19             fseek($fp, 0); 20 
21             // 開啓緩衝區
22             ob_start(); 23             // 分段讀取文件
24             while (!feof($fp)) { 25                 $chunk_size = 1024 * 8; // 8kb
26                 echo fread($fp, $chunk_size); 27                 ob_flush(); // 刷新PHP緩衝區到Web服務器
28                 flush(); // 刷新Web服務器緩衝區到瀏覽器
29                 sleep(1); // 每1秒 下載 8 KB
30  } 31             // 關閉緩衝區
32             ob_end_clean(); 33 
34             fclose($fp);

完美下載!可是當部署到線上時,出現了問題:瀏覽器

說明:測試環境爲http,線上環境爲https服務器

繼續google....,找到以下代碼:app

<?php $realname = "xxx.pdf"; $filename = "xxx.pdf"; set_time_limit(0); $filesize = filesize($realname); header('Content-Description: File Transfer'); header('Content-Type: application/octet-stream'); header('Content-Transfer-Encoding: binary'); header('Accept-Ranges: bytes'); header('Expires: 0'); header('Cache-Control: must-revalidate, post-check=0, pre-check=0'); header('Pragma: public'); header('Content-Length: ' . $filesize); header('Content-Disposition: attachment; filename=' . $filename); // 打開文件
            $fp = fopen($realname, 'rb'); ob_clean(); ob_end_flush(); while (!feof($fp)) { echo fread($fp, $filesize); ob_flush(); // 刷新PHP緩衝區到Web服務器
                flush(); // 刷新Web服務器緩衝區到瀏覽器
 } fclose($fp); exit;

完美解決!post

相關文章
相關標籤/搜索