php檔案下載

傑楓Jeff發表於2015-07-22

  我們常常通過網頁下載各種各樣的檔案,到底是怎樣實現地呢?本文從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);

  這種方式更加詳細描述了下載檔案的過程。

  1. 開啟檔案,寫入記憶體。
  2. 計算檔案大小
  3. 設定頭資訊
  4. 輸出資料到快取
  5. 關閉檔案

 

相關文章