仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 2336|回复: 20
打印 上一主题 下一主题

[学习教程] PHP网页设计做个站内搜刮引擎

[复制链接]
变相怪杰 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-2-4 00:31:12 | 只看该作者 回帖奖励 |正序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
总的来说,在这一个月左右的时间中,学到的不少,但是也遇到不少的问题,比如批量图片的上传,一直到现在也不懂,如何实现动态的增加上传图片的数量。搜刮引擎   伴侣用Dreamweaver做了一个网站,没有静态的内容,只是一些团体保藏的文章,团体引见等等。如今内容对照多了,想叫我帮他做一个搜刮引擎。说其实的,这是一个不难的成绩,因而就顺手做了一个。如今我在其它服装论坛上也看到有人想做这个,因而就想说说这方面的常识,重在懂得一下办法。  伴侣用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.
  PHP原始为Personal Home Page的缩写,已经正式更名为 "PHP: Hypertext Preprocessor"。注意不是“Hypertext Preprocessor”的缩写,这种将名称放到定义中的写法被称作递归缩写。
蒙在股里 该用户已被删除
21#
发表于 2015-6-15 20:48:14 | 只看该作者
我还是强烈建议自己搭建php环境。因为在搭建的过程中你会遇到一些问题,通过搜索或是看php手册解决问题后,你会更加深刻的理解它们的工作原理,了解到php配置文件中的一些选项设置。
小妖女 该用户已被删除
20#
发表于 2015-6-5 13:58:24 | 只看该作者
首先声明:我是一个菜鸟,是一个初学者。学习了一段php后总是感觉自己没有提高,无奈。经过反思我认为我学习过程中存在很多问题,我改变了学习方法后自我感觉有了明显的进步。
柔情似水 该用户已被删除
19#
发表于 2015-6-4 12:30:37 | 只看该作者
首先声明:我是一个菜鸟,是一个初学者。学习了一段php后总是感觉自己没有提高,无奈。经过反思我认为我学习过程中存在很多问题,我改变了学习方法后自我感觉有了明显的进步。
只想知道 该用户已被删除
18#
发表于 2015-5-5 10:50:25 | 只看该作者
在学习的过程中不能怕麻烦,不能有懒惰的思想。学习php首先应该搭建一个lamp环境或者是wamp环境。这是学习php开发的根本。虽然网络上有很多集成的环境,安装很方便,使用起来也很稳定、
愤怒的大鸟 该用户已被删除
17#
发表于 2015-4-29 16:00:23 | 只看该作者
php是动态网站开发的优秀语言,在学习的时候万万不能冒进。在系统的学习前,我认为不应该只是追求实现某种效果,因为即使你复制他人的代码调试成功,实现了你所期望的效果,你也不了解其中的原理。
飘飘悠悠 该用户已被删除
16#
发表于 2015-4-21 06:35:54 | 只看该作者
首先声明:我是一个菜鸟,是一个初学者。学习了一段php后总是感觉自己没有提高,无奈。经过反思我认为我学习过程中存在很多问题,我改变了学习方法后自我感觉有了明显的进步。
不帅 该用户已被删除
15#
发表于 2015-4-20 23:42:27 | 只看该作者
使用 jquery 等js框架的时候,要随时注意浏览器的更新情况,不然很容易发生框架不能使用。
小魔女 该用户已被删除
14#
发表于 2015-4-2 20:45:52 | 只看该作者
php里的数组为空的时候是不能拿来遍历的;(这个有点低级啊,不过我刚被这个边界问题墨迹了好长一会)
admin 该用户已被删除
13#
发表于 2015-4-2 09:58:06 | 只看该作者
曾经犯过一个很低级的错误,我在文件命名的时候用了一个横线\\\\\\\'-\\\\\\\' 号,结果找了好几个小时的错误,事实是命名的时候 是不能用横线 \\\\\\\'-\\\\\\\' 的,应该用的是下划线  \\\\\\\'_\\\\\\\' ;
乐观 该用户已被删除
12#
发表于 2015-4-1 18:08:41 | 只看该作者
因为blog这样的可以让你接触更多要学的知识,可以接触用到类,模板,js ,ajax
11#
发表于 2015-3-23 17:39:20 | 只看该作者
Ps:以上纯属原创,如有雷同,纯属巧合
再现理想 该用户已被删除
10#
发表于 2015-3-17 03:51:21 | 只看该作者
实践是检验自己会不会的真理。
兰色精灵 该用户已被删除
9#
发表于 2015-3-14 03:22:01 | 只看该作者
对于初学者来说不推荐去拿钱买的。当然如果一个网站你经常去用,而且里面的资料也比较有用,最好还是买个会员比较好,毕竟那些也是别人的工作成果。
老尸 该用户已被删除
8#
发表于 2015-3-7 13:10:32 | 只看该作者
装在C盘下面可以利用windows的ghost功能可以还原回来(顺便当做是重转啦),当然啦我的编译目录要放在别的盘下,不然自己的劳动成果就悲剧啦。
精灵巫婆 该用户已被删除
7#
发表于 2015-3-7 00:49:41 | 只看该作者
其实没啥难的,多练习,练习写程序,真正的实践比看100遍都有用。不过要熟悉引擎
简单生活 该用户已被删除
6#
发表于 2015-2-25 17:35:50 | 只看该作者
我还是推荐用firefox ,配上firebug 插件调试js能省下不受时间。谷歌的浏览器最好也不少用,因为谷歌的大侠们实在是太天才啦,把一些原来的js代码加了一些特效。
若天明 该用户已被删除
5#
发表于 2015-2-10 08:00:03 | 只看该作者
本人接触php时间不长,算是phper中的小菜鸟一只吧。由于刚开始学的时候没有名师指,碰过不少疙瘩,呗很多小问题卡过很久,白白浪费不少宝贵的时间,在次分享一些子的学习的心得。
透明 该用户已被删除
地板
发表于 2015-2-9 16:33:39 | 只看该作者
没接触过框架的人,也不用害怕,其实框架就是一种命名规范及插件,学会一个框架其余的框架都很好上手的。
变相怪杰 该用户已被删除
板凳
 楼主| 发表于 2015-2-4 13:33:37 | 只看该作者
小鸟是第一次发帖(我习惯潜水的(*^__^*) 嘻嘻……),有错误之处还请大家批评指正,另外,前些日子听人说有高手能用php写驱动程序,真是学无止境,人外有人,天外有天。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-11-11 00:39

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表