• home
  • forum
  • my
  • kt
  • download
  • Create a PHP Search Engine

    Author: 2007-08-20 11:07:07 From:

    This hands on PHP Programming article provides the knowledge necessary to design and develop a search engine for your website using PHP version 4.0 and above. Making a search engine for your website with PHP is really easy and provides substantial functionality required by most of the small to medium websites. This article introduces every steps of the development, including both design and PHP programming. Basic computer skills and knowledge of HTML fundamentals are required. Ok, let¡¯s begin now.

    Step 1: Design Search Box

    Under your website root, make a file called search.htm or anything you like and type in the following code:

    < html>
    < head>
    < title>Web Search
    < meta http-equiv="Content-Type" content="text/html">
    < /meta>
    < 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="Search"/>
    < /td>
    < /tr>
    < /table>
    < /form>
    < /body>
    < /html>

    Step 2: Write search.php file. It is the core of your website search engine.

    Under your website root, create a file called search.php or anything you like.

    < ?php
    //get keywords
    $keyword=trim($_POST["keyword"]);
    //check if the keyword is empty
    if($keyword==""){
    echo"no keywords";
    exit;
    }
    ?>

    With above, you can give hints to your users when they forget to enter a keyword. Now let¡¯s go through all the files or articles in your website.

    < ?php
    function listFiles($dir){
    $handle=opendir($dir);
    while(false!==($file=readdir($handle))){
    if($file!="."&&$file!=".."){
    //if it is a directory, then continue
    if(is_dir("$dir/$file")){
    listFiles("$dir/$file");
    }
    else{
    //process the searching here with the following PHP script
    }
    }
    }
    }
    ?>

    The following scripts read, process files and check whether the files contain $keyword. If $keyword is found in the file, the file address will be saved in an array-type variable.

    < ?php
    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{
    //read file
    $data=fread(fopen("$dir/$file","r"),filesize("$dir/$file"));
    //avoid search search.php itself
    if($file!="search.php"){
    //contain keyword?
    if(eregi("$keyword",$data)){
    $array[]="$dir/$file";
    }
    }
    }
    }
    }
    }
    //define array $array
    $array=array();
    //execute function
    listFiles(".","php",$array);
    //echo/print search results
    foreach($array as $value){
    echo "
    $value¡±"
    \n¡±;
    }
    ?>

    Now, combine the programs listed above, you will find all the related results in your websites will be found and listed. A further optimization of the search engine can be taken by adding the following,

    1,list the title of all searching results

    REPLACE THE FOLLOWING

    if(eregi(¡±$keyword¡±,$data)){

    $array[]=¡±$dir/$file¡±;

    }

    WITH

    if(eregi(¡±$keyword¡±,$data)){

    if(eregi(¡±¡°,$data,$m)){

    $title=$m[¡±1¡å];

    }

    else{

    $title=¡±no title¡±;

    }

    $array[]=¡±$dir/$file $title¡±;

    }

    2,Add links to searching results

    CHANGE THE FOLLOWING

    foreach($array as $value){

    echo ¡°¡±$value¡°¡±
    \n¡±;

    }

    TO

    foreach($array as $value){

    list($filedir,$title)=split(¡±[ ]¡±,$value,¡±2¡å);

    echo ¡°$title¡°¡±
    \n¡±;

    }

    3 Set time limit for PHP execution

    ADD THE FOLLOWING AT THE BEGINNING OF PHP FILES

    set_time_limit(¡±600¡å);

    The above unit is second£¬so ten minutes is the litmit.

    Now, combine all the above programs and get the complete search.php file as following,

    < ?php
    set_time_limit("600");
    $keyword=trim($_POST["keyword"]);
    if($keyword==""){
    echo"Please enter your keyword";
    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("]+)>(.+)¡±,$data,$b)){
    $body=strip_tags($b[¡±2¡å]);
    }
    else{
    $body=strip_tags($data);
    }
    if($file!=¡±search.php¡±){
    if(eregi(¡±$keyword¡±,$body)){
    if(eregi(¡±¡°,$data,$m)){
    $title=$m[¡±1¡å];
    }
    else{
    $title=¡±no title¡±;
    }
    $array[]=¡±$dir/$file $title¡±;
    }
    }
    }
    }
    }
    }
    $array=array();
    listFiles(¡±.¡±,¡±$keyword¡±,$array);
    foreach($array as $value){
    list($filedir,$title)=split(¡±[ ]¡±,$value,¡±2¡å);
    echo ¡°
    ¡°¡±
    \n¡±;
    }
    ?>

    Now, you have made a search engine for your website, enjoy it!


    About the Author
    Rory Canyon is the founder of ScriptMenu.com, a free web directory for PHP, ASP, ASP.NET, PERL, XML, Java, JavaScript, Flash, CFML, Python and other web programming resources

    discuss this topic to forum

    relation tutorial

    No relevant information

    Category

      Ad Management (4)
      Calendars (3)
      Chat Systems (7)
      Content Management (6)
      Cookies and Sessions (8)
      Counters (8)
      Database Related (8)
      Date and Time (9)
      Development (6)
      Discussion Boards (7)
      E Commerce (6)
      Email Systems (9)
      Error Handling (5)
      File Manipulation (10)
      Flash and PHP (4)
      Form Processing (7)
      Guestbooks (8)
      Image Manipulation (3)
      Installing PHP (5)
      Introduction to PHP (9)
      Link Indexing (6)
      Mailing List Management (8)
      Miscellaneous (10)
      Networking (6)
      News Publishing (6)
      OOP (8)
      PEAR (6)
      PHP vs Other Languages (2)
      Polls and Voting (5)
      Postcards (0)
      Randomizing (8)
      Redirection (8)
      Searching (6)
      Security (6)
      Site Navigation (7)
      User Authentication (10)
      WAP and WML (7)
      Web Fetching (0)
      Web Traffic Analysis (11)
      XML and PHP (0)

    New

    Hot