<? //ftp信息 $ftp_server="xxxxxxxxxxx"; //FTP服务器的地址 $username="xxx"; //要查询目录 $userpassword="xxxxxx"; //相映的密码 //数据库信息 $localhost="localhost"; //一般是localhost $datauser="xxx"; //数据库用户名 $datapassword="xxxxx"; //数据库用户密码 $database="xxxxx"; //数据库名称
//数据表建立信息 realfly是表名 // CREATE TABLE realfly ( // name text NOT NULL, // id tinyint(4) unsigned NOT NULL auto_increment, // date date DEFAULT '0000-00-00' NOT NULL, // time time DEFAULT '00:00:00' NOT NULL, // content longtext NOT NULL, // KEY id (id) // );
?>
<? ################################################### #程序: FTP搜索引擎递归函数文件 # #文件: class.php # #姓名: 网络骑士 # #所用技术: php&mysql # #版本: v1.0 # #联系: [email protected] # ###################################################
function happy($ftp_stream,$directory,$link)
{
if(is_dir($directory))
{
//$today=(date("Y")."-".date("m")."-".date("d"));
//$content=$directory;
//$time=date("H:i:s");
//$query="INSERT INTO realfly VALUES ('', '', '$today', '$time', '$content');";
//mysql_query($query,$link);
//$color="FF3399";
//echo "<font color=".$color."size=2>".$directory."</font><br>";
$result=ftp_nlist($ftp_stream,$directory);
for ($j=0;$j<=count($result);$j++){
happy($ftp_stream,$result[$j],$link);
}
}
else {
$basename=basename($directory); $file=explode(".",$basename);
$id=$i++;
$today=(date("Y")."-".date("m")."-".date("d"));
$content=$directory;
//$content4=$directory;
$time=date("H:i:s");
$query="INSERT INTO realfly VALUES ('$file[0]', '$id', '$today', '$time', '$content');";
mysql_query($query,$link);
echo $directory."<br>"; }
}
?>
<? include ("./search_ini.php"); include ("./class.php"); ################################################### #程序: FTP搜索引擎主文件 # #文件: search.php # #姓名: 网络骑士 # #所用技术: php&mysql # #版本: v1.0 # #联系: [email protected] # ###################################################
$ftp_stream=ftp_connect($ftp_server,21); $login=ftp_login($ftp_stream,"$username","$userpassword"); if(!$login||!$ftp_stream){ echo "cannot connect to $ftp_server"; echo "try again"; } else { echo "<font color=".$color." size=+3 >connect to $ftp_server<br>CONGRATULATIONS!</font><br>"; } $link=mysql_pconnect("$localhost","$datauser","$datapassword"); mysql_select_db("$database",$link); $this=ftp_pwd($ftp_stream); $this=@ftp_chdir($ftp_stream,"");
$result=ftp_nlist($ftp_stream,$this); for ($i=0;$i<=count($result);$i++) { if (is_dir($result[$i])) { happy($ftp_stream,$result[$i],$link); } else {echo $result[$i]."<br>"; $basename=basename($result[$i]); $file=explode(".",$basename); $id=$i; $today=(date("Y")."-".date("m")."-".date("d")); $content="$result[$i]"; $time=date("H:i:s"); $query="INSERT INTO realfly VALUES ( '$file[0]', '$id', '$today', '$time', '$content');"; mysql_query($query,$link); } } ?>
以上是后台的搜索处理程序,下面是用户查询处理程序
<?
###########################################
#软件名: FTP搜索引擎显示页面 #
#版本: v1.0 #
#所用技术: php&mysql #
#作者: 网络骑士 #
#联系方式: [email protected] #
###########################################
include ("./search_ini.php");
//connect to database
$link=mysql_pconnect("$localhost","$datauser","$datapassword") or die ("无法连接服务器,请稍后再试!");
//select database
mysql_select_db("$database",$link);
//make query
$query="select name,content from realfly where name='$query1' "; echo "您所查询的字段: "; echo "$query1.<BR>"; $i=0; $result=mysql_query($query,$link); if($result) {while(list($name,$content)=mysql_fetch_row($result)) { echo "您所能查询到的结果: "; $content3="ftp://xxxxxxxx"; //你的FTP站点名称 $content2=stristr($directory,"/var/ftp"); $content=$content3.$content2; echo "<a href=$content.>$content</a><BR>"; $i++; } }
if($i==0) { $color="FF3399"; echo "<font color=".$color." size=2>真是太神奇了,居然没有找到,呵呵~~,再试试!</font><br>";} else echo "恭喜,您要查找的东东找到了,赶快下载吧!.<br>"; ?>
需要说明的几点:
1:产生背景:由于我们站长让我做一个类似北大天网那样的FTP搜索的东西,以方便校内想下载软件而又一时半会儿找不到相映目录的网友,所以它就产生了。当然它的搜索能力远不如天网强大,而且它也不是真正意义上的搜索引擎,但是却可以完成FTP目录下遍历的功能(如果你的目录不是太深-----它可以处理到18层目录)
2:以上程序必须放在你所要搜索的目录下面才可以用----原因是权限问题
3:存在的问题
a:如果处理的文件目录太深(比如30层,虽然很少人这么做,但是它处理起来就会跳过太深的目录----原因是服务器关于命令运行时间的限制)-------偶已经想到了解决的方法(理论阶段,由于现在忙于应付CPA的考试,所以没有实施)------即模仿flashget等的多线程下载的方式。得到当前目录下的文件,文件夹同时生成数组对每个文件夹逐个进行搜索或者同时进行搜索
b:有时候会出现这种情况,即:父目录的名字和子目录的相同,这时候会跳过这个父目录-----这个问题容易解决但是会加大处理的任务,加之最近没有时间改进,所以一直放置着^-^
浅妄薄见,望与斟酌 
|