PHP實現文件下載

PHP實現文件下載

項目操做中不可避免要提供文件的下載,有時候要寫一些邏輯判斷或者提示啥,那下載的方法就須要作些調整。作個下載文件的集錦:javascript

  1. readfile — 輸出文件 (手冊上有說明:讀入一個文件並寫入到輸出緩衝。)php

  1. <?php 
  2. $file = 'monkey.gif'
  3.  
  4. if ( file_exists ( $file )) { 
  5. header ( 'Content-Description: File Transfer' ); 
  6. header ( 'Content-Type: application/octet-stream' ); 
  7. header ( 'Content-Disposition: attachment; filename=' . basename ( $file )); 
  8. header ( 'Content-Transfer-Encoding: binary' ); 
  9. header ( 'Expires: 0' ); 
  10. header ( 'Cache-Control: must-revalidate' ); 
  11. header ( 'Pragma: public' ); 
  12. header ( 'Content-Length: ' . filesize ( $file )); 
  13. ob_clean (); 
  14. flush (); 
  15. readfile ( $file ); 
  16. exit

  17. ?>  

2.使用js實現文件下載,原理也是經過HTML5 a標籤設置download屬性就能實現。css

  1. <a href="./upload/user_excel/20161229.txt" download="20161229.txt"> 下 載 文 件 </a>  

封裝的方法也就是使用實現上述a標籤的click事件。html

  1. #js經過HTML5 download屬性實現下載文件 
  2. function DownloadFileJs( $dir,$filename )
  3. $url = $dir."/".$filename;  
  4. $uploadjs = "<script type=\"text/javascript\" > 
  5. var a = document.createElement('a'); 
  6. var url = \"".$url."\"; 
  7. var filename = '".$filename."'; 
  8. a.href = url; 
  9. a.download = filename; 
  10. a.click();window.URL.revokeObjectURL(url); 
  11. console.log(a); 
  12. </script>"
  13. echo ($uploadjs);  
  14. exit
  15.  

  16. ?> 
  17.  

調用測試以下:java

  1. $dir = './upload/user_excel'
  2. $filename = '20161229.txt'
  3. DownloadFileJs( $dir, $filename ); 

我的以爲此種方法比較靈活,固然也是相對而言,好比在進行excel導入,後臺在處理數據時須要反饋,彈出提示成功與否,再提供異常記錄(或操做記錄)的下載文件,使用js就比較易處理這個邏輯,而若使用第一種輸出緩衝的方法,PHP語句會優先處理解析,會跳過提示,用戶體驗就不太好 。此種方法也有缺陷,它須要HTML5的支持,只要不是太過舊的瀏覽器都是支持的。固然也有其餘的js方法下載,之後有機會會補充下去。web

三、依據瀏覽器跳轉文件地址,#非文本(txt、js、css、html…)直接可下載文件的特性。瀏覽器

  1. header("location:.'./upload/user.xls'"); 
  2. die

此方法就比較靈活了,根據經驗很容易的選擇下載文件的方式。app

– 天行健,君子以自強不息!測試

相關文章
相關標籤/搜索