文件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.

ZJI-全场八折优惠,香港服务器 600元起,还有日本/美国/韩国服务器

ZJI怎么样?ZJI是一家成立于2011年的商家,原名维翔主机,主要从事独立服务器产品销售,目前主打中国香港、日本、美国独立服务器产品,是一个稳定、靠谱的老牌商家。详情如下:月付/年付优惠码:zji??下物理服务器/VDS/虚拟主机空间订单八折终身优惠(长期有效)一、ZJI官网点击直达香港葵湾特惠B型 CPU:E5-2650L核心:6核12线程内存:16GB硬盘:480GB SSD带宽:5Mbps...

哪个好Vultr搬瓦工和Vultr97%,搬瓦工和Vultr全方位比较!

搬瓦工和Vultr哪个好?搬瓦工和Vultr都是非常火爆的国外VPS,可以说是国内网友买的最多的两家,那么搬瓦工和Vultr哪个好?如果要选择VPS,首先我们要考虑成本、服务器质量以及产品的售后服务。老玩家都知道目前在国内最受欢迎的国外VPS服务商vultr和搬瓦工口碑都很不错。搬瓦工和Vultr哪个稳定?搬瓦工和Vultr哪个速度快?为了回答这些问题,本文从线路、速度、功能、售后等多方面对比这两...

HostKvm($4.25/月)俄罗斯/香港高防VPS

HostKvm又上新了,这次上架了2个线路产品:俄罗斯和香港高防VPS,其中俄罗斯经测试电信CN2线路,而香港高防VPS提供30Gbps攻击防御。HostKvm是一家成立于2013年的国外主机服务商,主要提供基于KVM架构的VPS主机,可选数据中心包括日本、新加坡、韩国、美国、中国香港等多个地区机房,均为国内直连或优化线路,延迟较低,适合建站或者远程办公等。俄罗斯VPSCPU:1core内存:2G...

站内搜索代码为你推荐
腾讯空间首页怎么才能让自己QQ空间被腾讯推荐在QQ空间首页里面?p图软件哪个好用什么P图软件好用?燃气热水器和电热水器哪个好燃气热水器和电热水器哪个好华为p40和mate30哪个好华为mate30和荣耀3O那个好?少儿英语哪个好少儿英语哪种的好?录音软件哪个好录音软件哪个好用又简单宝来和朗逸哪个好大众朗逸好还是宝来好核芯显卡与独立显卡哪个好英特尔核芯显卡怎么样?和独立显卡那个更好?手机管家哪个好有哪些人下了手机管家,最好的是哪个?网校哪个好请问在网校排名中,哪个网校是最好的?想找一家最好的来选择啊?
如何注册域名 山东vps 域名备案流程 idc评测 腾讯云盘 联通c套餐 wavecom themeforest 美国主机论坛 哈喽图床 蜗牛魔方 台湾谷歌地址 免费吧 域名和空间 免费ftp 韩国代理ip 主机管理系统 全能空间 德讯 工信部icp备案查询 更多