FTP搜索引擎的设计与实现
摘要:FTP服务器是因特网最主要的服务器之一,其搜索引擎为人们使用FTP服务提供了很大的方
便.分析和设计了一个基于WEB的FTP搜索引擎,并在PHP+Mysql环境下给出了编程实现方法.
关键词:FTP;搜索引擎;PHP;Mysql
中图分类号:TP393 文献标识码:A 文章编号:1000-5854(2005)01-0025-05
FTP服务器是因特网最主要的服务器之一,在FTP服务器上保存有大量的各种各样的共享软件、技术资料和多媒体数据等文件.每个FTP服务器都有若干个目录,其目录和文件结构比较复杂,要在FTP服务器上找到自己需要的文件不是一件容易的事情,要在多个FTP服务器上查找文件更是困难.基于WWW的FTP搜索引擎可以很好的解决上述问题.目前,国内外有很多FTP搜索引擎,国内较著名的有北大天网、百合谷搜索和FTP星空搜索等.为了更好的为河北师范大学校园用户和省主节点用户提供服务,笔者设计了自己的FTP服务器搜索引擎.
1 FTP搜索引擎的结构
FTP搜索引擎由数据采集、数据查询和站点维护等模块组成.建立一个FTP搜索引擎,首先要收集
各个FTP站点上的文件信息,并把这些信息存储到数据库中;然后给用户提供查询界面,以收取用户要
查询的信息,把这些查询信息转化为数据库语言,并进行数据库查询,把查询结果以友好的界面显示给
用户;搜索引擎建立好以后,为了使数据库数据与FTP站点的数据保持一致,需要做更新FTP站点的
文件信息、添加新的FTP站点等管理和维护工作.FTP搜索引擎的结构如图1所示.
图1 FTP搜索引擎的结构
在设计FTP搜索引擎时,操作系统采用Linux操作系统Redhat8.0,WWW服务器采用Apache,数
据库采用MySQL,编程语言采用PHP[1~4].
2 数据库结构和设置
2.1 文件信息分析
在FTP站点上,根目录下的目录中有许多文件夹和文件,每个文件的信息包括文件名、文件地址、
文件大小、日期、类型等.对应这些文件信息,在文件数据库中设置相应的字段,用来记录这些信息,用字
段name存储文件名,一般不超过255个字符,将其设置为varchar类型,长度为255,host表示FTP网站
的名称,说明是哪个网站上的文件,address字段准确给出文件的URL地址.由于有些文件URL比较长,把address字段类型设置为longtext.有了这些字段,就可以在网络中找到此文件的位置.另外,还需
要记录下文件的大小、时间、日期,以供用户分辨选择他们所要的文件.最后,查询时对文件名字段的访
问比较频繁,把它设置成Index字段,这样可以提高查询速度.
2.2 FTP站点信息分析
一个FTP站点通常包含服务器名称、用户名和密码.对应FTP站点的信息,数据字段设置如下:站
点名、站点IP地址、用户名、用户密码等几个字段.站点名字段类型为vchar,长度为60;IP地址为vchar
类型,长度为50;用户名为vchar类型,长度50;密码设置为password类型,长度为60.另外,FTP站点
名也是使用较为频繁的数据,把它设置为Index字段.
2.3 数据库结构设置
基于以上分析,设置数据库如下:在file-address数据库中设置2个数据表,一个为fileaddress数据
表,另一个为ftpserver数据表,其中fileaddress数据表用于记录ftp站点的文件信息,ftpserver数据表用
于记录各个ftp站点的信息.
3 数据采集
要构建搜索引擎,首先要收集各个FTP站点的文件信息,记录到数据库,用于提供搜索.因特网中
有许多的FTP站点,要收集某个FTP站点的信息时,从数据表中读出站点信息,然后登陆到此站点.多数FTP服务器都开辟有公共访问区,称为“匿名FTP”,对公众提供免费的文件信息服务,一般用户名为Anonymous,密码为一个E-mail地址.数据采集程序以用户名和密码登陆站点,然后对该站点所有目录进行采集,读取每个目录下的文件信息,在收到文件信息之后,对其进行分析,将文件信息存储到相应的
数据表字段中.完成此站点的数据采集之后,再读取另外一个FTP站点的信息,进行文件信息采集,如此循环,采集所有已知FTP站点的文件信息.首先连接到ftp站点,并用相应的用户名和密码登陆.此时,当前目录一般为根目录,有的并不是,所以要先取得当前目录,然后从此目录开始扫描此站点的文件信息.如果此目录为空(只有2个文件:.和..),则此站点没有文件,退出登陆;如果不空,则判断每个文件是否是目录,若是,则改变当前目录到此子目录下,扫描此子目录并判断,若还有子目录,则继续转到其下扫描.下面是采集数据的程序.
get-ftp-info()
{
ftp-connect() /*连接FTP站点;
ftp-login() /*登陆FTP站点;
ftp-pwd() /*取得当前目录;
get-path-info() /*调用get-path-info()处理此目录;
ftp-quit() /*退出登陆;
}
get-path-info()是采集程序最主要函数,该函数采用递归调用的方法依次处理各个目录和文件,把目录和文件信息
写入数据库.下面是该函数的实现代码.
get-path-info()
{
ftp-rawlist() /*读取目录信息;
if(dir-is-empty) /*如果目录为空则返回.
retrun;:
for()
{
get-path-info() /*递归调用函数get-path-info(),
}
}
//-------------------------------------------
functionget-path-info($ftpserver,$ftplink,$ftp-dir,$sqlmasterlink){
mysql-query("usefileaddress",$sqlmasterlink);
$n-listEftp-rawlist($ftplink,$ftp-dir); //$n-listcannotbesettedasaglobalvar.
if((count($n-list))for($iE0;$i$filetypeEsubstr($n-list[$i],0,1);
$filenameEsubstr($n-list[$i],55);
$filesizeEsubstr($n-list[$i],29,41);
switch($filetype){
case"-":
{
$tempE"ftp://".$ftpserver.$ftp-dir."/".$filename;
//$tempE$ftp-dir."/".$filename;
$filesizeE(integer)($filesize/1024);
$dateEftp-mdtm($ftplink,$filename);
$dateE(date("Y")."-".date("m")."-".date("d"));
$timeEdate("H:i:s");
$piecesEexplode(".",$filename);
$extendE$pieces[count($pieces)-1];
$queryE"INSERTINTOfileaddressVALUES(◜$filename◜,◜$ftpserver◜,◜$temp◜,◜$date◜,◜$time◜,◜
$filesize◜,◜$extend◜);";
mysql-query($query,$sqlmasterlink);
echo"〈fontcolorE◜FF3399◜sizeE2〉".$filename;echo"〈/font〉〈br〉∖n";
break;
}
case"d":
{
if(($filename!E"..")&&($filename!E".")){
ftp-chdir($ftplink,$filename);
$ftp-dirEftp-pwd($ftplink);
get-path-info($ftpserver,$ftplink,$ftp-dir,$sqlmasterlink);
ftp-chdir($ftplink,"..");
}
break;
}
} //endofswitch
} //endoffor
} //theendoffunctionget-path-info()
//----------------------------------------
4 数据查询
数据查询主要包括查询页面的设计、查询程序的编写和查询结果的处理.查询页面由Web服务器
提供查询界面,用于收集所要查找的文件信息.用户浏览到此Web页面,填写并提交表单,表单中包含
有用户所要查找文件的信息,如文件名、大小等.表单提交给Web服务器之后,由查询程序进行分析,生
第1期张运凯等:FTP搜索引擎的设计与实现27
成查询语句,并提交给数据库服务器进行查询,查询结果由查询程序进行分析处理,并以超链接形式生
成Web页面,提供给用户浏览.
用户输入的信息转化为数据库查询语言,再进行查询.可以用Mysql数据库查询语言中给出的正则
表达式来表示,其常用表示方法如下:
1)特殊字符“^”,用来匹配以指定字符串开头的字符串,如“^hello”,这个模式与字符串“hello,PHP
world!”匹配,但与“Sayhellotoyou”不匹配;
2)特殊字符“$”,用来匹配以指定字符串结尾的字符串,如“you$”,这个模式与“Howareyou”匹
配,与“your”不匹配;
3)当特殊字符“^”和“$”同时使用时,表示精确匹配,如“^hello$”,这个模式只匹配字符串“hello”.
在查找文件时,设置表示用户输入的文件名的变量为$filename,那么,可以生成如下的查询语句进
行查询:
$sqlE"select*from$dbtablenamewherenameREGEXP∖"[^∖∖∖∖]*(".$qfilename.")+
[^∖∖∖∖]*"·"∖"·"";".
系统包括2种检索界面,即文件名检索和高级检索.图2是高级检索的界面和功能.
图2 高级检索的界面与功能
在采集到数据库的文件信息中,包括了文件名、大小、日期和文件的网络地址.查询结果可由数据库
中的网落地址生成文件的URL信息,表示文件的下载地址.代码结构为
〈ahrefE“文件的网络地址”〉文件名〈/a〉文件大小和日期;
〈ahrefE“文件的网络地址”〉网络地址〈/a〉.
图3为FTP搜索引擎的输出结果.
图3 FTP搜索引擎的输出结果
5 管理与维护
搜索引擎建立好以后,为了使数据库数据与FTP站点的数据保持一致,需要对站点进行管理和维
护.在笔者的设计中,管理和维护功能包括增加、显示、删除及更改FTP站点等功能.为了实现站点文件
28 河北师范大学学报(自然科学版) 第29卷
信息自动更新的功能,把更新FTP站点文件信息的程序(addallinfo.php)设置成系统计划任务,例如可
以设置成每天运行1次.
6 结束语
笔者设计的FTP搜索引擎已经在网站上使用,为用户提供了很好的服务.FTP搜索引擎的技术发
展很快,在查询方式、检索结果处理和分类检索等方面有了很大的改进,在这几方面系统还有待于继续
完善.
参考文献:
[1] 武延军,黄飞跃.PHP与WEB数据库[M].西安:西安电子科技大学出版社,2001.
[2] 黄明,周韶泽,李风华.PHP4实例解析[M].北京:电子工业出版社,2001.
[3] 陈俊宏.PHP与MYSQL彻底研究网页数据库设计[M].北京:人民邮电出版社,2000.
[4] 钟伟财.精通PHP4.0与MySQL架构Web数据库实务[M].北京:中国青年出版社,2000.
阅读(1400) | 评论(0) | 转发(0) |