我們常常通過網頁下載各種各樣的文件,到底是怎樣實現地呢?本文從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);
這種方式更加詳細描述了下載文件的過程。