天天躁日日躁狠狠躁AV麻豆-天天躁人人躁人人躁狂躁-天天澡夜夜澡人人澡-天天影视香色欲综合网-国产成人女人在线视频观看-国产成人女人视频在线观看

做個自己站內(nèi)搜索引擎

ccterran(原作)

作者:iwind

  朋友用dreamweaver做了一個網(wǎng)站,沒有動態(tài)的內(nèi)容,只是一些個人收藏的文章,個人介紹等等。現(xiàn)在內(nèi)容比較多了,想叫我?guī)退鲆粋€搜索引擎。說實在的,這是一個不難的問題,于是就隨手做了一個。現(xiàn)在我在其它論壇上也看到有人想做這個,于是就想說說這方面的知識,重在了解一下方法。

寫程序前先要想好一個思路,下面是我的思路,可能誰有更好的,但注意這只是一個方法問題 :遍歷所有文件  讀取內(nèi)容  搜索關(guān)鍵字,如果匹配就放入一個數(shù)組  讀數(shù)組。在實現(xiàn)這些步驟之前,我假定你的網(wǎng)頁都是標(biāo)準(zhǔn)的,就是有標(biāo)題(<title></title>),也有(<bod *></body>),如果你是用dreamweaver或者frontpage設(shè)計的,那么除非你故意刪掉,它們都在存在的。下面就讓我們一步步來完成并在工程中改善這個搜索引擎。

一,設(shè)計搜索表單
在網(wǎng)站的根目錄下建個search.htm,內(nèi)容如下
<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表單傳過來的數(shù)據(jù).內(nèi)容如下
<?php
//獲取搜索關(guān)鍵字
$keyword=trim($_POST[“keyword”]);
//檢查是否為空
if($keyword==””){
   echo”您要搜索的關(guān)鍵字不能為空”;
   exit;//結(jié)束程序
}
?>

這樣如果訪問者輸入的關(guān)鍵字為空時,可以做出提示。下面是遍歷所有文件。

我們可以用遞歸的方法遍歷所有的文件,可以用函數(shù)opendir,readdir,也可以用php Directory的類。我們現(xiàn)在用前者.
<?php
  //遍歷所有文件的函數(shù)
  function listFiles($dir){
   $handle=opendir($dir);
   while(false!==($file=readdir($handle))){
          if($file!="."&&$file!=".."){
          //如果是目錄就繼續(xù)搜索
          if(is_dir("$dir/$file")){
             listFiles("$dir/$file");
          }
              else{
            //在這里進(jìn)行處理
             }
      }
   }
}

?>

在紅字的地方我們可以對搜索到的文件進(jìn)行讀取,處理.下面就是讀取文件內(nèi)容,并檢查內(nèi)容中是否含有關(guān)鍵字$keyword,如果含有就把文件地址賦給一個數(shù)組。
<?php
//$dir是搜索的目錄,$keyword是搜索的關(guān)鍵字 ,$array是存放的數(shù)組
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{
            //讀取文件內(nèi)容
            $data=fread(fopen("$dir/$file","r"),filesize("$dir/$file"));
            //不搜索自身
            if($file!=”search.php”){
              //是否匹配
                          if(eregi("$keyword",$data)){
                  $array[]="$dir/$file";
                          }
            }
             }
      }
   }
}
//定義數(shù)組$array
$array=array();
//執(zhí)行函數(shù)
listFiles(".","php",$array);
//打印搜索結(jié)果
foreach($array as $value){
   echo "$value"."<br>/n";
}
?>

現(xiàn)在把這個結(jié)果和開頭的一段程序結(jié)合起來,輸入一個關(guān)鍵字,然后就會發(fā)現(xiàn)你的網(wǎng)站中的相關(guān)結(jié)果都被搜索出來了。我們現(xiàn)在在把它完善一下。
1,列出內(nèi)容的標(biāo)題

                          if(eregi("$keyword",$data)){
                  $array[]="$dir/$file";
                          }
改成
                          if(eregi("$keyword",$data)){
                                   if(eregi("<title>(.+)</title>",$data,$m)){
                        $title=$m["1"];
                                   }
                                   else{
                        $title="沒有標(biāo)題";
                                   }
                                   $array[]="$dir/$file $title";
                           }
原理就是,如果在文件內(nèi)容中找到<title>xxx</title>,那么就把xxx取出來作為標(biāo)題,如果找不到那么就把標(biāo)題命名未”沒有標(biāo)題”.

2,只搜索網(wǎng)頁的內(nèi)容的主題部分。
做網(wǎng)頁時一定會有很多html代碼在里面,而這些都不是我們想要搜索的,所以要去除它們。我現(xiàn)在用正則表達(dá)式和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,標(biāo)題上加鏈接
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執(zhí)行時間超時是必要的。可以在文件頭加上
set_time_limit(“600”);
以秒為單位,所以上面是設(shè)10分鐘為限。


所以完整的程序就是
<?php
set_time_limit("600");
//獲取搜索關(guān)鍵字
$keyword=trim($_POST["keyword"]);
//檢查是否為空
if($keyword==""){
   echo"您要搜索的關(guān)鍵字不能為空";
   exit;//結(jié)束程序
}
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="沒有標(biāo)題";
                                   }
                                   $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";
}
?>

到此為止,你已經(jīng)做好了自己的一個搜索引擎,你也可以通過修改內(nèi)容處理部分來改進(jìn)它,可以實現(xiàn)搜索標(biāo)題,或者搜索內(nèi)容的功能。也可以考慮分頁。這些都留給你自己吧。

這里說明一下用preg_match代替eregi,會快很多。這里只是為了通俗易懂,所以使用了常用的eregi.

 

php技術(shù)做個自己站內(nèi)搜索引擎,轉(zhuǎn)載需保留來源!

鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請第一時間聯(lián)系我們修改或刪除,多謝。

主站蜘蛛池模板: 青柠在线观看视频在线高清 | 精品少妇爆AV无码专区 | 友田真希息与子中文字幕 | 男助理憋尿PLAY灌尿BL出去 | 富婆大保健嗷嗷叫普通话对白 | 黑人玩弄极品人妻系列 | 国产在线观看免费观看不卡 | 欧美日韩午夜群交多人轮换 | 99免费在线 | 理论片午午伦夜理片影院 | 久久精品亚洲视频 | 调教玩弄奶头乳夹开乳震动器 | 蜜桃成熟时33D在线嘟嘟网 | 尤物久久99国产综合精品 | 手机在线成人精品视频网 | 欧美97色伦综合网 | 欧美性爱 先锋影音 | 日本无码色哟哟婷婷最新网站 | 男人吃奶摸下挵进去啪啪 | 中国明星16xxxxhd | 鸭子玩富婆流白浆视频 | 亚洲高清中文字幕 | 视频一区国产第一页 | 国产99视频精品免费播放 | 精品久久电影网 | 富婆夜店找黑人猛男BD在线 | 同居了嫂子在线观看 | 扒开女人下面使劲桶视频 | 女攻男受高h全文肉肉 | 日韩熟女精品一区二区三区 | 九九国产精品成人AV麻豆 | 国内一级一级毛片a免费 | 美女张开腿让男生桶动态图 | 纵欲(高H) | 亚洲精品免费观看 | 欲香欲色天天影视大全 | 《乳色吐息》无删减版在线观看 | 久久久久综合网久久 | 果冻传媒在线观看网站 | 春水福利app导航 | 人妖xxhdxx |