读取内容---> 搜索关键字 如果匹配就放入一个数组--->读数组。 搜索关键字,如果匹配就放入一个数组 如果匹配就放入一个数组 在实现这些步骤之前,我假定你的网页都是标准的,就是有标题 (),也有(
),如果你是用 dreamweaver 或者 frontpage 设计的,那么除非你故意删掉,它们都在存在的。下 面就让我们一步步来完成并在工程中改善这个搜索引擎。 一,设计搜索表单在网站的根目录下建个 search.htm,内容如下 设计搜索表单在网站的根目录下建个 二,搜索程序再在根目录下建个 search.php 的文件,用来处理 的文件, search.htm 表单传过来的数据 表单传过来的数据. 内容如下 $keyword=trim($_POST[“keyword”]); //检查是否为空 if($keyword==””) {echo”您要搜索的关键字不能为空”;exit;//结束程序}?> 这样如果访问者输入的关键字为空时,可以做出提示。下面是遍历所 有文件。 我们可以用递归的方法遍历所有的文件, 可以用函数 opendir,readdir, 也可以用 PHP Directory 的类。我们现在用前者. ?> 在红字的地方我们可以对搜索到的文件进行读取,处理.下面就是读 取文件内容,并检查内容中是否含有关键字$keyword,如果含有就把 文件地址赋给一个数组。 搜索的关键字 ,$array 是存放 的数组 function listFiles($dir,$keyword,&;$array) {$handle=opendir($dir); while(false!==($file=readdir($handle))) {if($file!="."&;&;$file!="..") {if(is_dir("$dir/$file")) {listFiles("$dir/$file",$keyword,$array);} else{//读取文件内容 $data=fread(fopen("$dir/$file","r"),filesize("$dir/$file"));//不搜索自身 if($file!=”search.php”){//是否匹配 if(eregi("$keyword",$data)) {$array[]="$dir/$file";}}}}}}
//定义数组$array $array=array(); //执行函数 listFiles(".","php",$array); //打印搜索结果 foreach($array as $value){echo "$value"."
\n";}?> 现在把这个结果和开头的一段程序结合起来,输入一个关键字,然后 就会发现你的网站中的相关结果都被搜索出来了。 我们现在在把它完善一下
。 我们现在在把它完善一下 1,列出内容的标题把 if(eregi("$keyword",$data)){$array[]="$dir/$file";}改成 if(eregi("$keyword",$data)){if(eregi("",$data,$m)){$ title=$m["1"];}else{$title="没有标题";}$array[]="$dir/$file $title";}原理 就是,如果在文件内容中找到,那么就把 xxx 取出 来作为标题,如果找不到那么就把标题命名未”没有标题”. 2,只搜索网页的内容的主题部分。做网页时一定会有很多 html 代码 在里面,而这些都不是我们想要搜索的,所以要去除它们。我现在用 正则表达式和 strip_tags 的配合,并不能把所有的都去掉。把 $data=fread(fopen("$dir/$file","r"),filesize("$dir/$file"));//不搜索自身 if($file!=”search.php”){//是否匹配 if(eregi("$keyword",$data)){改为
$data=fread(fopen("$dir/$file","r"),filesize("$dir/$file"));if(eregi("]+)>(.+)",$data,$b)){$body=strip_tags($b["2"]);}else{ $body=strip_tags($data);}if($file!="search.php"){if(eregi("$keyword" ,$body)){ 3,标题上加链接 foreach($array as $value){echo "$value"."
\n";} 改成 foreach($array as $value){//拆开 list($filedir,$title)=split(“[ ]”,$value,”2”);//输出 echo "$value"."
\n";}4 防止超时如果文件比较多,那 么防止 PHP 执行时间超时是必要的。可以在文件头加上 set_time_limit(“600”);以秒为单位,所以上面是设 10 分钟为限。 所以完整的程序就是]+)>(.+)",$data,$b)){$body=strip_tags($b["2"]);}else{$body=strip_tags($ data);}if($file!="search.php"){if(eregi("$keyword",$body)){if(eregi("< title>(.+)",$data,$m)){$title=$m["1"];}else{$title="没有标题
";}$array[]="$dir/$file $title";}}}}}}$array=array();listFiles(".","$keyword",$array);foreach($ array as $value){//拆开 list($filedir,$title)=split("[ ]",$value,"2");//输出 echo "
$title "."
\n";}?> 到此为止,你已经做好了自己的一个搜索引擎,你也可以通过修改内 容处理部分来改进它,可以实现搜索标题,或者搜索内容的功能。也 可以考虑分页。这些都留给你自己吧。 这里说明一下用 preg_match 代替 eregi,会快很多。这里只是为了 通俗易懂,所以使用了
常用的 eregi.