您好,登錄后才能下訂單哦!
小編給大家分享一下PHP怎樣實現文件下載,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!
1、php下載原理圖
2、文件下載源碼:
<?php $file_name="哈哈.jpg";//需要下載的文件 $file_name=iconv("utf-8","gb2312","$file_name"); $fp=fopen($file_name,"r+");//下載文件必須先要將文件打開,寫入內存 if(!file_exists($file_name)){//判斷文件是否存在 echo "文件不存在"; exit(); } $file_size=filesize("a.jpg");//判斷文件大小 //返回的文件 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); ?>
3、文件編碼問題解決方法:
如果文件名是中文,php的函數不能識別中文文件名,一般如果程序編碼為utf-8,php的函數比較古老,只能識別gb2312編碼的中文,所以把中文用iconv(“原編碼”,”要轉成的編碼”,”要轉碼的字符串”)函數可以轉碼。
比如,把一個字符串從utf-8轉碼為gb2312
$file_name=iconv(“utf-8”,”gb2312”,”$file_name”);
4使用header方式實現文件下載源碼
附上整理的下載方法,已封裝好,可直接使用:
function download_by_path($path_name, $save_name){ ob_end_clean(); $hfile = fopen($path_name, "rb") or die("Can not find file: $path_name\n"); Header("Content-type: application/octet-stream"); Header("Content-Transfer-Encoding: binary"); Header("Accept-Ranges: bytes"); Header("Content-Length: ".filesize($path_name)); Header("Content-Disposition: attachment; filename=\"$save_name\""); while (!feof($hfile)) { echo fread($hfile, 32768); } fclose($hfile); }
以上是“PHP怎樣實現文件下載”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。