用PHP將數(shù)據(jù)導(dǎo)入到Foxmail的實(shí)現(xiàn)代碼
更新時(shí)間:2010年09月05日 00:10:37 作者:
下面的原理就是用PHP生成一個(gè)文件,然后下載并把這些資料導(dǎo)入他們的Foxmail地址簿中。
最近小陽(yáng)做了一個(gè)PHP同學(xué)錄,同學(xué)們自己在那里添加或修改姓名、郵箱、OICQ等信息,并保存在mySQL數(shù)據(jù)庫(kù)里。某日小陽(yáng)突然想到,如果能用PHP生成一個(gè)文件,供同學(xué)們下載并把這些資料導(dǎo)入他們的Foxmail地址簿中,那該多好啊!
說干就干,很快小陽(yáng)便將這功能推出來(lái)了。那是如何實(shí)現(xiàn)的呢?這里僅以導(dǎo)出姓名、郵箱和OICQ三項(xiàng)予以說明。
要資料可以導(dǎo)入Foxmail地址簿,當(dāng)然要先了解一下導(dǎo)入Foxmail地址簿的文件內(nèi)容和格式。打開Foxmail4.2一個(gè)帳戶的地址簿,在其菜單欄“工具”-“導(dǎo)入”中可以看到,F(xiàn)oxmail支持兩種外部文件的導(dǎo)入:“CSV文件”和“Wab文件”。我們選擇生成CSV文件。那么可以導(dǎo)入Foxmail的CSV文件的內(nèi)容和格式如何呢?讓我們先從Foxmail導(dǎo)出一個(gè)CSV文件看一下。在Foxmail地址簿中選擇一個(gè)記錄不為空的文件夾,執(zhí)行“工具”-“導(dǎo)出”- “文本文件”,保存文件名為“TEMP.CSV”, 在“下一步”的“請(qǐng)選擇輸出字段”中選擇“姓名”、“電子郵箱地址”和“OICQ”,點(diǎn)擊“完成”后便在指定路徑生成了“TEMP.CSV”文件了。如果你裝了微軟office系列,會(huì)發(fā)現(xiàn)這是一個(gè)用EXCEL默認(rèn)打開的文件,實(shí)際上它是EXCEL的逗號(hào)分隔值文件,雙擊打開后,其界面如圖所示。
我們?cè)谶@種情況下還是無(wú)法知道它的寫入格式的。將“TEMP.CSV”文件改為用記事本打開,便可以發(fā)現(xiàn)它的格式非常簡(jiǎn)單:如圖,文件第一行是Foxmail地址簿的字段,其它行是字段對(duì)應(yīng)的值,各字段和值用英文逗號(hào)分隔。所以我們?cè)赑HP中按這種格式生成CSV文件,別人就可以下載并導(dǎo)入他們的Foxmail中了!

不過還有一個(gè)問題需要解決,那就是既然文件中以逗號(hào)作為分隔值,如果數(shù)據(jù)庫(kù)記錄中有英文逗號(hào)(注:以下符號(hào)若無(wú)特別說明皆指英文符號(hào))怎么辦?當(dāng)然你可以先將數(shù)據(jù)中的逗號(hào)替換為中文逗號(hào),但其實(shí)還有一個(gè)方法,那就是如果CSV文件相應(yīng)的字段兩端加上雙引號(hào)(“即" "”)作分隔值,其間的英文逗號(hào)不作為分隔值,且字段中連續(xù)兩個(gè)英文雙引號(hào)(即“""”)也只作為一個(gè)顯示,而不作為分隔值。
有了這些認(rèn)識(shí),我們就可以編寫導(dǎo)出CSV文件的PHP文件了:
<? //這一行一定要放在程序的開始地方,不能有空格或換行。因?yàn)橄旅娴膆eader()函數(shù)不允許在使用前向用戶輸出任何東西。
$dfname="tofoxmail.csv"; //生成的文件名
//連接mySQL數(shù)據(jù)庫(kù):
mysql_connect("localhost","yourname","yourpassword") or die("不能連接數(shù)據(jù)庫(kù)!");
mysql_select_db("alumni") or die("數(shù)據(jù)庫(kù)發(fā)生錯(cuò)誤!");
if($action=="downit"){
$getdata=mysql_query("SELECT name,email,oicq FROM classdata"); //選擇數(shù)據(jù)表中指定記錄
//如果沒有資料,則:
if(@mysql_num_rows($getdata)==0){
echo "對(duì)不起,還沒有任何資料!";
exit;
}
//以下生成一個(gè)文件供下載:
header("Content-disposition: filename=$dfname");
header("Content-type: unknown/unknown");
echo "姓名,電子郵件地址,OICQ,foxaddrID"; //輸出第一行,F(xiàn)oxmail地址簿的字段
$i=1;
while($row=mysql_fetch_array($getdata)){ //取得數(shù)據(jù)類型的值
//將數(shù)據(jù)中每一個(gè)雙引號(hào)替換為兩個(gè):
$row[name]=str_replace("\"","\"\"",$row[name]);
$row[email]=str_replace("\"","\"\"",$row[email]);
$row[oicq]=str_replace("\"","\"\"",$row[oicq]);
//輸出相應(yīng)字段對(duì)應(yīng)的值的行,每個(gè)值用雙引號(hào)和逗號(hào)作分隔符:
echo base64_decode("DQo=")."\"$row[name]\",\"$row[email]\",\"$row[oicq]\",$i";
/*上式中“base64_decode("DQo=")”是換行符,之所以不用“\n”,是因?yàn)閮烧卟煌耆嗤?
用后者將可能導(dǎo)致Foxmail導(dǎo)入失敗。
*/
$i++;
}
exit;
}
?>
<!--如果不是點(diǎn)擊了下載的鏈接,則顯示以下HTML內(nèi)容-->
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>導(dǎo)出資料到Foxmail地址簿</title></head>
<body> 點(diǎn)擊<a href='javascript:this.location=this.location+"?action=downit"'>這里</a>下載文件,保存并導(dǎo)入到您的Foxmail地址簿中。<br>
<B>操作方法</B><br>
……
</body>
</html>
在服務(wù)器上運(yùn)行上述PHP文件,下載回來(lái)的“tofoxmail.csv”文件用記事本打開如圖所示。
在Foxmail地址簿中點(diǎn)擊“工具”-“導(dǎo)入”-“CSV文件”……,數(shù)據(jù)庫(kù)中一大堆的資料一下子就全被導(dǎo)入了,這個(gè)主意還不錯(cuò)吧!

?。ㄒ陨铣绦蛟贏pache+PHP4+mySQL和IIS+PHP4+mySQL中皆測(cè)試通過。)
說干就干,很快小陽(yáng)便將這功能推出來(lái)了。那是如何實(shí)現(xiàn)的呢?這里僅以導(dǎo)出姓名、郵箱和OICQ三項(xiàng)予以說明。
要資料可以導(dǎo)入Foxmail地址簿,當(dāng)然要先了解一下導(dǎo)入Foxmail地址簿的文件內(nèi)容和格式。打開Foxmail4.2一個(gè)帳戶的地址簿,在其菜單欄“工具”-“導(dǎo)入”中可以看到,F(xiàn)oxmail支持兩種外部文件的導(dǎo)入:“CSV文件”和“Wab文件”。我們選擇生成CSV文件。那么可以導(dǎo)入Foxmail的CSV文件的內(nèi)容和格式如何呢?讓我們先從Foxmail導(dǎo)出一個(gè)CSV文件看一下。在Foxmail地址簿中選擇一個(gè)記錄不為空的文件夾,執(zhí)行“工具”-“導(dǎo)出”- “文本文件”,保存文件名為“TEMP.CSV”, 在“下一步”的“請(qǐng)選擇輸出字段”中選擇“姓名”、“電子郵箱地址”和“OICQ”,點(diǎn)擊“完成”后便在指定路徑生成了“TEMP.CSV”文件了。如果你裝了微軟office系列,會(huì)發(fā)現(xiàn)這是一個(gè)用EXCEL默認(rèn)打開的文件,實(shí)際上它是EXCEL的逗號(hào)分隔值文件,雙擊打開后,其界面如圖所示。

我們?cè)谶@種情況下還是無(wú)法知道它的寫入格式的。將“TEMP.CSV”文件改為用記事本打開,便可以發(fā)現(xiàn)它的格式非常簡(jiǎn)單:如圖,文件第一行是Foxmail地址簿的字段,其它行是字段對(duì)應(yīng)的值,各字段和值用英文逗號(hào)分隔。所以我們?cè)赑HP中按這種格式生成CSV文件,別人就可以下載并導(dǎo)入他們的Foxmail中了!

不過還有一個(gè)問題需要解決,那就是既然文件中以逗號(hào)作為分隔值,如果數(shù)據(jù)庫(kù)記錄中有英文逗號(hào)(注:以下符號(hào)若無(wú)特別說明皆指英文符號(hào))怎么辦?當(dāng)然你可以先將數(shù)據(jù)中的逗號(hào)替換為中文逗號(hào),但其實(shí)還有一個(gè)方法,那就是如果CSV文件相應(yīng)的字段兩端加上雙引號(hào)(“即" "”)作分隔值,其間的英文逗號(hào)不作為分隔值,且字段中連續(xù)兩個(gè)英文雙引號(hào)(即“""”)也只作為一個(gè)顯示,而不作為分隔值。
有了這些認(rèn)識(shí),我們就可以編寫導(dǎo)出CSV文件的PHP文件了:
復(fù)制代碼 代碼如下:
<? //這一行一定要放在程序的開始地方,不能有空格或換行。因?yàn)橄旅娴膆eader()函數(shù)不允許在使用前向用戶輸出任何東西。
$dfname="tofoxmail.csv"; //生成的文件名
//連接mySQL數(shù)據(jù)庫(kù):
mysql_connect("localhost","yourname","yourpassword") or die("不能連接數(shù)據(jù)庫(kù)!");
mysql_select_db("alumni") or die("數(shù)據(jù)庫(kù)發(fā)生錯(cuò)誤!");
if($action=="downit"){
$getdata=mysql_query("SELECT name,email,oicq FROM classdata"); //選擇數(shù)據(jù)表中指定記錄
//如果沒有資料,則:
if(@mysql_num_rows($getdata)==0){
echo "對(duì)不起,還沒有任何資料!";
exit;
}
//以下生成一個(gè)文件供下載:
header("Content-disposition: filename=$dfname");
header("Content-type: unknown/unknown");
echo "姓名,電子郵件地址,OICQ,foxaddrID"; //輸出第一行,F(xiàn)oxmail地址簿的字段
$i=1;
while($row=mysql_fetch_array($getdata)){ //取得數(shù)據(jù)類型的值
//將數(shù)據(jù)中每一個(gè)雙引號(hào)替換為兩個(gè):
$row[name]=str_replace("\"","\"\"",$row[name]);
$row[email]=str_replace("\"","\"\"",$row[email]);
$row[oicq]=str_replace("\"","\"\"",$row[oicq]);
//輸出相應(yīng)字段對(duì)應(yīng)的值的行,每個(gè)值用雙引號(hào)和逗號(hào)作分隔符:
echo base64_decode("DQo=")."\"$row[name]\",\"$row[email]\",\"$row[oicq]\",$i";
/*上式中“base64_decode("DQo=")”是換行符,之所以不用“\n”,是因?yàn)閮烧卟煌耆嗤?
用后者將可能導(dǎo)致Foxmail導(dǎo)入失敗。
*/
$i++;
}
exit;
}
?>
<!--如果不是點(diǎn)擊了下載的鏈接,則顯示以下HTML內(nèi)容-->
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>導(dǎo)出資料到Foxmail地址簿</title></head>
<body> 點(diǎn)擊<a href='javascript:this.location=this.location+"?action=downit"'>這里</a>下載文件,保存并導(dǎo)入到您的Foxmail地址簿中。<br>
<B>操作方法</B><br>
……
</body>
</html>
在服務(wù)器上運(yùn)行上述PHP文件,下載回來(lái)的“tofoxmail.csv”文件用記事本打開如圖所示。
在Foxmail地址簿中點(diǎn)擊“工具”-“導(dǎo)入”-“CSV文件”……,數(shù)據(jù)庫(kù)中一大堆的資料一下子就全被導(dǎo)入了,這個(gè)主意還不錯(cuò)吧!

?。ㄒ陨铣绦蛟贏pache+PHP4+mySQL和IIS+PHP4+mySQL中皆測(cè)試通過。)
相關(guān)文章
在Linux系統(tǒng)的服務(wù)器上隱藏PHP版本號(hào)的方法
這篇文章主要介紹了在Linux系統(tǒng)的服務(wù)器上隱藏PHP版本號(hào)的方法,有助于預(yù)防攻擊者針對(duì)PHP詳細(xì)版本的漏洞而發(fā)起的攻擊,需要的朋友可以參考下2015-06-06PHP實(shí)現(xiàn)類似于C語(yǔ)言的文件讀取及解析功能
這篇文章主要介紹了PHP實(shí)現(xiàn)類似于C語(yǔ)言的文件讀取及解析功能,結(jié)合實(shí)例形式分析了php讀取文件的相關(guān)函數(shù)與使用注意事項(xiàng),需要的朋友可以參考下2017-09-09php開啟與關(guān)閉錯(cuò)誤提示適用于沒有修改php.ini的權(quán)限
本節(jié)為大家介紹的是php開啟與關(guān)閉錯(cuò)誤提示的方法,如果不具備修改php.ini的權(quán)限,可以將如下代碼加入php文件中2014-10-10php遇到錯(cuò)誤Call to undefined function ImageCreate()解決方法
剛配置好服務(wù)器,運(yùn)行php的時(shí)候提示Call to undefined function imagecreate錯(cuò)誤,經(jīng)過百度發(fā)現(xiàn)是php不支持gd庫(kù),linux服務(wù)器需要重新make,windows下比較簡(jiǎn)單了,下面是具體的方法2021-09-09PHP/ThinkPHP實(shí)現(xiàn)批量打包下載文件的方法示例
最近因?yàn)楣ぷ鞯男枰鶕?jù)條件自動(dòng)打包供下載的功能,查找相關(guān)資料終于解決了,所以下面這篇文章主要給大家介紹了利用PHP或者ThinkPHP如何實(shí)現(xiàn)批量打包下載文件的方法示例,需要的朋友可以參考借鑒,下面來(lái)一起看看吧。2017-07-07PHP iconv()函數(shù)字符編碼轉(zhuǎn)換的問題講解
今天小編就為大家分享一篇關(guān)于PHP iconv()函數(shù)字符編碼轉(zhuǎn)換的問題講解,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧2019-03-03php中g(shù)et_object_vars()在數(shù)組的實(shí)例用法
在本篇文章小編給大家整理的是一篇關(guān)于php中g(shù)et_object_vars()在數(shù)組的實(shí)例用法,對(duì)此有興趣的朋友們可以學(xué)習(xí)下。2021-02-02