PHP网页设计做个本人站内搜刮引擎
刚开始写页面程序,调试完书中的例子。然后就可以尝试编写留言板了,搜刮引擎 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> ";
}
?>
如今把这个了局和开首的一段法式联合起来,输出一个关头字,然后就会发明你的网站中的相干了局都被搜刮出来了。咱们如今在把它完美一下。
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> ";
}
改成
foreach($array as $value){
//拆开
list($filedir,$title)=split(“[ ]”,$value,”2”);
//输入
echo "<a href=$filedir>$value</a>"."<br> ";
}
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> ";
}
?>
到此为止,你已做好了本人的一个搜刮引擎,你也能够经由过程修正内容处置局部来改善它,可以完成搜刮题目,或搜刮内容的功效。也能够思索分页。这些都留给你本人吧。
这里申明一下用preg_match取代eregi,会快良多。这里只是为了浅显易懂,所以利用了经常使用的eregi.
学习数据库了,MYSQL可算是PHP的黄金搭档了,不过,虽然话是这么说,你也可能恨不得把MYSQL给生吞活剥了,因为这一行一列的东东简直让自己头晕目眩。 做为1门年轻的语言,php一直很努力。 在学习的过程中不能怕麻烦,不能有懒惰的思想。学习php首先应该搭建一个lamp环境或者是wamp环境。这是学习php开发的根本。虽然网络上有很多集成的环境,安装很方便,使用起来也很稳定、 最后介绍一个代码出错,但是老找不到错误方法,就是 go to wc (囧),出去换换气没准回来就找到错误啦。 php是动态网站开发的优秀语言,在学习的时候万万不能冒进。在系统的学习前,我认为不应该只是追求实现某种效果,因为即使你复制他人的代码调试成功,实现了你所期望的效果,你也不了解其中的原理。 至于模板嘛,各位高人一直以来就是争论不休,我一只小菜鸟就不加入战团啦,咱们新手还是多学点东西的好。 不禁又想起那些说php是草根语言的人,为什么认得差距这么大呢。 本人接触php时间不长,算是phper中的小菜鸟一只吧。由于刚开始学的时候没有名师指,碰过不少疙瘩,呗很多小问题卡过很久,白白浪费不少宝贵的时间,在次分享一些子的学习的心得。 建议加几个专业的phper的群,当然啦需要说话的人多,一处一点问题能有人回答你的,当然啦要让人回答你的问题,平时就得躲在里面聊天,大家混熟啦,愿意回答你问题的人自然就多啦。 使用zendstdio 写代码的的时候,把tab 的缩进设置成4个空格是很有必要的 在我安装pear包的时候老是提示,缺少某某文件,才发现 那群extension 的排列是应该有一点的顺序,而我安装的版本的排序不是正常的排序。没办法我只好把那群冒号加了上去,只留下我需要使用的扩展。 Apache不是非得用80或者8080端口的,我刚开始安得时候就是80端口老占用,就用了个 81端口,结果照常,就是输localhost的时候,应该输入为 localhost:81 为了以后维护的方便最好是代码上都加上注释,“予人方便,自己方便”。此外开发文档什么的最好都弄齐全。我觉得这是程序员必备的素质。虽然会消耗点很多的时间。但是确实是非常有必要的。 我还是推荐用firefox ,配上firebug 插件调试js能省下不受时间。谷歌的浏览器最好也不少用,因为谷歌的大侠们实在是太天才啦,把一些原来的js代码加了一些特效。 这些中手常用的知识,当你把我说的这些关键字都可以熟练运用的时候,你可以选择自己 这些都是最基本最常用功能,我们这些菜鸟在系统学习后,可以先对这些功能深入研究。 真正的方向了,如果将来要去开发团队,你一定要学好smarty ,phplib这样的模板引擎, 不禁又想起那些说php是草根语言的人,为什么认得差距这么大呢。 这些中手常用的知识,当你把我说的这些关键字都可以熟练运用的时候,你可以选择自己 如果你可以写完像留言板这样的程序,那么你可以去一些别人的代码了,
页:
[1]