標籤:
php下載檔案的流程:
其實就是給予一個連結: <a href="指向處理檔案的地址"></a> 這樣,當前端點選連結的時候,指向處理檔案,比如download.php
本例題 在download.php同級目錄下有resume.docx檔案
<?php
$file_name = ‘resume.docx‘;
$file_sub_path =$_SERVER[‘DOCUMENT_ROOT‘].__ROOT__.‘/Public/Download/‘;
$file_path = $file_sub_path.$file_name;
if (!file_exists($file_path)){ //判斷檔案是否存在
echo "檔案不存在";
exit();
}
$fp = fopen($file_path,"r+") or die(‘開啟檔案錯誤‘); //下載檔案必須要將檔案先開啟。寫入記憶體
$file_size = filesize($file_path);
Header("Content-type:application/octet-stream");
//按照位元組格式返回
Header("Accept-Ranges:bytes");
//返迴文件大小
Header("Accept-Length:".$file_size);
//彈出用戶端對話方塊,對應的檔案名稱
Header("Content-Disposition:attachment;filename=".$file_name);
//防止伺服器瞬間壓力增大,分段讀取
$buffer = 1024;
while(!feof($fp)){
$file_data = fread($fp,$buffer);
echo $file_data;
}
fclose($fp);
}
知識點:
$_SERVER[‘DOCUMENT_ROOT‘]伺服器的根路徑,比如我的電腦上是 d:wamp/www
__ROOT__是THINKPHP中的用法,指向項目的根路徑,比如我的電腦是/tpblog
$file_sub_path 指向,所需要下載檔案的路徑 d:wamp/www/tpblog/Public/Download
但是我遇到了一個問題,就是如果檔案名稱改成中文的話,就會出現檔案不存在的錯誤
後來找到解決辦法是
在開始申明
header("Content-type: text/html;charset=utf-8");
申明網頁的編碼格式
然後強制轉換編碼
$file_name = iconv("utf-8","gbk//IGNORE",$file_name);
把UTF-8的編碼強制轉換為GBK
完整代碼如下:
本例題 在download.php同級目錄下有測試簡曆.docx檔案
header("Content-type: text/html;charset=utf-8");
$file_name = ‘測試簡曆.docx‘;
$file_name = iconv("utf-8","gbk//IGNORE",$file_name);
$file_sub_path =$_SERVER[‘DOCUMENT_ROOT‘].__ROOT__.‘/Public/Download/‘;
$file_path = $file_sub_path.$file_name;
if (!file_exists($file_path)){ //判斷檔案是否存在
echo "檔案不存在";
exit();
}
$fp = fopen($file_path,"r+") or die(‘開啟檔案錯誤‘); //下載檔案必須要將檔案先開啟。寫入記憶體
$file_size = filesize($file_path);
//返回的檔案流
Header("Content-type:application/octet-stream");
//按照位元組格式返回
Header("Accept-Ranges:bytes");
//返迴文件大小
Header("Accept-Length:".$file_size);
//彈出用戶端對話方塊,對應的檔案名稱
Header("Content-Disposition:attachment;filename=".$file_name);
//防止伺服器瞬間壓力增大,分段讀取
$buffer = 1024;
while(!feof($fp)){
$file_data = fread($fp,$buffer);
echo $file_data;
}
fclose($fp);
PHP中文名檔案下載實現