我們常常通過網頁下載各種各樣的檔案,到底是怎樣實現地呢?本文從php的角度,結合http相關內容對檔案下載做出相關討論。
一般來說,通過超連結的方式可以直接下載檔案。
<a href='要下載的檔案'>點選下載</a>
這一招可以應對很多格式的檔案如.exe,.rar等格式,但是應對圖片格式,html,txt等型別的檔案,點選連結只會直接顯示在瀏覽器上。那麼如何應對這種情況呢?這時候就需要php出場了。
在我有限的php程式設計經歷中,遇到過兩種php下載檔案的形式。整體上都是利用通過設定響應的header 來實現檔案下載。原理上沒有本質的不同。
第一種:
$file_name='檔名'; header ( 'Content-Disposition: attachment; filename=' . basename ( $file_name )); header ( 'Content-Length: '.filesize ( $file_name )); readfile ( $file_name );
其中$filename設定的是下載檔案的名稱。 通過readfile()讀入一個檔案並且寫入到輸出快取。
第二種:
$file_name='要下載的檔名'; $fp=fopen($file_name,"r+"); $file_size=filesize($file_name); //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);
這種方式更加詳細描述了下載檔案的過程。
- 開啟檔案,寫入記憶體。
- 計算檔案大小
- 設定頭資訊
- 輸出資料到快取
- 關閉檔案