概要
如何讓我們能夠以PHP從伺服器下載檔案到用戶端(Client side)的電腦呢?那第一個要映入你的眼簾的必定是HTTP(Hypertext Transfer Protocol)通訊協定的表頭(header),因為PHP就是透過HTTP協定來與用戶端進行資料交換,在下面我們提供兩個下載檔案的作法給各位參考。
建立檔案下載頁面
撰寫一支index_df.html的檔案下載網頁,在這個頁面中需要有兩個下載檔案的超連結,分別指向方法一和方法二的下載檔案的程式代碼。
<html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> <title>檔案下載頁面</title> </head> <body> <p><strong>方法一:簡單組合字串變數</strong></p> <p><a href="download_sf1.php" target="_blank">下載mycontacts.csv檔案</a></p> <p> </p> <p><strong>方法二:透過讀取某檔案串流</strong></p> <p><a href="download_sf2.php" target="_blank">下載mydoc.csv檔案</a></p> </body> </html>
下載檔案程式邏輯
方法一:簡單組合字串變數 (download_sf1.php)
<?php // 把目前的字串串流輸出到檔案 header('Content-Description: File Transfer'); header("Content-type: text/csv; charset=big5"); header("Content-disposition: attachment; filename=mycontacts.csv"); header('Expires: 0'); header('Cache-Control: must-revalidate'); header('Pragma: public'); // 這裏要注意是\r\n是Windows的換行符號,\n為Unix的換行符號 $content = "姓名,電話,住址,備註"."\r\n"; $content .= "N111,tel008,台北,nothing"."\r\n"; $content .= "N222,tel009,高雄,N/A"."\r\n"; // 將字串編碼由utf-8轉為big5(非必要) $content = iconv("utf-8","big5",$content); echo $content; ?>
方法二:透過讀取某檔案串流 (download_sf2.php)
<?php // 把伺服器的檔案串流輸出為指定檔案 header('Content-Description: File Transfer'); header("Content-type: text/csv; charset=big5"); //header('Content-Type: application/octet-stream'); header("Content-disposition: attachment; filename=mydoc.csv"); header('Expires: 0'); header('Cache-Control: must-revalidate'); header('Pragma: public'); $filename = "D:\\test_doc.csv"; if (file_exists($filename)) { // 讀取某一檔案且輸出檔案串流 readfile($filename); } ?>
(下載test_doc.csv檔案連結)
結論
總而言之,各位在進行網頁程式設計時,基礎的HTTP通訊協定的知識必不可少,不僅可以增進自己對用戶端(Client)與伺服器(Server)之間的互動關係之了解,還可以提升程式開發的效率。
沒有留言:
張貼留言