php實現文件下載有許多的方法最多的就是直接顯示文件路徑了然后點擊下載即可,另一種是利用header函數再由filesize與fopen讀取文件進行下載了,這個可以實現限速下載了,但是個人認為使用header限速下載大文件是非常的不理想的,下面我們來看個例子.
例子,代碼如下:
- <?php
- header("Content-Type; text/html; charset=utf-8");
- class DownFile {
- public static function File($_path,$file_name) {
- //解決中文亂碼問題
- $_path=$_path.$file_name;
- //判斷文件是否存在
- if (!file_exists($_path)) {
- exit('文件不存在');
- }
- $_path=iconv('utf-8','gb2312',$_path);
- $file_size=filesize($_path);
- $fp=fopen($_path,'r');
- header("Content-type: application/octet-stream");
- header("Accept-Ranges: bytes");
- header("Accept-Length: $file_name");
- header("Content-Disposition: attachment; filename=$file_name");
- $buffer=1024;
- $file_count=0;
- while (!feof($fp) && ($file_size-$file_count>0)) {
- $file_data=fread($fp,$buffer);
- $file_count+=$buffer;
- echo $file_data;
- }
- fclose($fp);
- }
- }
- //路徑
- $path='../';
- //文件名
- $file_name='filelist.php';
- DownFile::File($path,$file_name);
- ?>
分析研究:使用header函數可以把像服務器端的腳本程序不需打包就可以進行下載了,像如php文件或html文件了,上面例子的核心語句是,代碼如下:
- $_path=iconv('utf-8','gb2312',$_path);
- $file_size=filesize($_path);
- $fp=fopen($_path,'r');
- header("Content-type: application/octet-stream");
- header("Accept-Ranges: bytes");
- header("Accept-Length: $file_name");
- header("Content-Disposition: attachment; filename=$file_name");
- $buffer=1024;
- $file_count=0;
- while (!feof($fp) && ($file_size-$file_count>0)) {
- $file_data=fread($fp,$buffer);
- $file_count+=$buffer;
- echo $file_data;
- }
下面三句,一個轉換文件名編碼這個防止中文亂碼,第一個是獲取文件大小,第三個是使用fopen讀取文件,代碼如下:
- $_path=iconv('utf-8','gb2312',$_path);
- $file_size=filesize($_path);
- $fp=fopen($_path,'r');
下面幾行代碼是告訴瀏覽器我們要發送的文件是什么內容與文件名,代碼如下:
- header("Content-type: application/octet-stream");
- header("Accept-Ranges: bytes");
- header("Accept-Length: $file_name");
- header("Content-Disposition: attachment; filename=$file_name");
下面三行是告訴我們最大下載不能超過1MB第秒,并且循環一直下載,直到文件下載完畢即可,代碼如下:
- $buffer=1024;
- $file_count=0;
- while (!feof($fp) && ($file_size-$file_count>0)) {
- $file_data=fread($fp,$buffer);
- $file_count+=$buffer;
- echo $file_data;
- //開源代碼Vevb.com
新聞熱點
疑難解答