Aug 19

简单PHP实现站内搜索引擎的方法

admin , 21:08 , 编程 » 编程(PHP) , 评论(0) , 引用(0) , 阅读(3562) , Via 本站原创 | |
搜索
我已经获得阿里云幸运券,准备分享给您。请点击获取  
   站内搜索对于一个网站来说是基本的网站功能。我们可以通过PHP来实现这一功能。希望新手们能够通过本文介绍的PHP实现站内搜索引擎的方法学到新的知识。
   我们在实际的编码中,可以利用PHP提供的应用程序来实现我们的站内搜索引擎的搭建。下面我们将会把具体的实现代码贴上。我们可以将PHP实现站内搜索引擎做的稍微复杂一些:使用一个页面既输出一个表单供用户输入搜索字串又输出查询结果。 
以下就是PHP实现站内搜索引擎的具体代码: 







  1. <?    
  2. include ("include/common.inc");   
  3. $ title  =  "Search" ;   
  4. include("include/header.inc");   
  5. ?>    
  6. < P >    
  7. < FORM   ACTION = "<? echo " $PHP_SELF";  ?> METHOD = "POST" >    
  8. < INPUT   TYPE = "text"   NAME = "searchstr"   value = "<? echo " $searchstr";  ?> "   
  9. SIZE = "20"   MAXLENGTH = "30" >    
  10. < INPUT   TYPE = "submit"   VALUE = "Search!" >    
  11. </ FORM >    
  12. </ P >    
  13. <?    
  14. if  ( ! empty($searchstr) )   
  15. {   
  16. // empty()用来检查查询字串是否为空   
  17. // 如果不为空,调用grep查询   
  18. echo " < HR > \n";   
  19. // 调用grep对所有文件进行大小写非敏感模式的查询   
  20. $ cmdstr  =  "grep -i $searchstr *" ;   
  21. $ fp  =  popen ( $cmdstr, "r" ); // 执行命令并输出管道   
  22. $ myresult  =  array (); // 存储查询结果   
  23. while( $ buffer  =  fgetss  ($fp, 4096))   
  24. {   
  25. // grep返回这样格式: 文件名:匹配字串出现行数   
  26. // 因此我们利用函数split()分离处理数据   
  27. list($fname, $fline) = split(":",$buffer, 2);   
  28. // 我们只输出第一次匹配的结果   
  29. if ( !defined($myresult[$fname]))   
  30. $myresult[$fname] = $fline;   
  31. }   
  32. // 现在我们将结果存储在数组中,下面就可以处理并输出了   
  33. if ( count($myresult) )   
  34. {   
  35. echo " < OL > \n";   
  36. while(list($fname,$fline) = each($myresult))   
  37. echo " < LI >    
  38. < A   HREF =\"$fname\" > $fname </ A >  : $fline  </ LI > \n";   
  39. echo " </ OL > \n";   
  40. }   
  41. else   
  42. {   
  43. // 如果没有查询结果   
  44. echo "Sorry. Search on  < B > $searchstr </ B >    
  45. returned no results. < BR > \n";   
  46. }   
  47. pclose($fp);   
  48. }   
  49. ?>    
  50. <?    
  51. include ("include/footer.inc");   
  52. ?>   


From:http://developer.51cto.com/art/200911/165121.htm