php站内搜XX擎的编写思路_第1页
php站内搜XX擎的编写思路_第2页
php站内搜XX擎的编写思路_第3页
php站内搜XX擎的编写思路_第4页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

php站内搜XX擎的编写思路 PHP站内搜索引擎的编写思路一个支持PHP的站点应该运行自己的搜索引擎。 本文以文章搜索为例,谈一谈的搜索机制,以达到与诸位共同探讨的目的。 一个站内搜索引擎的编写应该根据站点的构成机制去实现。 使用数据库的站点无疑不应该浪费数据库的记录而是应该充分利用它。 但是,目录文件的递归检索功能是PHP中的一个亮点,最初的搜索引擎就是使用递归检索方法,它很有吸引力。 以下这段代码是一个自定义函数,它可以完成的工作是,在指定目录及其子目录(如果有的话)下检索出所有符合条件的文件function SearchDir($dir,$kw)/第一部分:检索指定目录下的文件$handle=opendir($dir);while($file=readdir($handle)if(is_file($dir/$file)/只搜索.htm和.php文件if(strtolower(substr($dir/$file,-3)=htm orstrtolower(substr($dir/$file,-3)=php)$fd=fopen($dir/$file,r);$content=fread($fd,filesize($dir/$file);if(strstr($content,$kw)/若关键词与文章内容相匹配$GLOBALScount=$GLOBALScount+1;/全局计数变量/.这里是相关的提取代码print文件名$file-完整路径$dir/$file;closedir($handle);/第二部分:递归检索子目录$handle=opendir($dir);while($sdir=readdir($handle)if(is_dir($dir/$sdir)And$sdir.And$sdir.)SearchDir($dir/$sdir,$kw);/调用函数自己closedir($handle);/end offunction要使用这个函数,我们需要给其指定工作目录($dir)和要检索的关键词($kw),我们可以使用表单(form)的形式与用户交互,由用户选择需要查找的区域(目录)以及输入要查找的内容(关键词)。 可能有一些页面文件属于被反复调用的脚本程序或包含有脚本程序在里面,检索它们显然是没有必要的,这样我们得过滤掉全部需要屏蔽掉的此类文件,工作量或许不会是很小的,为此,后来放弃了目录文件递归列举法,转而充分利用运行于站点上的库文件,用两套机制提供站点的检索功能其一,快速搜索。 这是默认的搜索方式,访客可以以文章的更新日期、作者、标题作搜索关键词,迅速在库文件记录的信息中检索自己感兴趣的内容。 该检索方法也使用了自定义的函数function searchdb($db,$keyw,$dir)/在库文件中查找$fp=fopen($db,r);/打开库文件/以下分解各条信息的内容并放入数组中while($line=fgets($fp,2048)list($href,$title,$name,$da)=explode(#,$line);$lnk=$dir.$href;$tt=$title;$sname=$name;$date=$da;$total+;fclose($fp);/以下从数组中检测匹配for($i=0;$i$total;$i+)$X=strstr($date$i,$keyw);$Y=strstr(strtoupper($tt$i),strtoupper($keyw);$Z=strstr(strtoupper($sname$i),strtoupper($keyw);if($X|$Y|$Z)print$keyw-;makeurl($lnk$i,$tt$i);/形成超级链接(makeurl为自编函数)$GLOBALScount+;/end offunction这个搜索脚本执行速度非常之快,缺点是,用户不能从文章的内容进行检索。 所以其二精确搜索。 非默认搜索方式,要使用它,访客需要勾选“精确查找”选项按钮。 该搜索脚本是在第一种搜索脚本的基础上加入一个否定条件若在库记录条目中不存在与搜索关键词相匹配的字串,则打开该条目所对应的页面文件,从其中的详细内容进行与关键词的匹配检测if($X|$Y|$Z)/若在库记录中有符合匹配条件/sth.to bedone hereelse/否则,没有的话if(is_file($lnk$i)$ar_conts=file($lnk$i);/打开web文件$conts=implode(,$ar_conts);/取出全部内容if(strstr($conts,$keyw)/若全部内容中存在要找的内容print$keyw-;makeurl($lnk$i,$tt$i);/形成超级链接$GLOBALScount+;程序中使用PHP内置函数strstr而不用strpos的理由很简单二者都是字符匹配相关的函数,但前者支持中文(其实是任意字符),后者则要求要匹配的内容只能是一个字符,不适用于中文。 当然,这种站内搜索程序目前仅仅支持文章搜索,其他资源类的搜索、友情链接、日记

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论