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

Linode($5/月),新用户注册送100美元,11个数据中心云服务器

关于Linode,这是一家运营超过18年的VPS云主机商家,产品支持随时删除(按小时计费),可选包括美国、英国、新加坡、日本、印度、加拿大、德国等全球十多个数据中心,最低每月费用5美元($0.0075/小时)起。目前,注册Linode的新用户添加付款方式后可以获得100美元赠送,有效期为60天,让更多新朋友可以体验Linode的产品和服务。Linode的云主机产品分为几类,下面分别列出几款套餐配置...

百星数据(60元/月,600元/年)日本/韩国/香港cn2 gia云服务器,2核2G/40G/5M带宽

百星数据(baixidc),2012年开始运作至今,主要提供境外自营云服务器和独立服务器出租业务,根据网络线路的不同划分为:美国cera 9929、美国cn2 gia、香港cn2 gia、韩国cn2 gia、日本cn2 gia等云服务器及物理服务器业务。目前,百星数据 推出的日本、韩国、香港cn2 gia云服务器,2核2G/40G/5M带宽低至60元/月,600元/年。百星数据优惠码:优惠码:30...

CloudCone:洛杉矶MC机房KVM月付1.99美元起,支持支付宝/PayPal

CloudCone是一家成立于2017年的国外VPS主机商,提供独立服务器租用和VPS主机,其中VPS基于KVM架构,多个不同系列,譬如常规VPS、大硬盘VPS等等,数据中心在洛杉矶MC机房。商家2021年Flash Sale活动继续,最低每月1.99美元,支持7天退款到账户,支持使用PayPal或者支付宝付款,先充值后下单的方式。下面列出几款VPS主机配置信息。CPU:1core内存:768MB...

站内搜索代码为你推荐
腾讯空间首页手机QQ空间首页从哪里进入!985和211哪个好高校是985一般专业还是211好专业?美国国际东西方大学美国大学一年学费是多少?51空间登录51空间,怎么添加啊?怎么登陆?qq空间登录不上为什么我的qq空间登不上去东莞电信宽带资费东莞电信无线宽带上网卡资费首选dns服务器地址什么是首选DNS服务器,备用DNS服务器?是电脑还是什么?dns服务器故障DNS服务器老是出错 如何从根本上解决??dns服务器故障DNS服务解析故障 怎么办360云查杀360杀毒有没有云查杀功能?
成都主机租用 网页空间租用 域名交易网 仿牌空间 raksmart 外国服务器 圣迭戈 iisphpmysql 免费博客空间 mysql主机 警告本网站美国保护 泉州电信 免费防火墙 鲁诺 789电视剧 双线机房 湖南idc 全能空间 华为k3 腾讯数据库 更多