咱們經常經過網頁下載各類各樣的文件,究竟是怎樣實現地呢?本文從php的角度,結合http相關內容對文件下載作出相關討論。php
通常來講,經過超連接的方式能夠直接下載文件。html
<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()讀入一個文件而且寫入到輸出緩存。app
第二種:spa
$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);
這種方式更加詳細描述了下載文件的過程。code