標籤:html 處理 evo exp des ring microsoft 匯入 實現
PHP實現檔案下載PHP下載檔案js下載檔案
項目操作中不可避免要提供檔案的下載,有時候要寫一些邏輯判斷或者提示啥,那下載的方法就需要做些調整。做個下載檔案的集錦:
readfile — 輸出檔案 (手冊上有說明:讀入一個檔案並寫入到輸出緩衝。)
<?php$file = ‘monkey.gif‘ ;if ( file_exists ( $file )) { header ( ‘Content-Description: File Transfer‘ ); header ( ‘Content-Type: application/octet-stream‘ ); header ( ‘Content-Disposition: attachment; filename=‘ . basename ( $file )); header ( ‘Content-Transfer-Encoding: binary‘ ); header ( ‘Expires: 0‘ ); header ( ‘Cache-Control: must-revalidate‘ ); header ( ‘Pragma: public‘ ); header ( ‘Content-Length: ‘ . filesize ( $file )); ob_clean (); flush (); readfile ( $file ); exit;} ?>
2.使用js實現檔案下載,原理也是通過HTML5 a標籤設定download屬性就能實現。
<a href="./upload/user_excel/20161229.txt" download="20161229.txt"> 下 載 文 件 </a>
封裝的方法也就是使用實現上述a標籤的click事件。
#js通過HTML5 download屬性實現下載檔案 function DownloadFileJs( $dir,$filename ){ $url = $dir."/".$filename; $uploadjs = "<script type=\"text/javascript\" > var a = document.createElement(‘a‘); var url = \"".$url."\"; var filename = ‘".$filename."‘; a.href = url; a.download = filename; a.click();window.URL.revokeObjectURL(url); console.log(a); </script>"; echo ($uploadjs); exit; }?>
調用測試如下:
$dir = ‘./upload/user_excel‘; $filename = ‘20161229.txt‘; DownloadFileJs( $dir, $filename );
個人覺得此種方法比較靈活,當然也是相對而言,比如在進行excel匯入,後台在處理資料時需要反饋,彈出提示成功與否,再提供異常記錄(或操作記錄)的下載檔案,使用js就比較易處理這個邏輯,而若使用第一種輸出緩衝的方法,PHP語句會優先處理解析,會跳過提示,使用者體驗就不太好 。此種方法也有缺陷,它需要HTML5的支援,只要不是太過舊的瀏覽器都是支援的。當然也有其他的js方法下載,以後有機會會補充下去。
– 天行健,君子以自強不息!
PHP實現檔案下載