項目中有個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