| VB 代码 | VC 代码 | ASP代码 | JSP代码 | PHP代码 | CGI代码 | FLASH代码 | 资料模板 | C 源程序 | 站长东西 | 站长教程 |

PHP技能

ASP技能
PHP技能
JSP技能
VB技能
.NET技能

本类阅览TOP10

·PHP与MySQL数据库操作函数详解
·PHP与JSP运转速度之再比较
·PHP 与 ASP 比较
·通晓PHP的十大关键
·php5装置详解
·PHP的新浪微博发信接口
·php代码:备份、康复sql数据库
·做个自己站内查找引擎
·PHP大型vwin的架构实例剖析
·PHP数据库开发知多少

站内查找

做个自己站内查找引擎
ccterran(原作)

作者:iwind

  朋友用dreamweaver做了一个vwin,没有动态的内容,仅仅一些个人保藏的文章,个人介绍等等。现在内容比较多了,想叫我帮他做一个查找引擎。说实在的,这是一个不难的问题,所以就顺手做了一个。现在我在其它论坛上也看到有人想做这个,所以就想说说这方面的常识,重在了解一下办法。

写程序前先要想好一个思路,下面是我的思路,或许谁有更好的,但留意这仅仅一个办法问题 :遍历一切文件 &#61664; 读取内容 &#61664; 查找关键字,假如匹配就放入一个数组 &#61664; 读数组。在完结这些过程之前,我假定你的网页都是规范的,就是有标题(<title></title>),也有(<bod *></body>),假如你是用dreamweaver或许frontpage规划的,那么除非你成心删掉,它们都在存在的。下面就让咱们一步步来完结并在工程中改善这个查找引擎。

一,规划查找表单
在vwin的根目录下建个search.htm,内容如下
<html>
<head>
<title>查找表单</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
</head>

<body bgcolor="#FFFFFF" text="#000000">
<form name="form1" method="post" action="search.php">
  <table width="100%" cellspacing="0" cellpadding="0">
    <tr>
      <td width="36%">
        <div align="center">
          <input type="text" name="keyword">
        </div>
      </td>
      <td width="64%">
        <input type="submit" name="Submit" value="查找">
      </td>
    </tr>
  </table>
</form>
</body>
</html>


二,查找程序
再在根目录下建个search.php 的文件,用来处理search.htm表单传过来的数据.内容如下
<?php
//获取查找关键字
$keyword=trim($_POST[“keyword”]);
//查看是否为空
if($keyword==””){
   echo”您要查找的关键字不能为空”;
   exit;//完毕程序
}
?>

这样假如访问者输入的关键字为空时,能够做出提示。下面是遍历一切文件。

咱们能够用递归的办法遍历一切的文件,能够用函数opendir,readdir,也能够用PHP Directory的类。咱们现在用前者.
<?php
  //遍历一切文件的函数
  function listFiles($dir){
   $handle=opendir($dir);
   while(false!==($file=readdir($handle))){
          if($file!="."&&$file!=".."){
          //假如是目录就持续查找
          if(is_dir("$dir/$file")){
             listFiles("$dir/$file");
          }
              else{
            //在这儿进行处理
             }
      }
   }
}

?>

在红字的当地咱们能够对查找到的文件进行读取,处理.下面就是读取文件内容,并查看内容中是否含有关键字$keyword,假如含有就把文件地址赋给一个数组。
<?php
//$dir是查找的目录,$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"."<br>\n";
}
?>

现在把这个成果和最初的一段程序结合起来,输入一个关键字,然后就会发现你的vwin中的相关成果都被查找出来了。咱们现在在把它完善一下。
1,列出内容的标题

                          if(eregi("$keyword",$data)){
                  $array[]="$dir/$file";
                          }
改成
                          if(eregi("$keyword",$data)){
                                   if(eregi("<title>(.+)</title>",$data,$m)){
                        $title=$m["1"];
                                   }
                                   else{
                        $title="没有标题";
                                   }
                                   $array[]="$dir/$file $title";
                           }
原理就是,假如在文件内容中找到<title>xxx</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("<body([^>]+)>(.+)</body>",$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"."<br>\n";
}
改成
foreach($array as $value){
   //拆开
   list($filedir,$title)=split(“[ ]”,$value,”2”);
   //输出
   echo "<a href=$filedir>$value</a>"."<br>\n";
}
4防止超时
假如文件比较多,那么防止PHP履行时刻超时是必要的。能够在文件头加上
set_time_limit(“600”);
以秒为单位,所以上面是设10分钟为限。


所以完好的程序就是
<?php
set_time_limit("600");
//获取查找关键字
$keyword=trim($_POST["keyword"]);
//查看是否为空
if($keyword==""){
   echo"您要查找的关键字不能为空";
   exit;//完毕程序
}
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(eregi("<body([^>]+)>(.+)</body>",$data,$b)){
                 $body=strip_tags($b["2"]);
                        }
                        else{
                 $body=strip_tags($data);
                        }
                        if($file!="search.php"){
                            if(eregi("$keyword",$body)){
                                   if(eregi("<title>(.+)</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 "<a href=$filedir target=_blank>$title </a>"."<br>\n";
}
?>

到此为止,你现已做好了自己的一个查找引擎,你也能够经过修正内容处理部分来改善它,能够完结查找标题,或许查找内容的功用。也能够考虑分页。这些都留给你自己吧。

这儿阐明一下用preg_match替代eregi,会快许多。这儿仅仅为了通俗易懂,所以运用了常用的eregi.




相关文章
  • 查找引擎优化—“主动转向”技能
  • 中文查找引擎技能揭密:网络蜘蛛
  • Google网络查找引擎运用心得
  • 简谈查找引擎作业流程
  • 中文查找引擎的十大误区
  • 查找引擎提交技巧
  • 逾越模板引擎
  • 查找引擎技能及趋势
  • 怎样紧盯查找引擎的一举一动
  • 百度图片查找引擎运用技巧
  • 查找引擎运用技巧
  • 现在查找引擎首要检索效劳
  • 查找引擎的技能发展趋势
  • 查找引擎:搜出你的隐私来
  • 查找引擎的十大隐秘
  • 关于Google查找引擎做弊的解说
  • 胡宝介:关于查找引擎优化
  • 中文查找引擎技能揭密:排序技能
  • 登录查找引擎失利的常见原因
  • 怎样防止被查找引擎视为做弊
  • 相关软件

  • 图形加快引擎1.3版,VGA/SVGA图  
  • 细巧而功用强大的查找引擎  
  • 网虫查找引擎  
  • 查找引擎脚本  
  • 以文本文件为根底的PHP查找引擎源代码  
  • 一个很COOL的查找引擎程序!  
  • 多元查找引擎体系源代码  
  • 简略的查找引擎,凭借yahoo等vwin  
  • 小强写的查找程序,调用163的查找引擎  
  • 一套PHP查找引擎  

  • 下载主页关于咱们广告效劳联系方式常见问题隐私声明法令条款本站声明下载协助发布软件站点地图





    月光软件代码下载编程文档电脑教程vwin优化网址导航网络文学游戏六合日子休闲写作范文安妮宝物站内查找
    电脑技能编程开发网络专区谈天说地情感世界游戏元素分类游戏抢手游戏体育运动手机专区业余爱好影视沙龙
    音乐六合数码广场教育园地科学大观古今纵横谈股论金人文艺术医学保健动漫图酷二手专区当地风情各行各业

    月光软件站·版权一切