FTP搜索引擎的设计与实现
张运凯 刘宏忠 郭宏刚
 

  摘要:FTP是因特网最主要的服务之一,FTP搜索引擎为人们使用FTP服务提供了很大的方便。本文分析和设计了一个基于WEB的FTP搜索引擎,并在PHP+Mysql环境下给出了编程实现方法。

  关键词:FTP;搜索引擎;PHP;Mysql;

  引言

  FTP是因特网最主要的服务之一,在FTP服务器上保存有大量的各种各样的共享软件、技术资料和多媒体数据等文件。因为每个FTP服务器都有若干个目录,其目录和文件结构比较复杂,要在FTP服务器上找到自己需要的文件不是一件容易的事情,要在多个FTP服务器上查找文件更是困难。基于WWW的FTP搜索引擎可以很好的解决上述问题。目前,国内外有很多FTP搜索引擎,国内较著名的有北大天网、百合谷搜索和FTP星空搜索等。为了更好的为我校校园用户和省主节点用户提供服务,我们设计了自己的FTP服务器搜索引擎。

  1.FTP搜索引擎的结构

  FTP搜索引擎由数据采集、数据查询和站点维护等模块组成。实现一个FTP搜索引擎,首先要收集各个FTP站点上的文件信息,并把这些信息存储到数据库中;然后给用户提供一个查询界面,以收取用户要查询的信息,把这些查询信息转化为数据库语言,并进行数据库查询,把查询结果以友好的界面显示给用户;搜索引擎建立好以后,为了使数据库数据与FTP站点的数据保持一致,需要更新FTP站点的文件信息,添加新的FTP站点等管理和维护。其结构如下图所示。

  我们在设计FTP搜索引擎时,采用Linux操作系统Redhat8.0,WWW服务器采用Apache,数据库采用MySQL,编程语言采用PHP。

  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数据库中有两个数据表,一个为fileaddress数据表,另一个为ftpserver数据表,其中fileaddress数据表用于记录ftp站点的文件信息,ftpserver数据表用于记录各个ftp站点的信息。

  3. 数据采集

  要构建搜索引擎,首先要收集各个FTP站点的文件信息,记录到数据库,用于提供搜索。因特网中有许多的FTP站点,要收集某个FTP站点的信息时,从数据表中读出站点信息,然后登陆到此站点,多数FTP服务器都开辟有一个公共访问区,称为"匿名FTP",对公众提供免费的文件信息服务,一般用户名为Anonymous,密码为一个Email地址。数据采集程序用此用户名和密码登陆站点,然后对站点所有目录进行采集,读取每个目录下的文件信息,在收到文件信息之后,对其进行分析,将文件信息存储到相应的数据表字段中。完成此站点的数据采集之后,再读取另外一个FTP站点的信息,进行文件信息采集。如此循环,采集所有已知FTP站点的文件信息。

  首先连接到此ftp站点,并用相应的用户名和密码登陆,此时,当前目录一般为根目录,有的并不是,所以要先取得当前目录,然后从此目录开始扫描此站点的文件信息,如果此目录为空(只有两个文件:.和..),则此站点没有文件,退出登陆,如果不为空,则判断每个文件是否是目录,如果是,则改变当前目录到此子目录下,扫描此子目录并判断,如果还有子目录,则继续转到其下扫描。下面是采集数据的程序。

  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(),
  }
 }
 //---------------------------------------------------
 function get_path_info($ftpserver,$ftplink,$ftp_dir,$sqlmasterlink){
 mysql_query("use fileaddress",$sqlmasterlink);
 $n_list=ftp_rawlist($ftplink,$ftp_dir); //$n_list can not be setted as a global var.
 if((count($n_list))<=2) return; //at least: one is .. another is .
 for($i=0;$i
 $filetype=substr($n_list[$i],0,1);
 $filename=substr($n_list[$i],55);
 $filesize=substr($n_list[$i],29,41);
 switch($filetype){
 case "-":
   {
   $temp="ftp://".$ftpserver.$ftp_dir."/".$filename;
   //$temp=$ftp_dir."/".$filename;
   $filesize=(integer)($filesize/1024);
   $date=ftp_mdtm($ftplink,$filename);
   $date=(date("Y")."-".date("m")."-".date("d"));
   $time=date("H:i:s");
   $pieces=explode(".",$filename);
   $extend=$pieces[count($pieces)-1];
   $query="INSERT INTO fileaddress VALUES ( '$filename','$ftpserver','$temp', '$date','$time','$filesize','$extend');";
   mysql_query($query,$sqlmasterlink);
   echo "".$filename;echo "
/n";
   break;
   }
 case "d":
   {
   if(($filename!="..")&&($filename!=".")){
   ftp_chdir($ftplink,$filename);
   $ftp_dir=ftp_pwd($ftplink);

 get_path_info($ftpserver,$ftplink,$ftp_dir,$sqlmasterlink);
     ftp_chdir($ftplink,"..");
    }
     break;
   }
   } //end of switch
 } //end of for
 } //the end of functon get_path_info()
 //------------------------------------------------

  4. 数据查询

  数据查询主要包括查询页面的设计、查询程序的编写和查询结果的处理及部分。查询页面由Web服务器提供查询界面,用于收集所要查找的文件信息,用户浏览到此Web页面,填写并提交表单,表单中包含有用户所要查找文件的信息,如文件名,大小,等,表单提交给Web服务器之后,由查询程序进行分析,生成查询语句,并提交给数据库服务器进行查询,查询结果由查询程序进行分析处理,查询结果以超链接形式生成Web页面,提供给用户浏览。

  用户输入的信息转化为数据库查询语言,再进行查询。可以用Mysql数据库查询语言中给出的正则表达式来表示。其常用表示方法如下:

  a.特殊字符"^": 用来匹配以指定字符串开头的字符串。例如:"^hello" :这个模式与字符串"hello,PHP world!"匹配,但是与"Say hello to you"不匹配。

  b.特殊字符"$": 用来匹配以指定字符串结尾的字符串。例如: "you$" :这个模式与"How are you"匹配,与"your"不匹配。

  c.当特殊字符"^"和"$"同时使用时,表示精确匹配。例如: "^hello$" :这个模式只匹配字符串"hello"。

  在查找文件时,设置表示用户输入的文件名的变量为$filename,那么,可以生成如下的查询语句进行查询:
  $sql="select * from $dbtablename where name REGEXP /"[^]*(".$qfilename.")+[^]*"."/"".";";
  系统包括两种检索界面,即文件名检索和高级检索。下面是高级检索的界面和功能。

  

在采集到数据库的文件信息中,包括了文件名、大小、日期和文件的网络地址。查询结果可由数据库中的网落地址可生成文件的URL信息,表示文件的下载地址。代码结构为:

  文件名文件大小和日期
  网络地址
  下图为FTP搜索引擎的输出结果:

  5. 管理与维护

  搜索引擎建立好以后,为了使数据库数据与FTP站点的数据保持一致,需要对站点进行管理和维护。在我们的设计中,管理和维护功能包括增加FTP站点、显示及删除FTP站点、更改FTP站点等功能。为了实现站点文件信息自动更新的功能,我们把更新FTP站点文件信息的程序(addallinfo.php)设置成系统计划任务,例如可以设置成每天运行一次。

  6.结束语

  我们设计的FTP搜索引擎已经在网站上使用,为用户提供了很好的服务。FTP搜索引擎的技术发展很快,在查询方式、检索结果处理和分类检索等方面有了很大的改进。我们将在这几方面继续完善我们的系统。

  参考文献:

  1. 龙浩等,《PHP语言进阶和高级应用》.北京:清华大学出版社出版, 年。
  2.钟伟财,《精通PHP4.0与MySQL架构Web数据库实务》。北京:中国青年出版社出版,
  3.彭武兴,《PHP 4完全中文手册》
  4.晏子译,Mysql中文参考手册
  5.Stig S?ther Bakken ,《PHP Manual》,2003
  7.MySQL Reference Manual for version 4.0.5, http://www.mysql.com/documentation/
  8.MySQL Reference Manual,http://www.mysql.com/doc/en/index.html

来源:http://www.eol.cn/20031023/3093295.shtml

[转]FTP搜索引擎的设计与实现相关推荐

  1. [转]FTP搜索引擎的设计与实现 1

    FTP搜索引擎的设计与实现 张运凯 刘宏忠 郭宏刚   摘要:FTP是因特网最主要的服务之一,FTP搜索引擎为人们使用FTP服务提供了很大的方便.本文分析和设计了一个基于WEB的FTP搜索引擎,并在P ...

  2. 转 FTP搜索引擎的设计与实现(优化版)

    width="336" height="280" src="http://www.zealware.com/csdnblog336280.html&q ...

  3. FTP搜索引擎开发文档(任务概述与需求部分)

    2.任务概述 2.1目标 本次开发任务的目标是设计出一款FTP搜索引擎软件,以精简友好的界面.方便的操作为用户提供一种信息搜索的快速定位的功能,特别是为局域网用户提供更有针对性的.更方便的资源,从而提 ...

  4. 用C#实现FTP搜索引擎

    晚辈最近用C#写了一个教育网FTP搜索引擎,希望能得到高手的指点. 网址:http://soso.ccnu.com.cn      http://it.ccnu.edu.cn/soso 部分代码: u ...

  5. .net 2.0 下的FTP搜索引擎实现

    用c#写的ftp 搜索引擎,该程序是采用WFS算法, 程序如下: 主程序: using  System; using  System.Net; using  System.IO; using  Sys ...

  6. SF超高速FTP搜索引擎(哈尔滨工业大学)

    SF超高速FTP搜索引擎是全国新一代超高速FTP全站搜索引擎之一,索引速度远高于同类产品,在两千万候选项中查询两百万结果只在毫秒量级即可完成.并且支持多种排序方式.站点快照等贴近用户使用的功能. 本搜 ...

  7. 在Linux系统下建立强大的FTP搜索引擎

    Linux正大行其道,不少朋友相信已经用它架设过各种服务,什么Web.FTP.BBS等等等啦,这次,我向大家介绍另外一个在linux下运行的服务器软件----NoseyParker,一个强大的FTP搜 ...

  8. 搜索引擎的设计与实现

    经过对搜索引擎的研究同时与Lucene自身的特性相结合,搜索引擎的设计与实现需要实现的功能阐述如下: (1)支持桌面文件搜索,格式包括txt.doc.xls和ppt; (2)支持分词查询 (3)支持全 ...

  9. 基于java的搜索引擎的设计与实现

    经过对搜索引擎的研究同时与Lucene自身的特性相结合,搜索引擎的设计与实现需要实现的功能阐述如下: (1)支持桌面文件搜索,格式包括txt.doc.xls和ppt; (2)支持分词查询 (3)支持全 ...

  10. 基于Java、JSP中文分词的搜索引擎的设计与实现

    技术:Java.JSP等 摘要: 网络中的资源非常丰富,但是如何有效的搜索信息却是一件困难的事情.建立搜索引擎就是解决这个问题的最好方法.本文首先详细介绍了基于英特网的搜索引擎的系统结构,然后从网络机 ...

最新文章

  1. (七)JS基础知识四(搞定异步)【三座大山之三,必考!!!】
  2. 回文数、罗马数转整数、整数反转
  3. 安兔兔跑分可信吗_安兔兔安卓手机跑分性能榜公布:第一名实至名归?
  4. 4怎么放大字体_win8.1系统如何放大所有字体?
  5. ENC28J60 驱动开发要点
  6. win7下的python2.7和pip的环境安装
  7. python爬取抖音评论_爬取抖音299w用户数据后的分析
  8. 金电容(法拉电容)与可充放电池的相关知识
  9. java代码读取txt文件_java读取txt文件代码片段
  10. android 微信登陆功能,Android 实现微信登录详解
  11. 什么叫做云计算?云计算基础学习路线
  12. thingjs这个3D js库怎么样?
  13. winform打印html文件,c# 如何实现web打印插件
  14. 作为一名31岁的软件测试员,工作3年,月薪不到2W,担心被应届生取代
  15. 抖音网页直播弹幕 protobuf 推导
  16. 什么是AEC-Q200?AEC-Q200的认证对象和测试项目
  17. 6.11 通过文件描述符来获取信号
  18. 薛定谔 | 诱导契合对接(结合位点柔性)
  19. 【Java】求最大公约数
  20. css控制英文字母的大小写

热门文章

  1. SCM供应链管理系统对更多行业未来
  2. 3Ds Max字母键的妙用
  3. 台湾ICPlus IP178G/GH/GI 8接口FE以太网交换机芯片详细介绍
  4. Eolink :通过构建 API 全生命周期管理体系,实现降本增效
  5. python数学建模|综合评价方法
  6. LBP特征提取原理和python库代码
  7. idea解決tomcat乱码问题
  8. kt条件例题运筹学_运筹学讲解习题
  9. Python下各种GUI(图形用户界面)简介、使用优缺点对比
  10. 技术分享 | 基于人工势场法的无人机,机间避撞实现