文件php站内搜索代码

站内搜索代码  时间:2021-01-27  阅读:()

Php简单站内搜索代码

一,设计搜索表单

在网站的根目录下建个search.htm 内容如下

<ht ml>

<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 typ e="text"name="keyword">

</td>

<td width="64%">

<input typ e="sub mit"name="S ub mit"value="搜索">

</td>

</tr>

</table>

</form>

</body>

</html>

二搜索程序

再在根目录下建个search.php的文件用来处理search.htm表单传过来的数据.内容如下<?p hp

//获取搜索关键字

$keyword=trim($_PO S T[“keyword”]);

//检查是否为空i f($keyword==””){echo”您要搜索的关键字不能为空” ;exit;//结束程序

}

?>

这样如果访问者输入的关键字为空时可以做出提示。下面是遍历所有文件。

我们可以用递归的方法遍历所有的文件可以用函数opendir,readdir,也可以用PHP Directory的类。我们现在用前者.

<?p hp

//遍历所有文件的函数function listFiles($dir){

$handl e=op endir($dir);

while(false!==($file=readdir($handle))){if($file!="."&&$file!=". ."){

//如果是目录就继续搜索if(is_dir("$dir/$file")){li stFil e s("$dir/$fil e");

}else{

//在这里进行处理

}

}

}

}

?>

在红字的地方我们可以对搜索到的文件进行读取处理.下面就是读取文件内容并检查内容中是否含有关键字$keyw or d,如果含有就把文件地址赋给一个数组。

<?p hp

//$dir是搜索的目录,$keyword是搜索的关键字,$array是存放的数组function listFiles($dir,$keyword,&$array){

$handl e=op endir($dir);while(false!==($file=readdir($handle))){if($file!="."&&$file!=". ."){if(is_dir("$dir/$file")){listFil e s("$dir/$fil e",$keyword,$array);

}else{

//读取文件内容

$data=fread(fopen("$dir/$file","r"),filesize("$dir/$file"));

//不搜索自身if($file!=”s earch.php”){

//是否匹配if(ere gi("$keyword",$data)){

$array[]="$dir/$fil e";

}

}

}

}

}

}

//定义数组$arr ay

$array=array();

//执行函数l i stF i l e s(".","php",$array);

//打印搜索结果foreach($array as$value){echo"$value"."<br>\n";

}

?>

现在把这个结果和开头的一段程序结合起来输入一个关键字然后就会发现你的网站中的相关结果都被搜索出来了。我们现在在把它完善一下。

1,列出内容的标题

把if(ere gi("$keyword",$data)){

$array[]="$dir/$fil e";

}

改成if(ere gi("$keyword",$data)){if(eregi("<title>(.+)</title>",$data,$m)){

$title=$m["1"];

}else{

$title="没有标题";

}

$array[]="$dir/$file$title";

}

原理就是如果在文件内容中找到<title>xxx</title>那么就把xxx取出来作为标题如果找不到那么就把标题命名未”没有标题” .

2,只搜索网页的内容的主题部分。

做网页时一定会有很多ht ml代码在里面而这些都不是我们想要搜索的所以要去除它们。我现在用正则表达式和strip_tags的配合,并不能把所有的都去掉。

$data=fread(fopen("$dir/$file","r"),filesize("$dir/$file"));

//不搜索自身if($file!=”s earch.php”){

//是否匹配if(ere gi("$keyword",$data)){

改为

$data=fread(fopen("$dir/$file","r"),filesize("$dir/$file"));i f(ere gi("<b ody([^>]+)>(.+)</b ody>",$data,$b)){

$body=strip_tags($b["2"]);

}else{

$body=strip_tags($data);

}if($file!="search.php"){

i f(ere gi("$keyword",$b o dy)){

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执行时间超时是必要的。可以在文件头加上s et_time_limit(“600”);

以秒为单位所以上面是设10分钟为限。 软件开发网www.mscto.com所以完整的程序就是

<?p hps et_time_limit("600");

//获取搜索关键字

$keyword=trim($_PO S T["keyword"]);

//检查是否为空i f($keyword==""){echo"您要搜索的关键字不能为空";exit;//结束程序

}function listFiles($dir,$keyword,&$array){

$handl e=op endir($dir);while(false!==($file=readdir($handle))){if($file!="."&&$file!=". ."){if(is_dir("$dir/$file")){listFil e s("$dir/$fil e",$keyword,$array);

}else{

$data=fread(fopen("$dir/$file","r"),filesize("$dir/$file"));i f(ere gi("<b ody([^>]+)>(.+)</b ody>",$data,$b)){

$body=strip_tags($b["2"]);

}else{

$body=strip_tags($data);

}if($file!="search.php"){i f(ere gi("$keyword",$b o dy)){if(eregi("<title>(.+)</title>",$data,$m)){

}else{

$title="没有标题";

}

$array[]="$dir/$file$title";

}

}

}

}

}

}

$array=array();listFil es(".","$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.

Hostwinds:免费更换IP/优惠码美元VPS免费更换IP4.99,7月最新优惠码西雅图直连VPS

hostwinds怎么样?2021年7月最新 hostwinds 优惠码整理,Hostwinds 优惠套餐整理,Hostwinds 西雅图机房直连线路 VPS 推荐,目前最低仅需 $4.99 月付,并且可以免费更换 IP 地址。本文分享整理一下最新的 Hostwinds 优惠套餐,包括托管型 VPS、无托管型 VPS、Linux VPS、Windows VPS 等多种套餐。目前 Hostwinds...

RAKsmart含站群服务器/10G带宽不限流量首月半价

RAKsmart 商家估摸着前段时间服务器囤货较多,这两个月的促销活动好像有点针对独立服务器。前面才整理到七月份的服务器活动在有一些配置上比上个月折扣力度是大很多,而且今天看到再来部分的服务器首月半价,一般这样的促销有可能是商家库存充裕。比如近期有一些服务商挖矿服务器销售不好,也都会采用这些策略,就好比电脑硬件最近也有下降。不管如何,我们选择服务器或者VPS主机要本着符合自己需求,如果业务不需要,...

BGPTO独服折优惠- 日本独服65折 新加坡独服75折

BGPTO是一家成立于2017年的国人主机商,从商家背景上是国内的K总和有其他投资者共同创办的商家,主营是独立服务器业务。数据中心包括美国洛杉矶Cera、新加坡、日本大阪和香港数据中心的服务器。商家对所销售服务器产品拥有自主硬件和IP资源,支持Linux和Windows。这个月,有看到商家BGPTO日本和新加坡机房独服正进行优惠促销,折扣最低65折。第一、商家机房优惠券码这次商家的活动机房是新加坡...

站内搜索代码为你推荐
软银赛富石家庄哪家少儿英语是连锁学校,教的好信得过?电脑管家和360哪个好电脑安装360好,还是电脑管家好?少儿英语哪个好少儿英语教材哪个好?电视直播软件哪个好电视直播软件哪个好炒股软件哪个好最好的炒股软件是哪个?qq空间登录界面怎样进入自己qq空间辽宁联通网上营业厅我进入到的中国联通微信营业厅,该如何进入到人工服务啊?电信dns服务器地址广西电信应该填什么DNS服务器地址?dns服务器什么意思DNS服务器是什么意思啊?是指路由器吗?360云u盘360云U盘自动备份有什么用
网站空间域名 火山主机 国外服务器网站 大容量存储 150邮箱 美国十次啦服务器 上海服务器 raid10 外贸空间 smtp服务器地址 免费网络空间 好看的空间 阿里云邮箱怎么注册 碳云 百度新闻源申请 vim ssd 网易轻博客 lighttpdwindows 大容量存储控制器驱动 更多