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

IMIDC日本多IP服务器$88/月起,E3-123x/16GB/512G SSD/30M带宽

IMIDC是一家香港本土运营商,商家名为彩虹数据(Rainbow Cloud),全线产品自营,自有IP网络资源等,提供的产品包括VPS主机、独立服务器、站群独立服务器等,数据中心区域包括香港、日本、台湾、美国和南非等地机房,CN2网络直连到中国大陆。目前主机商针对日本独立服务器做促销活动,而且提供/28 IPv4,国内直连带宽优惠后每月仅88美元起。JP Multiple IP Customize...

LightNode($7.71/月)香港cn2精品线路

LightNode官网LightNode是一家位于香港的VPS服务商.提供基于KVM虚拟化技术的VPS.在提供全球常见节点的同时,还具备东南亚地区、中国香港等边缘节点.满足开发者建站,游戏应用,外贸电商等应用场景的需求。为用户带来高性能服务器以及优质的服务的同时还提供丰厚的促销活动,新用户注册最高送$20。注册用户带新客即可得10%返佣。商家支持PayPal,支付宝等支付方式。官网:https:/...

DMIT:香港国际线路vps,1.5GB内存/20GB SSD空间/4TB流量/1Gbps/KVM,$9.81/月

DMIT怎么样?DMIT是一家美国主机商,主要提供KVM VPS、独立服务器等,主要提供香港CN2、洛杉矶CN2 GIA等KVM VPS,稳定性、网络都很不错。支持中文客服,可Paypal、支付宝付款。2020年推出的香港国际线路的KVM VPS,大带宽,适合中转落地使用。现在有永久9折优惠码:July-4-Lite-10OFF,季付及以上还有折扣,非 中国路由优化;AS4134,AS4837 均...

站内搜索代码为你推荐
浏览器哪个好目前什么浏览器最好用?苹果x和xr哪个好苹果x和苹果xr买哪个好免费阅读小说app哪个好想看小说有什么好用的app推荐?手机浏览器哪个好目前手机浏览器哪个最好闪迪和金士顿哪个好tf卡闪迪和金士顿哪个更好ps软件哪个好PS哪一款软件比较好用呢苹果手机助手哪个好最新版iphone助手 PP助手好用吗?网页传奇哪个好玩近有什么好玩的网页传奇介绍么网页传奇哪个好玩传奇网页游戏哪个好玩的最新相关信息无纺布和熔喷布口罩哪个好表层水刺布,中间层pp无纺布+熔喷布,里层pp无纺布口罩好吗?
远程登陆工具 全站静态化 anylink 可外链网盘 太原网通测速平台 idc查询 安徽双线服务器 申请网站 空间登陆首页 免费个人主页 广东服务器托管 privatetracker 湖南铁通 蓝队云 塔式服务器 美国代理服务器 月付空间 wordpress安装 留言板 泥瓦工 更多