用PHP將資料匯入到Foxmail的實現代碼

來源:互聯網
上載者:User
最近小陽做了一個PHP同學錄,同學們自己在那裡添加或修改姓名、郵箱、OICQ等資訊,並儲存在mySQL資料庫裡。某日小陽突然想到,如果能用PHP產生一個檔案,供同學們下載並把這些資料匯入他們的Foxmail地址簿中,那該多好啊!

說幹就幹,很快小陽便將這功能推出來了。那是如何?的呢?這裡僅以匯出姓名、郵箱和OICQ三項予以說明。

  要資料可以匯入Foxmail地址簿,當然要先瞭解一下匯入Foxmail地址簿的檔案內容和格式。開啟Foxmail4.2一個帳戶的地址簿,在其功能表列“工具”-“匯入”中可以看到,Foxmail支援兩種外部檔案的匯入:“CSV檔案”和“Wab檔案”。我們選擇產生CSV檔案。那麼可以匯入Foxmail的CSV檔案的內容和格式如何呢?讓我們先從Foxmail匯出一個CSV檔案看一下。在Foxmail地址簿中選擇一個記錄不為空白的檔案夾,執行“工具”-“匯出”- “文字檔”,儲存檔案名稱為“TEMP.CSV”, 在“下一步”的“請選擇輸出欄位”中選擇“姓名”、“電子郵箱地址”和“OICQ”,點擊“完成”後便在指定路徑產生了“TEMP.CSV”檔案了。如果你裝了微軟office系列,會發現這是一個用EXCEL預設開啟的檔案,實際上它是EXCEL的逗點分隔值檔案,雙擊開啟後,其介面如圖所示。

  

  我們在這種情況下還是無法知道它的寫入格式的。將“TEMP.CSV”檔案改為用記事本開啟,便可以發現它的格式非常簡單:如圖,檔案第一行是Foxmail地址簿的欄位,其它行是欄位對應的值,各欄位和值用英文逗號分隔。所以我們在PHP中按這種格式產生CSV檔案,別人就可以下載並匯入他們的Foxmail中了!

  
不過還有一個問題需要解決,那就是既然檔案中以逗號作為分隔值,如果資料庫記錄中有英文逗號(註:以下符號若無特別說明皆指英文符號)怎麼辦?當然你可以先將資料中的逗號替換為中文逗號,但其實還有一個方法,那就是如果CSV檔案相應的欄位兩端加上雙引號(“即" "”)作分隔值,其間的英文逗號不作為分隔值,且欄位中連續兩個英文雙引號(即“""”)也只作為一個顯示,而不作為分隔值。
  有了這些認識,我們就可以編寫匯出CSV檔案的PHP檔案了:
複製代碼 代碼如下:
<? //這一行一定要放在程式的開始地方,不能有空格或換行。因為下面的header()函數不允許在使用前向使用者輸出任何東西。
$dfname="tofoxmail.csv"; //產生的檔案名稱
//串連mySQL資料庫:
mysql_connect("localhost","yourname","yourpassword") or die("不能串連資料庫!");
mysql_select_db("alumni") or die("資料庫發生錯誤!");
if($action=="downit"){
$getdata=mysql_query("SELECT name,email,oicq FROM classdata"); //選擇資料表中指定記錄
//如果沒有資料,則:
if(@mysql_num_rows($getdata)==0){
echo "對不起,還沒有任何資料!";
exit;
}
//以下產生一個檔案供下載:
header("Content-disposition: filename=$dfname");
header("Content-type: unknown/unknown");
echo "姓名,電子郵件地址,OICQ,foxaddrID"; //輸出第一行,Foxmail地址簿的欄位
$i=1;
while($row=mysql_fetch_array($getdata)){ //取得資料類型的值
//將資料中每一個雙引號替換為兩個:
$row[name]=str_replace("\"","\"\"",$row[name]);
$row[email]=str_replace("\"","\"\"",$row[email]);
$row[oicq]=str_replace("\"","\"\"",$row[oicq]);
//輸出相應欄位對應的值的行,每個值用雙引號和逗號作分隔字元:
echo base64_decode("DQo=")."\"$row[name]\",\"$row[email]\",\"$row[oicq]\",$i";
/*上式中“base64_decode("DQo=")”是分行符號,之所以不用“\n”,是因為兩者不完全相同,
用後者將可能導致Foxmail匯入失敗。
*/
$i++;
}
exit;
}
?>
<!--如果不是點擊了下載的連結,則顯示以下HTML內容-->
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>匯出資料到Foxmail地址簿</title></head>
<body> 點擊<a href="javascript:this.location=this.location+"?action=downit"">這裡</a>下載檔案,儲存並匯入到您的Foxmail地址簿中。<br>
<B>操作方法</B><br>
……
</body>
</html>

在伺服器上運行上述PHP檔案,下載回來的“tofoxmail.csv”檔案用記事本開啟如圖所示。

  在Foxmail地址簿中點擊“工具”-“匯入”-“CSV檔案”……,資料庫中一大堆的資料一下子就全被匯入了,這個主意還不錯吧!

  

  (以上程式在Apache+PHP4+mySQL和IIS+PHP4+mySQL中皆測試通過。)

相關文章

Cloud Intelligence Leading the Digital Future

Alibaba Cloud ACtivate Online Conference, Nov. 20th & 21st, 2019 (UTC+08)

Register Now >

Starter Package

SSD Cloud server and data transfer for only $2.50 a month

Get Started >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。