所有页面都是静态的html,如何实现站内搜索呢?首先介绍一下本文的思路,可能谁有更好的,但注意这只是一个方法问题
:遍历所有文件 , 读取内容 ,搜索关键字,如果匹配就放入一个数组 , 读数组。在实现这些步骤之前,这里假定你的网页都是标准的,就是有标题(<title></title>),也有(<bod
*></body>),如果你是用dreamweaver或者frontpage设计的,那么除非你故意删掉,它们都在存在的。下面就
让我们一步步来完成并在工程中改善这个搜索引擎。
一,设计搜索表单
在网站的根目录下建个search.htm,内容如下:
- <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表单传过来的数据.内容如下
- <?php
- // 获取搜索关键字
- $keyword=trim($_POST[“keyword”]);
- //检查是否为空
- if($keyword==””){
- echo” 您要搜索的关键字不能为空”;
- exit;//结束程序
- }
- ?>
复制代码
这样如果访问者输入的关键字为空时,可以做出提示。下面是遍历所有文件。
我们可以用递归的方法遍历所有的文件,可以用函数opendir,readdir,也可以用PHP
Directory的类。我们现在用前者.
- <?php
- // 遍历所有文件的函数
- function listFiles($dir){
- $handle=opendir($dir);
- while(false!==($file=readdir($handle))){
-
if($file!="."&&$file!=".."){
- // 如果是目录就继续搜索
- if(is_dir("$dir/$file")){
- listFiles("$dir/$file");
- }
- else{
- // 在这里进行处理
- }
- }
- }
- }
- ?>
复制代码
在红字的地方我们可以对搜索到的文件进行读取,处理.下面就是读取文件内容,并检查内容中是否含有关键字$keyword,如果含有就把文件地址赋
给一个数组。
- <?php
- //$dir是搜索的目录,$keyword是搜索的关键字 ,$array是存放的数组
- 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($file!=”search.php”){
- //是否匹配
- if(eregi("$keyword",$data)){
- $array[]="$dir/$file";
- }
- }
- }
- }
- }
- }
- // 定义数组$array
- $array=array();
- //执行函数
- listFiles(".","php",$array);
- // 打印搜索结果
- foreach($array as $value){
- echo
"$value"."<br>\n";
- }
- ?>
复制代码
现在把这个结果和开头的一段程序结合起来,输入一个关键字,然后就会发现你的网站中的相关结果都被搜索出来了。我们现在在把它完善一下。
1, 列出内容的标题
把
- if(eregi("$keyword",$data)){
- $array[]="$dir/$file";
- }
- 改 成
- if(eregi("$keyword",$data)){
-
if(eregi("<title>(.+)</title>",$data,$m)){
- $title=$m["1"];
- }
- else{
- $title=" 没有标题";
- }
- $array[]="$dir/$file $title";
- }
复制代码
原理就是,如果在文件内容中找
到<title>xxx</title>,那么就把xxx取出来作为标题,如果找不到那么就把标题命名未”没有标题”.
2,只搜索网页的内容的主题部分。
做网页时一定会有很多html代码在里面,而这些都不是我们想要搜索的,所以要去除它们。我现在用正则表
达式和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,标题上加链接
- foreach($array as $value){
- echo
"$value"."<br>\n";
- }
复制代码
-
$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,标题上加链接
- 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执行时间超时是必要的。可以在文件头加上
set_time_limit(“600”);
以秒为单位,所以上 面是设10分钟为限。
所以完整的程序就是
- <?php
- set_time_limit("600");
- //获取搜索关键字
- $keyword=trim($_POST["keyword"]);
- // 检查是否为空
- if($keyword==""){
- echo"您要搜索的关键字不能为空";
- 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=" 没有标题";
- }
- $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";
- }
- ?>
复制代码
到此为止,你已经做好了自己的一个搜索引擎,你也可以通过修改内容处理部分来改进它,可以实现搜索标题,或者搜索内容的功能。也可以考虑分页。这些
都留给你自己吧。
这里说明一下用preg_match代替eregi,会快很多。这里只是为了通俗易懂,所以使用了常用的eregi.
|
所有页面都是静态的html,如何实现站内搜索呢?首先介绍一下本文的思路,可能谁有更好的,但注意这只是一个方法问题
:遍历所有文件 , 读取内容 ,搜索关键字,如果匹配就放入一个数组 , 读数组。在实现这些步骤之前,这里假定你的网页都是标准的,就是有标题(<title></title>),也有(<bod
*></body>),如果你是用dreamweaver或者frontpage设计的,那么除非你故意删掉,它们都在存在的。下面就
让我们一步步来完成并在工程中改善这个搜索引擎。
一,设计搜索表单
在网站的根目录下建个search.htm,内容如下:
- <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表单传过来的数据.内容如下
- <?php
- // 获取搜索关键字
- $keyword=trim($_POST[“keyword”]);
- //检查是否为空
- if($keyword==””){
- echo” 您要搜索的关键字不能为空”;
- exit;//结束程序
- }
- ?>
复制代码
这样如果访问者输入的关键字为空时,可以做出提示。下面是遍历所有文件。
我们可以用递归的方法遍历所有的文件,可以用函数opendir,readdir,也可以用PHP
Directory的类。我们现在用前者.
- <?php
- // 遍历所有文件的函数
- function listFiles($dir){
- $handle=opendir($dir);
- while(false!==($file=readdir($handle))){
-
if($file!="."&&$file!=".."){
- // 如果是目录就继续搜索
- if(is_dir("$dir/$file")){
- listFiles("$dir/$file");
- }
- else{
- // 在这里进行处理
- }
- }
- }
- }
- ?>
复制代码
在红字的地方我们可以对搜索到的文件进行读取,处理.下面就是读取文件内容,并检查内容中是否含有关键字$keyword,如果含有就把文件地址赋
给一个数组。
- <?php
- //$dir是搜索的目录,$keyword是搜索的关键字 ,$array是存放的数组
- 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($file!=”search.php”){
- //是否匹配
- if(eregi("$keyword",$data)){
- $array[]="$dir/$file";
- }
- }
- }
- }
- }
- }
- // 定义数组$array
- $array=array();
- //执行函数
- listFiles(".","php",$array);
- // 打印搜索结果
- foreach($array as $value){
- echo
"$value"."<br>\n";
- }
- ?>
复制代码
现在把这个结果和开头的一段程序结合起来,输入一个关键字,然后就会发现你的网站中的相关结果都被搜索出来了。我们现在在把它完善一下。
1, 列出内容的标题
把
- if(eregi("$keyword",$data)){
- $array[]="$dir/$file";
- }
- 改 成
- if(eregi("$keyword",$data)){
-
if(eregi("<title>(.+)</title>",$data,$m)){
- $title=$m["1"];
- }
- else{
- $title=" 没有标题";
- }
- $array[]="$dir/$file $title";
- }
复制代码
原理就是,如果在文件内容中找
到<title>xxx</title>,那么就把xxx取出来作为标题,如果找不到那么就把标题命名未”没有标题”.
2,只搜索网页的内容的主题部分。
做网页时一定会有很多html代码在里面,而这些都不是我们想要搜索的,所以要去除它们。我现在用正则表
达式和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,标题上加链接
- foreach($array as $value){
- echo
"$value"."<br>\n";
- }
复制代码
-
$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,标题上加链接
- 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执行时间超时是必要的。可以在文件头加上
set_time_limit(“600”);
以秒为单位,所以上 面是设10分钟为限。
所以完整的程序就是
- <?php
- set_time_limit("600");
- //获取搜索关键字
- $keyword=trim($_POST["keyword"]);
- // 检查是否为空
- if($keyword==""){
- echo"您要搜索的关键字不能为空";
- 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=" 没有标题";
- }
- $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";
- }
- ?>
复制代码
到此为止,你已经做好了自己的一个搜索引擎,你也可以通过修改内容处理部分来改进它,可以实现搜索标题,或者搜索内容的功能。也可以考虑分页。这些
都留给你自己吧。
这里说明一下用preg_match代替eregi,会快很多。这里只是为了通俗易懂,所以使用了常用的eregi.
|
所有页面都是静态的html,如何实现站内搜索呢?首先介绍一下本文的思路,可能谁有更好的,但注意这只是一个方法问题
:遍历所有文件 , 读取内容 ,搜索关键字,如果匹配就放入一个数组
, 读数组。在实现这些步骤之前,这里假定你的网页都是标准的,就是有标题(<title></title>),也有(<bod
*></body>),如果你是用dreamweaver或者frontpage设计的,那么除非你故意删掉,它们都在存在的。下面就
让我们一步步来完成并在工程中改善这个搜索引擎。
一,设计搜索表单
在网站的根目录下建个search.htm,内容如下:
- <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表单传过来的数据.内容如下
- <?php
- // 获取搜索关键字
- $keyword=trim($_POST[“keyword”]);
- //检查是否为空
- if($keyword==””){
- echo” 您要搜索的关键字不能为空”;
- exit;//结束程序
- }
- ?>
复制代码
这样如果访问者输入的关键字为空时,可以做出提示。下面是遍历所有文件。
我们可以用递归的方法遍历所有的文件,可以用函数opendir,readdir,也可以用PHP
Directory的类。我们现在用前者.
- <?php
- // 遍历所有文件的函数
- function listFiles($dir){
- $handle=opendir($dir);
- while(false!==($file=readdir($handle))){
-
if($file!="."&&$file!=".."){
- // 如果是目录就继续搜索
- if(is_dir("$dir/$file")){
- listFiles("$dir/$file");
- }
- else{
- // 在这里进行处理
- }
- }
- }
- }
- ?>
复制代码
在红字的地方我们可以对搜索到的文件进行读取,处理.下面就是读取文件内容,并检查内容中是否含有关键字$keyword,如果含有就把文件地址赋
给一个数组。
- <?php
- //$dir是搜索的目录,$keyword是搜索的关键字 ,$array是存放的数组
- 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($file!=”search.php”){
- //是否匹配
- if(eregi("$keyword",$data)){
- $array[]="$dir/$file";
- }
- }
- }
- }
- }
- }
- // 定义数组$array
- $array=array();
- //执行函数
- listFiles(".","php",$array);
- // 打印搜索结果
- foreach($array as $value){
- echo
"$value"."<br>\n";
- }
- ?>
复制代码
现在把这个结果和开头的一段程序结合起来,输入一个关键字,然后就会发现你的网站中的相关结果都被搜索出来了。我们现在在把它完善一下。
1, 列出内容的标题
把
- if(eregi("$keyword",$data)){
- $array[]="$dir/$file";
- }
- 改 成
- if(eregi("$keyword",$data)){
-
if(eregi("<title>(.+)</title>",$data,$m)){
- $title=$m["1"];
- }
- else{
- $title=" 没有标题";
- }
- $array[]="$dir/$file $title";
- }
复制代码
原理就是,如果在文件内容中找
到<title>xxx</title>,那么就把xxx取出来作为标题,如果找不到那么就把标题命名未”没有标题”.
2,只搜索网页的内容的主题部分。
做网页时一定会有很多html代码在里面,而这些都不是我们想要搜索的,所以要去除它们。我现在用正则表
达式和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,标题上加链接
- foreach($array as $value){
- echo
"$value"."<br>\n";
- }
复制代码
-
$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,标题上加链接
- 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执行时间超时是必要的。可以在文件头加上
set_time_limit(“600”);
以秒为单位,所以上 面是设10分钟为限。
所以完整的程序就是
- <?php
- set_time_limit("600");
- //获取搜索关键字
- $keyword=trim($_POST["keyword"]);
- // 检查是否为空
- if($keyword==""){
- echo"您要搜索的关键字不能为空";
- 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=" 没有标题";
- }
- $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";
- }
- ?>
复制代码
到此为止,你已经做好了自己的一个搜索引擎,你也可以通过修改内容处理部分来改进它,可以实现搜索标题,或者搜索内容的功能。也可以考虑分页。这些
都留给你自己吧。
这里说明一下用preg_match代替eregi,会快很多。这里只是为了通俗易懂,所以使用了常用的eregi.
|
所有页面都是静态的html,如何实现站内搜索呢?首先介绍一下本文的思路,可能谁有更好的,但注意这只是一个方法问题
:遍历所有文件 , 读取内容 ,搜索关键字,如果匹配就放入一个数组
, 读数组。在实现这些步骤之前,这里假定你的网页都是标准的,就是有标题(<title></title>),也有(<bod
*></body>),如果你是用dreamweaver或者frontpage设计的,那么除非你故意删掉,它们都在存在的。下面就
让我们一步步来完成并在工程中改善这个搜索引擎。
一,设计搜索表单
在网站的根目录下建个search.htm,内容如下:
- <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表单传过来的数据.内容如下
- <?php
- // 获取搜索关键字
- $keyword=trim($_POST[“keyword”]);
- //检查是否为空
- if($keyword==””){
- echo” 您要搜索的关键字不能为空”;
- exit;//结束程序
- }
- ?>
复制代码
这样如果访问者输入的关键字为空时,可以做出提示。下面是遍历所有文件。
我们可以用递归的方法遍历所有的文件,可以用函数opendir,readdir,也可以用PHP
Directory的类。我们现在用前者.
- <?php
- // 遍历所有文件的函数
- function listFiles($dir){
- $handle=opendir($dir);
- while(false!==($file=readdir($handle))){
-
if($file!="."&&$file!=".."){
- // 如果是目录就继续搜索
- if(is_dir("$dir/$file")){
- listFiles("$dir/$file");
- }
- else{
- // 在这里进行处理
- }
- }
- }
- }
- ?>
复制代码
在红字的地方我们可以对搜索到的文件进行读取,处理.下面就是读取文件内容,并检查内容中是否含有关键字$keyword,如果含有就把文件地址赋
给一个数组。
- <?php
- //$dir是搜索的目录,$keyword是搜索的关键字 ,$array是存放的数组
- 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($file!=”search.php”){
- //是否匹配
- if(eregi("$keyword",$data)){
- $array[]="$dir/$file";
- }
- }
- }
- }
- }
- }
- // 定义数组$array
- $array=array();
- //执行函数
- listFiles(".","php",$array);
- // 打印搜索结果
- foreach($array as $value){
- echo
"$value"."<br>\n";
- }
- ?>
复制代码
现在把这个结果和开头的一段程序结合起来,输入一个关键字,然后就会发现你的网站中的相关结果都被搜索出来了。我们现在在把它完善一下。
1, 列出内容的标题
把
- if(eregi("$keyword",$data)){
- $array[]="$dir/$file";
- }
- 改 成
- if(eregi("$keyword",$data)){
-
if(eregi("<title>(.+)</title>",$data,$m)){
- $title=$m["1"];
- }
- else{
- $title=" 没有标题";
- }
- $array[]="$dir/$file $title";
- }
复制代码
原理就是,如果在文件内容中找
到<title>xxx</title>,那么就把xxx取出来作为标题,如果找不到那么就把标题命名未”没有标题”.
2,只搜索网页的内容的主题部分。
做网页时一定会有很多html代码在里面,而这些都不是我们想要搜索的,所以要去除它们。我现在用正则表
达式和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,标题上加链接
- foreach($array as $value){
- echo
"$value"."<br>\n";
- }
复制代码
-
$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,标题上加链接
- 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执行时间超时是必要的。可以在文件头加上
set_time_limit(“600”);
以秒为单位,所以上 面是设10分钟为限。
所以完整的程序就是
- <?php
- set_time_limit("600");
- //获取搜索关键字
- $keyword=trim($_POST["keyword"]);
- // 检查是否为空
- if($keyword==""){
- echo"您要搜索的关键字不能为空";
- 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=" 没有标题";
- }
- $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";
- }
- ?>
复制代码
到此为止,你已经做好了自己的一个搜索引擎,你也可以通过修改内容处理部分来改进它,可以实现搜索标题,或者搜索内容的功能。也可以考虑分页。这些
都留给你自己吧。
这里说明一下用preg_match代替eregi,会快很多。这里只是为了通俗易懂,所以使用了常用的eregi.
|
所有页面都是静态的html,如何实现站内搜索呢?首先介绍一下本文的思路,可能谁有更好的,但注意这只是一个方法问题
:遍历所有文件 , 读取内容 ,搜索关键字,如果匹配就放入一个数组
, 读数组。在实现这些步骤之前,这里假定你的网页都是标准的,就是有标题(<title></title>),也有(<bod
*></body>),如果你是用dreamweaver或者frontpage设计的,那么除非你故意删掉,它们都在存在的。下面就
让我们一步步来完成并在工程中改善这个搜索引擎。
一,设计搜索表单
在网站的根目录下建个search.htm,内容如下:
- <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表单传过来的数据.内容如下
- <?php
- // 获取搜索关键字
- $keyword=trim($_POST[“keyword”]);
- //检查是否为空
- if($keyword==””){
- echo” 您要搜索的关键字不能为空”;
- exit;//结束程序
- }
- ?>
复制代码
这样如果访问者输入的关键字为空时,可以做出提示。下面是遍历所有文件。
我们可以用递归的方法遍历所有的文件,可以用函数opendir,readdir,也可以用PHP
Directory的类。我们现在用前者.
- <?php
- // 遍历所有文件的函数
- function listFiles($dir){
- $handle=opendir($dir);
- while(false!==($file=readdir($handle))){
-
if($file!="."&&$file!=".."){
- // 如果是目录就继续搜索
- if(is_dir("$dir/$file")){
- listFiles("$dir/$file");
- }
- else{
- // 在这里进行处理
- }
- }
- }
- }
- ?>
复制代码
在红字的地方我们可以对搜索到的文件进行读取,处理.下面就是读取文件内容,并检查内容中是否含有关键字$keyword,如果含有就把文件地址赋
给一个数组。
- <?php
- //$dir是搜索的目录,$keyword是搜索的关键字 ,$array是存放的数组
- 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($file!=”search.php”){
- //是否匹配
- if(eregi("$keyword",$data)){
- $array[]="$dir/$file";
- }
- }
- }
- }
- }
- }
- // 定义数组$array
- $array=array();
- //执行函数
- listFiles(".","php",$array);
- // 打印搜索结果
- foreach($array as $value){
- echo
"$value"."<br>\n";
- }
- ?>
复制代码
现在把这个结果和开头的一段程序结合起来,输入一个关键字,然后就会发现你的网站中的相关结果都被搜索出来了。我们现在在把它完善一下。
1, 列出内容的标题
把
- if(eregi("$keyword",$data)){
- $array[]="$dir/$file";
- }
- 改 成
- if(eregi("$keyword",$data)){
-
if(eregi("<title>(.+)</title>",$data,$m)){
- $title=$m["1"];
- }
- else{
- $title=" 没有标题";
- }
- $array[]="$dir/$file $title";
- }
复制代码
原理就是,如果在文件内容中找
到<title>xxx</title>,那么就把xxx取出来作为标题,如果找不到那么就把标题命名未”没有标题”.
2,只搜索网页的内容的主题部分。
做网页时一定会有很多html代码在里面,而这些都不是我们想要搜索的,所以要去除它们。我现在用正则表
达式和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,标题上加链接
- foreach($array as $value){
- echo
"$value"."<br>\n";
- }
复制代码
-
$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,标题上加链接
- 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执行时间超时是必要的。可以在文件头加上
set_time_limit(“600”);
以秒为单位,所以上 面是设10分钟为限。
所以完整的程序就是
- <?php
- set_time_limit("600");
- //获取搜索关键字
- $keyword=trim($_POST["keyword"]);
- // 检查是否为空
- if($keyword==""){
- echo"您要搜索的关键字不能为空";
- 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=" 没有标题";
- }
- $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";
- }
- ?>
复制代码
到此为止,你已经做好了自己的一个搜索引擎,你也可以通过修改内容处理部分来改进它,可以实现搜索标题,或者搜索内容的功能。也可以考虑分页。这些
都留给你自己吧。
这里说明一下用preg_match代替eregi,会快很多。这里只是为了通俗易懂,所以使用了常用的eregi.
|
所有页面都是静态的html,如何实现站内搜索呢?首先介绍一下本文的思路,可能谁有更好的,但注意这只是一个方法问题
:遍历所有文件 , 读取内容 ,搜索关键字,如果匹配就放入一个数组
, 读数组。在实现这些步骤之前,这里假定你的网页都是标准的,就是有标题(<title></title>),也有(<bod
*></body>),如果你是用dreamweaver或者frontpage设计的,那么除非你故意删掉,它们都在存在的。下面就
让我们一步步来完成并在工程中改善这个搜索引擎。
一,设计搜索表单
在网站的根目录下建个search.htm,内容如下:
- <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表单传过来的数据.内容如下
- <?php
- // 获取搜索关键字
- $keyword=trim($_POST[“keyword”]);
- //检查是否为空
- if($keyword==””){
- echo” 您要搜索的关键字不能为空”;
- exit;//结束程序
- }
- ?>
复制代码
这样如果访问者输入的关键字为空时,可以做出提示。下面是遍历所有文件。
我们可以用递归的方法遍历所有的文件,可以用函数opendir,readdir,也可以用PHP
Directory的类。我们现在用前者.
- <?php
- // 遍历所有文件的函数
- function listFiles($dir){
- $handle=opendir($dir);
- while(false!==($file=readdir($handle))){
-
if($file!="."&&$file!=".."){
- // 如果是目录就继续搜索
- if(is_dir("$dir/$file")){
- listFiles("$dir/$file");
- }
- else{
- // 在这里进行处理
- }
- }
- }
- }
- ?>
复制代码
在红字的地方我们可以对搜索到的文件进行读取,处理.下面就是读取文件内容,并检查内容中是否含有关键字$keyword,如果含有就把文件地址赋
给一个数组。
- <?php
- //$dir是搜索的目录,$keyword是搜索的关键字 ,$array是存放的数组
- 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($file!=”search.php”){
- //是否匹配
- if(eregi("$keyword",$data)){
- $array[]="$dir/$file";
- }
- }
- }
- }
- }
- }
- // 定义数组$array
- $array=array();
- //执行函数
- listFiles(".","php",$array);
- // 打印搜索结果
- foreach($array as $value){
- echo
"$value"."<br>\n";
- }
- ?>
复制代码
现在把这个结果和开头的一段程序结合起来,输入一个关键字,然后就会发现你的网站中的相关结果都被搜索出来了。我们现在在把它完善一下。
1, 列出内容的标题
把
- if(eregi("$keyword",$data)){
- $array[]="$dir/$file";
- }
- 改 成
- if(eregi("$keyword",$data)){
-
if(eregi("<title>(.+)</title>",$data,$m)){
- $title=$m["1"];
- }
- else{
- $title=" 没有标题";
- }
- $array[]="$dir/$file $title";
- }
复制代码
原理就是,如果在文件内容中找
到<title>xxx</title>,那么就把xxx取出来作为标题,如果找不到那么就把标题命名未”没有标题”.
2,只搜索网页的内容的主题部分。
做网页时一定会有很多html代码在里面,而这些都不是我们想要搜索的,所以要去除它们。我现在用正则表
达式和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,标题上加链接
- foreach($array as $value){
- echo
"$value"."<br>\n";
- }
复制代码
-
$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,标题上加链接
- 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执行时间超时是必要的。可以在文件头加上
set_time_limit(“600”);
以秒为单位,所以上 面是设10分钟为限。
所以完整的程序就是
- <?php
- set_time_limit("600");
- //获取搜索关键字
- $keyword=trim($_POST["keyword"]);
- // 检查是否为空
- if($keyword==""){
- echo"您要搜索的关键字不能为空";
- 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=" 没有标题";
- }
- $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";
- }
- ?>
复制代码
到此为止,你已经做好了自己的一个搜索引擎,你也可以通过修改内容处理部分来改进它,可以实现搜索标题,或者搜索内容的功能。也可以考虑分页。这些
都留给你自己吧。
这里说明一下用preg_match代替eregi,会快很多。这里只是为了通俗易懂,所以使用了常用的eregi.
|
所有页面都是静态的html,如何实现站内搜索呢?首先介绍一下本文的思路,可能谁有更好的,但注意这只是一个方法问题
:遍历所有文件 , 读取内容 ,搜索关键字,如果匹配就放入一个数组
, 读数组。在实现这些步骤之前,这里假定你的网页都是标准的,就是有标题(<title></title>),也有(<bod
*></body>),如果你是用dreamweaver或者frontpage设计的,那么除非你故意删掉,它们都在存在的。下面就
让我们一步步来完成并在工程中改善这个搜索引擎。
一,设计搜索表单
在网站的根目录下建个search.htm,内容如下:
- <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表单传过来的数据.内容如下
- <?php
- // 获取搜索关键字
- $keyword=trim($_POST[“keyword”]);
- //检查是否为空
- if($keyword==””){
- echo” 您要搜索的关键字不能为空”;
- exit;//结束程序
- }
- ?>
复制代码
这样如果访问者输入的关键字为空时,可以做出提示。下面是遍历所有文件。
我们可以用递归的方法遍历所有的文件,可以用函数opendir,readdir,也可以用PHP
Directory的类。我们现在用前者.
- <?php
- // 遍历所有文件的函数
- function listFiles($dir){
- $handle=opendir($dir);
- while(false!==($file=readdir($handle))){
-
if($file!="."&&$file!=".."){
- // 如果是目录就继续搜索
- if(is_dir("$dir/$file")){
- listFiles("$dir/$file");
- }
- else{
- // 在这里进行处理
- }
- }
- }
- }
- ?>
复制代码
在红字的地方我们可以对搜索到的文件进行读取,处理.下面就是读取文件内容,并检查内容中是否含有关键字$keyword,如果含有就把文件地址赋
给一个数组。
- <?php
- //$dir是搜索的目录,$keyword是搜索的关键字 ,$array是存放的数组
- 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($file!=”search.php”){
- //是否匹配
- if(eregi("$keyword",$data)){
- $array[]="$dir/$file";
- }
- }
- }
- }
- }
- }
- // 定义数组$array
- $array=array();
- //执行函数
- listFiles(".","php",$array);
- // 打印搜索结果
- foreach($array as $value){
- echo
"$value"."<br>\n";
- }
- ?>
复制代码
现在把这个结果和开头的一段程序结合起来,输入一个关键字,然后就会发现你的网站中的相关结果都被搜索出来了。我们现在在把它完善一下。
1, 列出内容的标题
把
- if(eregi("$keyword",$data)){
- $array[]="$dir/$file";
- }
- 改 成
- if(eregi("$keyword",$data)){
-
if(eregi("<title>(.+)</title>",$data,$m)){
- $title=$m["1"];
- }
- else{
- $title=" 没有标题";
- }
- $array[]="$dir/$file $title";
- }
复制代码
原理就是,如果在文件内容中找
到<title>xxx</title>,那么就把xxx取出来作为标题,如果找不到那么就把标题命名未”没有标题”.
2,只搜索网页的内容的主题部分。
做网页时一定会有很多html代码在里面,而这些都不是我们想要搜索的,所以要去除它们。我现在用正则表
达式和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,标题上加链接
- foreach($array as $value){
- echo
"$value"."<br>\n";
- }
复制代码
-
$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,标题上加链接
- 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执行时间超时是必要的。可以在文件头加上
set_time_limit(“600”);
以秒为单位,所以上 面是设10分钟为限。
所以完整的程序就是
- <?php
- set_time_limit("600");
- //获取搜索关键字
- $keyword=trim($_POST["keyword"]);
- // 检查是否为空
- if($keyword==""){
- echo"您要搜索的关键字不能为空";
- 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=" 没有标题";
- }
- $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";
- }
- ?>
复制代码
到此为止,你已经做好了自己的一个搜索引擎,你也可以通过修改内容处理部分来改进它,可以实现搜索标题,或者搜索内容的功能。也可以考虑分页。这些
都留给你自己吧。
这里说明一下用preg_match代替eregi,会快很多。这里只是为了通俗易懂,所以使用了常用的eregi.
|
所有页面都是静态的html,如何实现站内搜索呢?首先介绍一下本文的思路,可能谁有更好的,但注意这只是一个方法问题 :遍历所有文件
, 读取内容 ,搜索关键字,如果匹配就放入一个数组 ,
读数组。在实现这些步骤之前,这里假定你的网页都是标准的,就是有标题(<title></title>),也有(<bod
*></body>),如果你是用dreamweaver或者frontpage设计的,那么除非你故意删掉,它们都在存在的。下面就
让我们一步步来完成并在工程中改善这个搜索引擎。
一,设计搜索表单
在网站的根目录下建个search.htm,内容如下:
01.<html>
02.<head>
03.<title>
搜索表单</title>
04.<meta http-equiv="Content-Type"
content="text/html; charset=gb2312">
05.</head>
06.
07.<body bgcolor="#FFFFFF"
text="#000000">
08.<form name="form1" method="post"
action="search.php">
09.<table width="100%" cellspacing="0"
cellpadding="0">
10.<tr>
11.<td width="36%">
12.<div align="center">
13.<input type="text"
name="keyword">
14.</div>
15.</td>
16.<td width="64%">
17.<input type="submit" name="Submit"
value="搜索">
18.</td>
19.</tr>
20.</table>
21.</form>
22.</body>
23.</html>
复制代码
二,搜索程序
再在根目录下建个search.php
的文件,用来处理search.htm表单传过来的数据.内容如下
01.<?php
02.// 获取搜索关键字
03.$keyword=trim($_POST[“keyword”]);
04.//检查是否为空
05.if($keyword==””){
06.echo” 您要搜索的关键字不能为空”;
07.exit;//结束程序
08.}
09.?>
复制代码
这样如果访问者输入的关键字为空时,可以做出提示。下面是遍历所有文件。
我们可以用递归的方法遍历所有的文件,可以用函数opendir,readdir,也可以用PHP
Directory的类。我们现在用前者.
01.<?php
02.// 遍历所有文件的函数
03.function listFiles($dir){
04.$handle=opendir($dir);
05.while(false!==($file=readdir($handle))){
06.if($file!="."&&$file!=".."){
07.// 如果是目录就继续搜索
08.if(is_dir("$dir/$file")){
09.listFiles("$dir/$file");
10.}
11.else{
12.// 在这里进行处理
13.}
14.}
15.}
16.}
17.
18.?>
复制代码
在红字的地方我们可以对搜索到的文件进行读取,处理.下面就是读取文件内容,并检查内容中是否含有关键字$keyword,如果含有就把文件地址赋
给一个数组。
01.<?php
02.//$dir是搜索的目录,$keyword是搜索的关键字 ,$array是存放的数组
03.function
listFiles($dir,$keyword,&$array){
04.$handle=opendir($dir);
05.while(false!==($file=readdir($handle))){
06.if($file!="."&&$file!=".."){
07.if(is_dir("$dir/$file")){
08.listFiles("$dir/$file",$keyword,$array);
09.}
10.else{
11.// 读取文件内容
12.$data=fread(fopen("$dir/$file","r"),filesize("$dir/$file"));
13.// 不搜索自身
14.if($file!=”search.php”){
15.//是否匹配
16.if(eregi("$keyword",$data)){
17.$array[]="$dir/$file";
18.}
19.}
20.}
21.}
22.}
23.}
24.// 定义数组$array
25.$array=array();
26.//执行函数
27.listFiles(".","php",$array);
28.// 打印搜索结果
29.foreach($array as $value){
30.echo "$value"."<br>\n";
31.}
32.?>
复制代码
现在把这个结果和开头的一段程序结合起来,输入一个关键字,然后就会发现你的网站中的相关结果都被搜索出来了。我们现在在把它完善一下。
1, 列出内容的标题
把
01.if(eregi("$keyword",$data)){
02.$array[]="$dir/$file";
03.}
04.改 成
05.if(eregi("$keyword",$data)){
06.if(eregi("<title>(.+)</title>",$data,$m)){
07.$title=$m["1"];
08.}
09.else{
10.$title=" 没有标题";
11.}
12.$array[]="$dir/$file $title";
13.}
复制代码
原理就是,如果在文件内容中找
到<title>xxx</title>,那么就把xxx取出来作为标题,如果找不到那么就把标题命名未”没有标题”.
2,只搜索网页的内容的主题部分。
做网页时一定会有很多html代码在里面,而这些都不是我们想要搜索的,所以要去除它们。我现在用正则表
达式和strip_tags的配合,并不能把所有的都去掉。
把
01.$data=fread(fopen("$dir/$file","r"),filesize("$dir/$file"));
02.// 不搜索自身
03.if($file!=”search.php”){
04.//是否匹配
05.if(eregi("$keyword",$data)){
06.改 为
07.$data=fread(fopen("$dir/$file","r"),filesize("$dir/$file"));
08.if(eregi("<body([^>]+)>(.+)</body>",$data,$b)){
09.$body=strip_tags($b["2"]);
10.}
11.else{
12.$body=strip_tags($data);
13.}
14.if($file!="search.php"){
15.if(eregi("$keyword",$body)){
16.
17.3,标题上加链接
18.foreach($array as $value){
19.echo "$value"."<br>\n";
20.}
复制代码01.$data=fread(fopen("$dir/$file","r"),filesize("$dir/$file"));
02.// 不搜索自身
03.if($file!=”search.php”){
04.//是否匹配
05.if(eregi("$keyword",$data)){
06.改 为
07.$data=fread(fopen("$dir/$file","r"),filesize("$dir/$file"));
08.if(eregi("<body([^>]+)>(.+)</body>",$data,$b)){
09.$body=strip_tags($b["2"]);
10.}
11.else{
12.$body=strip_tags($data);
13.}
14.if($file!="search.php"){
15.if(eregi("$keyword",$body)){
16.
17.3,标题上加链接
18.foreach($array as $value){
19.echo "$value"."<br>\n";
20.}
复制代码
改成
01.foreach($array as $value){
02.//拆 开
03.list($filedir,$title)=split(“[ ]”,$value,”2”);
04.//输出
05.echo "<a
href=$filedir>$value</a>"."<br>\n";
06.}
复制代码
4防止超时
如 果文件比较多,那么防止PHP执行时间超时是必要的。可以在文件头加上
set_time_limit(“600”);
以秒为单位,所以上 面是设10分钟为限。
所以完整的程序就是
01.<?php
02.set_time_limit("600");
03.//获取搜索关键字
04.$keyword=trim($_POST["keyword"]);
05.// 检查是否为空
06.if($keyword==""){
07.echo"您要搜索的关键字不能为空";
08.exit;//结束程序
09.}
10.function
listFiles($dir,$keyword,&$array){
11.$handle=opendir($dir);
12.while(false!==($file=readdir($handle))){
13.if($file!="."&&$file!=".."){
14.if(is_dir("$dir/$file")){
15.listFiles("$dir/$file",$keyword,$array);
16.}
17.else{
18.$data=fread(fopen("$dir/$file","r"),filesize("$dir/$file"));
19.if(eregi("<body([^>]+)>(.+)</body>",$data,$b)){
20.$body=strip_tags($b["2"]);
21.}
22.else{
23.$body=strip_tags($data);
24.}
25.if($file!="search.php"){
26.if(eregi("$keyword",$body)){
27.if(eregi("<title>(.+)</title>",$data,$m)){
28.$title=$m["1"];
29.}
30.else{
31.$title=" 没有标题";
32.}
33.$array[]="$dir/$file $title";
34.}
35.}
36.}
37.}
38.}
39.}
40.$array=array();
41.listFiles(".","$keyword",$array);
42.foreach($array as $value){
43.//拆开
44.list($filedir,$title)=split("[ ]",$value,"2");
45.// 输出
46.echo "<a href=$filedir
target=_blank>$title
</a>"."<br>\n";
47.}
48.?>
复制代码
到此为止,你已经做好了自己的一个搜索引擎,你也可以通过修改内容处理部分来改进它,可以实现搜索标题,或者搜索内容的功能。也可以考虑分页。这些
都留给你自己吧。
这里说明一下用preg_match代替eregi,会快很多。这里只是为了通俗易懂,所以使用了常用的eregi.
加载中,请稍候......