Make a search engine for your website with PHP

Discussion in 'Perl Misc' started by Rory Canyon, Oct 17, 2005.

  1. Rory Canyon

    Rory Canyon Guest

    Make a search engine for your website with PHP

    (Recommended Article)

    By Rory Canyon, the founder of ScriptMenu.com (
    http://www.scriptmenu.com ). Rory have spent more than 6 years
    developing various medium to big web systems/application. For more web
    programming related articles or programming resources, visit
    http://www.scriptmenu.com



    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</title>



    <meta http-equiv="Content-Type" content="text/html">



    </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="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"."<br>\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("<title>(.+)



    </title>",$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"."<br>\n";





    }



    TO



    foreach($array as $value){



    list($filedir,$title)=split("[ ]",$value,"2");



    echo "<a href=$filedir>$value</a>"."<br>\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("<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="no 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";



    }

    ?>




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



    Rory Canyon



    http://www.scriptmenu.com
     
    Rory Canyon, Oct 17, 2005
    #1
    1. Advertisements


  2. This is the *Perl* newsgroup.

    comp.lang.php is over that way ===>
     
    Tad McClellan, Oct 17, 2005
    #2
    1. Advertisements

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments (here). After that, you can post your question and our members will help you out.