All articles| All Pictures| All Softwares| All Video| Go home page| Write articles| Upload pictures

Reading number is top 10 articles
delphi构造函数与析构函数的使用方法
高效交换XML文档_[XML教程]
asp.net将Execl读到DataSet或DataTable中_[Asp.Net教程]
在PHP中执行系统外部命令_[PHP教程]
如何使用SQL Server数据库嵌套子查询_[SQL Server教程]
技巧:PHP的优化,缓冲,压缩实际的解决方案_php资料_编程技术
引入ASP.NET,Web部件连接_[Asp.Net教程]
asp.net2.0服务器控件之ImageButton控件
Asp.net和C#开发中的一些注意事项及小技巧_.net资料_编程技术
将GridView内容导出到Excel或Word中_[Asp.Net教程]
Reading number is top 10 pictures
9.3阅兵全景图3-外国方阵梯队和坦克方阵梯队
人物写真-谢楠
西游四格漫画(六)
身材野火台灣美女2
这才叫绝色美女1
Summer is most suitable for young people to travel in China8
传奇套装
穷哥们向美女求婚攻略
中国女孩大胆自拍,显露完美身材4
photos of ashlynn brooke(ashlynn brooke的美图)
Download software ranking
WebService在.NET中的实战应用教学视频 → 第3集
Boxer's Top ten classic battle6
dreamweaver8中文版
Prostitutes diary
美女游泳记
Wild things 2
The Bermuda triangle2
matrix2
Unix video tutorial15
Tram sex maniac 2 (H) rar bag14
归海一刀 published in(发表于) 2014/2/17 7:33:33 Edit(编辑)
PHP实例:用PHP程序为自己网站打造一个搜索引擎_[PHP教程]

PHP实例:用PHP程序为自己网站打造一个搜索引擎_[PHP教程]

PHP实例:用PHP程序为自己网站打造一个搜索引擎_[PHP教程]

一,设计搜索表单


在网站的根目录下建个search.htm,内容如下




搜索表单





























二,搜索程序


再在根目录下建个search.php 的文件,用来处理search.htm表单传过来的数据.内容如下


//获取搜索关键字
keyword=trim(_POST[“keyword”]);
//检查是否为空
if(keyword==””){
echo”您要搜索的关键字不能为空”;
exit;//结束程序
}
?>


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


我们可以用递归的方法遍历所有的文件,可以用函数opendir,readdir,也可以用PHP Directory的类。我们现在用前者.


//遍历所有文件的函数
function listFiles(dir){
handle=opendir(dir);
while(false!==(file=readdir(handle))){
if(file!="."&&file!=".."){
//如果是目录就继续搜索
if(is_dir("dir/file")){
listFiles("dir/file");
}
else{
//在这里进行处理
}
}
}
}
?>


在红字的地方我们可以对搜索到的文件进行读取,处理.下面就是读取文件内容,并检查内容中是否含有关键字keyword,如果含有就把文件地址赋给一个数组。


//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"."
";
}
?>


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


1,列出内容的标题



if(eregi("keyword",data)){
array[]="dir/file";
}


改成


if(eregi("keyword",data)){
if(eregi("(.+)",data,m)){
title=m["1"];
}
else{
title="没有标题";
}
array[]="dir/file title";
}


原理就是,如果在文件内容中找到xxx,那么就把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("]+)>(.+)",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"."
";
}


改成


foreach(array as value){
//拆开
list(filedir,title)=split(“[ ]”,value,”2”);
//输出
echo "value"."
";
}


4防止超时


如果文件比较多,那么防止PHP执行时间超时是必要的。可以在文件头加上


set_time_limit(“600”);


以秒为单位,所以上面是设10分钟为限。


所以完整的程序就是


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("]+)>(.+)",data,b)){
body=strip_tags(b["2"]);
}
else{
body=strip_tags(data);
}
if(file!="search.php"){
if(eregi("keyword",body)){
if(eregi("(.+)",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 "title "."
";
}
?>


到此为止,你已经做好了自己的一个搜索引擎,你也可以通过修改内容处理部分来改进它,可以实现搜索标题,或者搜索内容的功能。也可以考虑分页。这些都留给你自己吧。


这里说明一下用preg_match代替eregi,会快很多。这里只是为了通俗易懂,所以使用了常用的eregi.







添加到del.icio.us 添加到新浪ViVi 添加到百度搜藏 添加到POCO网摘 添加到天天网摘365Key 添加到和讯网摘 添加到天极网摘 添加到黑米书签 添加到QQ书签 添加到雅虎收藏 添加到奇客发现 diigo it 添加到饭否 添加到飞豆订阅 添加到抓虾收藏 添加到鲜果订阅 digg it 貼到funP 添加到有道阅读 Live Favorites 添加到Newsvine 打印本页 用Email发送本页 在Facebook上分享


Disclaimer Privacy Policy About us Site Map

If you have any requirements, please contact webmaster。(如果有什么要求,请联系站长)
Copyright ©2011-
uuhomepage.com, Inc. All rights reserved.