基于WEB的FTP搜索引擎的思考--一竖先生的笔客
不语怪力乱神
用户中心 您的位置: 笔架山信息平台>>笔客秀>> 一竖先生的笔客

 
 基于WEB的FTP搜索引擎的思考
2007-12-30 晴
基于WEB的FTP搜索引擎的思考


1、文件信息分析
文件名 name, varchar类型,长度为255 index字段(查询时对文件名字段的访问比较频繁,设置为index可提高查询速度)
FTP名称 host, 表示FTP网站的名称,说明是哪个网站的文件
文件URL address longtext类型 准确给出文件的URL地址

2、FTP站点信息分析
站点名 hostname 类型:vchar 长度60 index字段
站点IP hostip 类型:vchar 长度50
用户名 username 类型:char 韩师校内FTP用户名为Anonymous
密码 password 类型:password 长度60 密码为空
注:在编程时先将addftp.php帐密预设。
3、数据库设置

file_address:
addmin 添加管理员帐号和密码
fileaddress 记录ftp站点的文件信息
ftpserver 记录各个FTP站点的信息
注:采用后台管理登录维护,现在config.php设置好数据库ip地址,数据库用户名,数据库名和管理员帐密,然后执行install.php进行初始化数据库,最后进入后台进行管理。

4、数据采集
(1)搜集FTP文件信息,记录到数据库,然后登录到此FTP, 数据搜集程序对ftp文件进行采集并记录到数据库;
(2)读取文件信息程序;
(3)首先链接到ftp,当前目录一般为根目录,有的并不是,所以先取得当前目录,再进行扫描,如果目录为空,则退出登录;如非空,则改变当前目录到子目录,扫描并判断;下面是采集数据的程序。
代码: [Copy to clipboard]

get_ftp_info()
{
ftp_connect()
ftp_login()
ftp_pwd()
get_path_info /*调用get_path_info处理此目录;
ftp_quit()
}

get_path_info是采集程序的最主要函数,该函数采用递归调用依次处理各个目录和文件,把目录和文件信息写入数据库。下面是该函数的实现代码:
代码: [Copy to clipboard]

get_path_info()
{
ftp_rawlist() /*读取目录信息;
if (dir_is_empty)
return;
For()
{
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<count($n_list);$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_mdth(ftplink,$filename);
$date=(date("Y")."-".date("m")."-".date("d"));
$time=date(H:i;s);
$pieces=explode(".",$filename);
$extend=$pieces[count($pieces)-1];
$query="NSERT INTO fileaddress VALUES('$filename','$ftpserver',$temp','$date','$time','filesize','$extend');";
mysql_query($query,$sqlmasterlink);
echo "<font color=F3399 size=2>".$filename;
echo "</font><br>\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 function

//------------------------------------------------------


4、数据查询
主要包括:查询页面、查询程序、查询结果处理。
查询页面由WEB服务器提供,用户浏览并填写提交表单,表单中包含文件名,大小等;
用户输入信息转化为数据库查询语言,再进行查询,可以用mysql数据库查询语言中给出的正则表达式来表示,其常用方法如下:
a. 特殊字符"^":
用来匹配以指定字符开头的字符串。
b.特殊字符“$”:
用来匹配以指定字符串结尾的字符串。
c.当特殊字符"^"与"$"同时使用时表示精确匹配。
在查找文件时,设置表示用户输入的文件名的变量为$filename,那么,可以生成如下查询语句进行查询:
$sql = "select * from $dbtablename where REGEXP \"[^\\\\]*(".$filename.")+[^\\\\]*"."\".";";
查询结果可由数据库中的网络地址可生成文件的URL信息,表示文件下载地址。代码结构为:
<a href="文件的网路地址">文件名</a>文件的大小和日期<a href="文件的网络地址">网络地址</a>

5、管理和维护
管理和维护功能包括增加、显示、删除、更改FTP站点等功能;
为了实现站点文件信息自动更新,我们把更新ftp站点文件信息的程序(addallinfo.php)设置成系统计划任务;
其中清空ftp站点的主要实现代码(admin_del.php)如下:
代码: [Copy to clipboard]

if($drop_all_ok){
$sql="DELETE FROM ftps WHERE tablename='$_GET[table]'";
mysql_query($sql) or die(mysql_error());
$sql='DROP TABLOE IF EXISTS '".$_GET[table]."'";
mysql_query($sql) or die(mysql_error());
echo "清空成功";
echo "<meta http-equiv=\"refresh\" content=\"0;url="admin_del.php"\">";
exit;
}


参考:
龙浩 《PHP语言进阶和高级应用》 北京:清华大学出版社出版 2003
钟伟财 《精通PHP4.0与MySQL架构Web数据库实务》北京:中国青年出版社出版,2003
陈俊宏 《PHP4网站实作深度研究篇》 人民邮电出版社 2001
国内外FTP搜索引擎分析与比较http://projectmytianwang.cn/document/ftp-compare.htm 2004.12.20
武延军,黄飞跃.PHP与WEB数据库[M].西安:西安电子科技大学出版社,2001.
黄明,周韶泽,李风华.PHP4实例解析[M].北京:电子工业出版社,2001.
陈俊宏.PHP与MYSQL彻底研究网页数据库设计[M].北京:人民邮电出版社,2000.
.
# posted by 一竖先生 @ 2007-12-30 12:47:51 评论(0)
 




地址:




 
笔 名:
*
评 论:
最多1000字。当前字数:0
*
联系方式:

             

 
用户中心:
游客已登陆 (0)未知
笔行证 698736
昵称 一竖先生 
笔贝 Score1
加为好友 发送短信


访问计数:55291
本文:147 今天:1 本月 147


本地音乐播放器


笔客日历:
<< << 2008 十一月 >> >>
1
2345678
9101112131415
16171819202122
23242526272829
30