用PHP将数据导入到Foxmail的实现代码


Posted in PHP onSeptember 05, 2010

最近小阳做了一个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的逗号分隔值文件,双击打开后,其界面如图所示。

用PHP将数据导入到Foxmail的实现代码

我们在这种情况下还是无法知道它的写入格式的。将“TEMP.CSV”文件改为用记事本打开,便可以发现它的格式非常简单:如图,文件第一行是Foxmail地址簿的字段,其它行是字段对应的值,各字段和值用英文逗号分隔。所以我们在PHP中按这种格式生成CSV文件,别人就可以下载并导入他们的Foxmail中了!

用PHP将数据导入到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文件”……,数据库中一大堆的资料一下子就全被导入了,这个主意还不错吧!

用PHP将数据导入到Foxmail的实现代码

(以上程序在Apache+PHP4+mySQL和IIS+PHP4+mySQL中皆测试通过。)

PHP 相关文章推荐
php 字符串函数收集
Mar 29 PHP
php基础学习之变量的使用
Jun 09 PHP
PHP服务器页面间跳转实现方法
Aug 02 PHP
PHP 关于访问控制的和运算符优先级介绍
Jul 08 PHP
destoon公司主页模板风格的添加方法
Jun 20 PHP
Destoon旺旺无法正常显示,点击提示“会员名不存在”的解决办法
Jun 21 PHP
Laravel框架中扩展函数、扩展自定义类的方法
Sep 04 PHP
服务器迁移php版本不同可能诱发的问题
Dec 22 PHP
php同时使用session和cookie来保存用户登录信息的实现代码
May 13 PHP
thinkPHP简单实现多个子查询语句的方法
Dec 05 PHP
PHP 获取指定地区的天气实例代码
Feb 08 PHP
php工具型代码之印章抠图
Jul 18 PHP
提高PHP编程效率的53个要点(经验小结)
Sep 04 #PHP
队列在编程中的实际应用(php)
Sep 04 #PHP
php生成随机密码的三种方法小结
Sep 04 #PHP
PHP安全技术之 实现php基本安全
Sep 04 #PHP
小文件php+SQLite存储方案
Sep 04 #PHP
PHP中文件上传的一个问题
Sep 04 #PHP
PHP程序员面试 切忌急功近利(更需要注重以后的发展)
Sep 01 #PHP
You might like
DC游戏Steam周三特惠 《蝙蝠侠》阿卡姆系列平史低
2020/04/09 欧美动漫
MYSQL 小技巧 -- LAST_INSERT_ID
2009/11/24 PHP
PHP中strncmp()函数比较两个字符串前2个字符是否相等的方法
2016/01/07 PHP
老生常谈文本文件和二进制文件的区别
2017/02/27 PHP
JQuery EasyUI 数字格式化处理示例
2014/05/05 Javascript
javascript实现rgb颜色转换成16进制格式
2015/07/10 Javascript
javascript面向对象程序设计高级特性经典教程(值得收藏)
2016/05/19 Javascript
ionic js 复选框 与普通的 HTML 复选框到底有没区别
2016/06/06 Javascript
浅谈js对象的创建和对6种继承模式的理解和遐想
2016/10/16 Javascript
vue2组件之select2调用的示例代码
2017/10/12 Javascript
JAVA面试题 static关键字详解
2019/07/16 Javascript
bootstrap-table+treegrid实现树形表格
2019/07/26 Javascript
ZK中使用JS读取客户端txt文件内容问题
2019/11/07 Javascript
在vue中使用防抖和节流,防止重复点击或重复上拉加载实例
2019/11/13 Javascript
[03:48]2014DOTA2 TI专访71DK夺冠不靠小组赛高排名
2014/07/11 DOTA
[51:17]VGJ.T vs Mineski 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
python发送伪造的arp请求
2014/01/09 Python
Python实现对PPT文件进行截图操作的方法
2015/04/28 Python
rabbitmq(中间消息代理)在python中的使用详解
2017/12/14 Python
python顺序的读取文件夹下名称有序的文件方法
2018/07/11 Python
Django跨域请求CSRF的方法示例
2018/11/11 Python
利用python开发app实战的方法
2019/07/09 Python
详解使用python绘制混淆矩阵(confusion_matrix)
2019/07/14 Python
python实现宿舍管理系统
2019/11/22 Python
python实现简单井字棋游戏
2020/03/04 Python
Python使用Pyqt5实现简易浏览器(最新版本测试过)
2020/04/27 Python
pytorch SENet实现案例
2020/06/24 Python
俄罗斯宠物用品网上商店:ZooMag
2019/12/12 全球购物
数据库笔试题
2013/05/09 面试题
Linux Interview Questions For software testers
2012/06/02 面试题
财务管理专业毕业生求职信范文
2013/09/21 职场文书
建筑文秘专业个人求职信范文
2013/12/28 职场文书
餐饮企业总经理岗位职责范文
2014/02/18 职场文书
高中生学习计划书
2014/09/15 职场文书
学院党的群众路线教育实践活动整改方案
2014/10/04 职场文书
开展警示教育活动总结
2015/05/09 职场文书