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