文件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:台湾CN2/香港高主频服务器7折每月595元起,其他全场8折

ZJI原名维翔主机,是原来Wordpress圈知名主机商家,成立于2011年,2018年9月更名为ZJI,提供香港、日本、美国独立服务器(自营/数据中心直营)租用及VDS、虚拟主机空间、域名注册业务。ZJI今年全新上架了台湾CN2线路服务器,本月针对香港高主频服务器和台湾CN2服务器提供7折优惠码,其他机房及产品提供8折优惠码,优惠后台湾CN2线路E5服务器月付595元起。台湾一型CPU:Inte...

简单测评melbicom俄罗斯莫斯科数据中心的VPS,三网CN2回国,电信双程cn2

melbicom从2015年就开始运作了,在国内也是有一定的粉丝群,站长最早是从2017年开始介绍melbicom。上一次测评melbicom是在2018年,由于期间有不少人持续关注这个品牌,而且站长貌似也听说过路由什么的有变动的迹象。为此,今天重新对莫斯科数据中心的VPS进行一次简单测评,数据仅供参考。官方网站: https://melbicom.net比特币、信用卡、PayPal、支付宝、银联...

简单测评v5.net的美国cn2云服务器:电信双程cn2+联通AS9929+移动直连

v5.net一直做独立服务器这块儿的,自从推出云服务器(VPS)以来站长一直还没有关注过,在网友的提醒下弄了个6G内存、2核、100G SSD的美国云服务器来写测评,主机测评给大家趟雷,让你知道v5.net的美国云服务器效果怎么样。本次测评数据仅供参考,有兴趣的还是亲自测试吧! 官方网站:https://v5.net/cloud.html 从显示来看CPU是e5-2660(2.2GHz主频),...

站内搜索代码为你推荐
桌面背景图片大全手机壁纸图片大全电视直播软件哪个好电视直播软件哪个好英语词典哪个好什么英语词典好?手机浏览器哪个好用手机用哪个浏览器好一点看书软件哪个好手机读书软件哪个好用?清理手机垃圾软件哪个好清理手机垃圾文件的软件哪个好?qq空间登录不上qq空间登不上去考生个人空间登录湖南高等教育自学考试 考生个人空间登录密码忘记了怎么办东莞电信宽带资费东莞电信无线宽带上网卡资费dns服务器有什么用DNS服务器有什么做用
hostgator 老鹰主机 国外php主机 表单样式 标准机柜尺寸 大容量存储 域名转向 网站木马检测工具 域名评估 共享主机 vip购优惠 如何用qq邮箱发邮件 789电视剧 帽子云排名 万网注册 云服务是什么意思 apnic 乐视会员免费领取 xshell5注册码 windowssever2008 更多