程序人生 提供数据深度挖掘服务

不经历风雨怎么见彩虹!明天将更好!!!

chen simpleID:bjbs_270
488087次访问,排名84好友0人,关注者10
暂无
bjbs_270的文章
原创 428 篇
翻译 2 篇
转载 61 篇
评论 143 篇
bjbs_270的公告
网名:心灯
MSN:bjbs27[at>hotmail.com
Gmail:3gwind[at>>gmail.com
中国之声   经济之声
音乐之声   都市之声
中华之声   神州之声
华夏普通   华夏双语
民族之声   文艺之声

留言本

  提供数据深度挖掘服务,如商城数据分析及再加工
最近评论
ibsrvk:wow power leveling
xiexiaowei2004:我急需要,麻烦版主拉,谢谢
xiexiaowei2004:版主,能把你这个源码发给我吗?我邮箱:xiexiaowei2004@sina.com
谢谢
zhouxz1026:写得太好了,真的很不错!赞一个!学习了!
蜂胶
蜂蜜
xiaofanku:兄弟可否给译一下!你这样从原网站摘来我个人觉得价值不大噢
文章分类
收藏
相册
ajax
ajax
AMFPHP (for flash)
dev2dev
eamoi之Coder日志
Greybox 弹出层
totodo'blog
yui-ex
YUI-EXT
锐道 (组件)
Blog
六翼天使
Book site
itstudy
C语言
C语言---1
C语言中的面向对象
Flash
Javascript
TinyMCE 在线编辑器
Linux
AIX 文档
Bash入门文章
cygwin 中国镜像
IBM-Linux文章
Linux 伊甸园软件下载
LinuxAid
linuxbyte
linux宝库
linux技术中坚站
Linux环境下软件的安装和使用
Mac文章
中国Linux 公社
中国LINUX论坛
全球代理列表
南 非 蜘 蛛
张微波的BLOG(RSS)
技术文档
服务器专区
极限 Linux
蓝森林-自由软件
超想软件
mysql
imysql
Perl
Perl DBI MYSQL
PHP类
ADOdb.Manual
bindows(gtk)
bloglines
coolcode
CSDN杂志
hahawen
OSTG
PEAR:常用模块
PFC技术文档
phpbuilder
phpclasses
phphtmllib
PHP-image
phplib
PHP-PFC
PHPX(RSS)
PHP文件管理器
symfony 翻译
ugia
web开发
WEB开发常用的类库
教程之家(RSS)
教程在线
文章中心(RSS)
无垠网-PHP
深空
RFC中文
RFC文档中文翻译
RFC资料站
SQLite
limodou的学习记录
WAP
IT salon
WAP世界
web services
IXR xml-rpc
Web2.0
w3cn.org
Wiki 百科
ICXO wiki
搜派百科
楚水wiki
维基百科
XML
10
21XML
xml xslt xpath 教程
中国标准XML
十万个XML
孟宪会精彩站
龙人网络
代理服务器
工具箱
Apache 2.2中文手册
java开源项目
jpgraph(RSS)
Linux on Laptops在笔记本上安装Linux
P2P中国 (点对点通信)
rrdtool 绘图类库
Smarty
xampp WEB服务安装包
一个图片转换的库magemagick
手机资料
报表,图形程序
网上学历认证
网络硬盘
自由的百科全书
路由追踪
国外网站
phplens
计数器
朋友站点
老站长的窝
其它
Tech Web
中国UML
我图我秀
诸侯快讯
嵌入式
arm
综合
Study-Area
WAPM
wapm.cn
web 2.0
xuki
嵌入式中间件
开源书翻译网站
开源文档网
自由软件制造场(GPL,MIT,BSD license
存档
软件项目交易
订阅我的博客
XML聚合  FeedSky
订阅到鲜果
订阅到Google
订阅到抓虾
订阅到BlogLines
订阅到Yahoo
订阅到GouGou
订阅到飞鸽
订阅到Rojo
订阅到newsgator
订阅到netvibes

原创 做个自己站内搜索引擎收藏

新一篇: 只要几分钟就可以你的服务器或空间有防盗链功能  | 旧一篇:  ASP.NET 中数据库操作初步

ccterran(原作)

作者:iwind

朋友用dreamweaver做了一个网站,没有动态的内容,只是一些个人收藏的文章,个人介绍等等。现在内容比较多了,想叫我帮他做一个搜索引擎。说实在的,这是一个不难的问题,于是就随手做了一个。现在我在其它论坛上也看到有人想做这个,于是就想说说这方面的知识,重在了解一下方法。

写程序前先要想好一个思路,下面是我的思路,可能谁有更好的,但注意这只是一个方法问题 :遍历所有文件 ? 读取内容 ? 搜索关键字,如果匹配就放入一个数组 ? 读数组。在实现这些步骤之前,我假定你的网页都是标准的,就是有标题(<title></title>),也有(<bod *></body>),如果你是用dreamweaver或者frontpage设计的,那么除非你故意删掉,它们都在存在的。下面就让我们一步步来完成并在工程中改善这个搜索引擎。

一,设计搜索表单
在网站的根目录下建个search.htm,内容如下
<html>
<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 type="text" name="keyword">
</div>
</td>
<td width="64%">
<input type="submit" name="Submit" value="搜索">
</td>
</tr>
</table>
</form>
</body>
</html>


二,搜索程序
再在根目录下建个search.php 的文件,用来处理search.htm表单传过来的数据.内容如下
<?php
//获取搜索关键字
$keyword=trim($_POST[“keyword”]);
//检查是否为空
if($keyword==””){
echo”您要搜索的关键字不能为空”;
exit;//结束程序
}
?>

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

我们可以用递归的方法遍历所有的文件,可以用函数opendir,readdir,也可以用PHP Directory的类。我们现在用前者.
<?php
//遍历所有文件的函数
function listFiles($dir){
$handle=opendir($dir);
while(false!==($file=readdir($handle))){
if($file!="."&&$file!=".."){
//如果是目录就继续搜索
if(is_dir("$dir/$file")){
listFiles("$dir/$file");
}
else{
//在这里进行处理
}
}
}
}

?>

在红字的地方我们可以对搜索到的文件进行读取,处理.下面就是读取文件内容,并检查内容中是否含有关键字$keyword,如果含有就把文件地址赋给一个数组。
<?php
//$dir是搜索的目录,$keyword是搜索的关键字 ,$array是存放的数组
function listFiles($dir,$keyword,&$array){
$handle=opendir($dir);
while(false!==($file=readdir($handle))){
if($file!="."&&$file!=".."){
if(is_dir("$dir/$file")){
listFiles("$dir/$file",$keyword,$array);
}
else{
//读取文件内容
$data=fread(fopen("$dir/$file","r"),filesize("$dir/$file"));
//不搜索自身
if($file!=”search.php”){
//是否匹配
if(eregi("$keyword",$data)){
$array[]="$dir/$file";
}
}
}
}
}
}
//定义数组$array
$array=array();
//执行函数
listFiles(".","php",$array);
//打印搜索结果
foreach($array as $value){
echo "$value"."<br>\n";
}
?>

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

if(eregi("$keyword",$data)){
$array[]="$dir/$file";
}
改成
if(eregi("$keyword",$data)){
if(eregi("<title>(.+)</title>",$data,$m)){
$title=$m["1"];
}
else{
$title="没有标题";
}
$array[]="$dir/$file $title";
}
原理就是,如果在文件内容中找到<title>xxx</title>,那么就把xxx取出来作为标题,如果找不到那么就把标题命名未”没有标题”.

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

$data=fread(fopen("$dir/$file","r"),filesize("$dir/$file"));
//不搜索自身
if($file!=”search.php”){
//是否匹配
if(eregi("$keyword",$data)){
改为
$data=fread(fopen("$dir/$file","r"),filesize("$dir/$file"));
if(eregi("<body([^>]+)>(.+)</body>",$data,$b)){
$body=strip_tags($b["2"]);
}
else{
$body=strip_tags($data);
}
if($file!="search.php"){
if(eregi("$keyword",$body)){

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执行时间超时是必要的。可以在文件头加上
set_time_limit(“600”);
以秒为单位,所以上面是设10分钟为限。


所以完整的程序就是
<?php
set_time_limit("600");
//获取搜索关键字
$keyword=trim($_POST["keyword"]);
//检查是否为空
if($keyword==""){
echo"您要搜索的关键字不能为空";
exit;//结束程序
}
function listFiles($dir,$keyword,&$array){
$handle=opendir($dir);
while(false!==($file=readdir($handle))){
if($file!="."&&$file!=".."){
if(is_dir("$dir/$file")){
listFiles("$dir/$file",$keyword,$array);
}
else{
$data=fread(fopen("$dir/$file","r"),filesize("$dir/$file"));
if(eregi("<body([^>]+)>(.+)</body>",$data,$b)){
$body=strip_tags($b["2"]);
}
else{
$body=strip_tags($data);
}
if($file!="search.php"){
if(eregi("$keyword",$body)){
if(eregi("<title>(.+)</title>",$data,$m)){
$title=$m["1"];
}
else{
$title="没有标题";
}
$array[]="$dir/$file $title";
}
}
}
}
}
}
$array=array();
listFiles(".","$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.

发表于 @ 2004年09月29日 16:44:00|评论(loading...)|编辑

新一篇: 只要几分钟就可以你的服务器或空间有防盗链功能  | 旧一篇:  ASP.NET 中数据库操作初步

评论

#senlover 发表于2008-01-21 21:10:13  IP: 121.32.66.*
请问上面这个怎样才能用到我的网站上面啊。。我是刚学建站的。。现在用Dreamweaver搞一个网站。。请这位大哥指点一下好么。
#senlover 发表于2008-01-24 11:38:19  IP: 58.63.113.*
请问这位大哥如果网站用了flash导航是不是就不能给网站做站内搜索啦??
发表评论  


当前用户设置只有注册用户才能发表评论。如果你没有登录,请点击登录
Csdn Blog version 3.1a
Copyright © bjbs_270