乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      做搜索

       難得糊涂喲 2011-03-24

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


      二,搜索程序
      再在根目錄下建個(gè)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í),可以做出提示。下面是遍歷所有文件。
      我們可以用遞歸的方法遍歷所有的文件,可以用函數(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)行處理
                   }
            }
         }
      }

      ?>
      在紅字的地方我們可以對(duì)搜索到的文件進(jìn)行讀取,處理.下面就是讀取文件內(nèi)容,并檢查內(nèi)容中是否含有關(guān)鍵字$keyword,如果含有就把文件地址賦給一個(gè)數(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)在把這個(gè)結(jié)果和開頭的一段程序結(jié)合起來,輸入一個(gè)關(guān)鍵字,然后就會(huì)發(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)頁時(shí)一定會(huì)有很多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
      防止超時(shí)
      如果文件比較多,那么防止PHP執(zhí)行時(shí)間超時(shí)是必要的。可以在文件頭加上
      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)做好了自己的一個(gè)搜索引擎,你也可以通過修改內(nèi)容處理部分來改進(jìn)它,可以實(shí)現(xiàn)搜索標(biāo)題,或者搜索內(nèi)容的功能。也可以考慮分頁。這些都留給你自己吧。
      這里說明一下用preg_match代替eregi,會(huì)快很多。這里只是為了通俗易懂,所以使用了常用的eregi.

        本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
        轉(zhuǎn)藏 分享 獻(xiàn)花(0

        0條評(píng)論

        發(fā)表

        請(qǐng)遵守用戶 評(píng)論公約

        類似文章 更多