PHP下載大文件


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

 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....,找到如下代碼:

<?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;

完美解決!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM