PHP字串長度找子字串與取代字串的常用函數

PHP在字串的操作上,有非常多的相關函數可以使用,我們在這裡只介紹經常會使用到的字串操作函數。像是如何取得字串的長度、在某一個字裏面尋找子字串首次出現的位置、以及字串的取代函數...等等。這些都是在編寫程式的時候,頻繁被程式設計師使用到的基礎函數。 取得字串長度 <?...

2014年8月26日 星期二

PHP下載檔案實作

概要


如何讓我們能夠以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>&nbsp;</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)之間的互動關係之了解,還可以提升程式開發的效率。

沒有留言:

張貼留言