仓酷云

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

[学习教程] PHP教程之用PHP法式为本人网站打造一个搜刮引擎

[复制链接]
小女巫 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-2-4 00:02:43 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

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

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

x
不可能吃饭的时候咬了自己一下舌头就从此不吃饭了不是?放下畏惧,继续努力,咱们是来征服它的,而不是被它征服的,振奋起来吧同志。   一,设计搜刮表单
在网站的根目次下建个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.
PHP于1994年由Rasmus Lerdorf创建,刚刚开始是Rasmus Lerdorf为了要维护个人网页而制作的一个简单的用Perl语言编写的程序。
灵魂腐蚀 该用户已被删除
沙发
发表于 2015-2-4 08:05:29 | 只看该作者
其实也不算什么什么心得,在各位大侠算是小巫见大巫了吧,望大家不要见笑,若其中有错误的地方请各位大虾斧正。
金色的骷髅 该用户已被删除
板凳
发表于 2015-2-4 20:12:25 | 只看该作者
首先我是坚决反对新手上来就用框架的,因为对底层的东西一点都不了解,造成知识上的真空,会对以后的发展不利。我的观点上手了解下框架就好,代码还是手写。当然啦如果是位别的编程语言的高手的话,这个就另当别论啦。
柔情似水 该用户已被删除
地板
发表于 2015-2-6 16:48:45 | 只看该作者
做为1门年轻的语言,php一直很努力。
再现理想 该用户已被删除
5#
发表于 2015-2-6 21:15:09 | 只看该作者
学习php的目的往往是为了开发动态网站,phper就业的要求也涵盖了很多。我大致总结为:精通php和mysql
飘灵儿 该用户已被删除
6#
发表于 2015-2-7 05:59:13 | 只看该作者
php是动态网站开发的优秀语言,在学习的时候万万不能冒进。在系统的学习前,我认为不应该只是追求实现某种效果,因为即使你复制他人的代码调试成功,实现了你所期望的效果,你也不了解其中的原理。
7#
发表于 2015-2-20 16:11:17 | 只看该作者
再就是混迹于论坛啦,咱们的phpchina的论坛就很强大,提出的问题一般都是有达人去解答的,以前的帖子也要多看看也能学到不少前辈们的经验。别的不错的论坛例如php100,javaeye也是很不错的。
愤怒的大鸟 该用户已被删除
8#
发表于 2015-2-24 06:47:14 | 只看该作者
我还是推荐用firefox ,配上firebug 插件调试js能省下不受时间。谷歌的浏览器最好也不少用,因为谷歌的大侠们实在是太天才啦,把一些原来的js代码加了一些特效。
若相依 该用户已被删除
9#
发表于 2015-2-28 23:01:35 | 只看该作者
对于初学者来说不推荐去拿钱买的。当然如果一个网站你经常去用,而且里面的资料也比较有用,最好还是买个会员比较好,毕竟那些也是别人的工作成果。
老尸 该用户已被删除
10#
发表于 2015-3-10 09:15:32 | 只看该作者
装在C盘下面可以利用windows的ghost功能可以还原回来(顺便当做是重转啦),当然啦我的编译目录要放在别的盘下,不然自己的劳动成果就悲剧啦。
兰色精灵 该用户已被删除
11#
发表于 2015-3-11 16:29:33 | 只看该作者
装在C盘下面可以利用windows的ghost功能可以还原回来(顺便当做是重转啦),当然啦我的编译目录要放在别的盘下,不然自己的劳动成果就悲剧啦。
蒙在股里 该用户已被删除
12#
发表于 2015-3-19 01:20:31 | 只看该作者
因为blog这样的可以让你接触更多要学的知识,可以接触用到类,模板,js ,ajax
山那边是海 该用户已被删除
13#
发表于 2015-3-26 20:21:41 | 只看该作者
对于初学者来说不推荐去拿钱买的。当然如果一个网站你经常去用,而且里面的资料也比较有用,最好还是买个会员比较好,毕竟那些也是别人的工作成果。
小魔女 该用户已被删除
14#
发表于 2015-4-7 19:35:28 | 只看该作者
我要在声明一下:我是个菜鸟!!我对php这门优秀的语言也是知之甚少。但是我要在这里说一下php在网站开发中最常用的几个功能:
乐观 该用户已被删除
15#
发表于 2015-4-10 11:59:32 | 只看该作者
环境搭建好,当你看见你的浏览器输出“it works\\\\\\\"时你一定是喜悦的。在你解决问题的时候,我强烈建议多读php手册。
小妖女 该用户已被删除
16#
发表于 2015-4-11 15:09:26 | 只看该作者
使用zendstdio 写代码的的时候,把tab 的缩进设置成4个空格是很有必要的
透明 该用户已被删除
17#
发表于 2015-4-21 05:01:41 | 只看该作者
其实也不算什么什么心得,在各位大侠算是小巫见大巫了吧,望大家不要见笑,若其中有错误的地方请各位大虾斧正。
再见西城 该用户已被删除
18#
发表于 2015-4-27 23:32:59 | 只看该作者
当然这种网站的会员费就几十块钱。
因胸联盟 该用户已被删除
19#
发表于 2015-7-11 19:50:20 | 只看该作者
,熟悉html,能用div+css,还有javascript,优先考虑linux。我在开始学习的时候,就想把这些知识一起学习,我天真的认为同时学习能够互相呼应,因为知识是相通的。
莫相离 该用户已被删除
20#
发表于 2015-7-13 16:15:04 | 只看该作者
php里的数组为空的时候是不能拿来遍历的;(这个有点低级啊,不过我刚被这个边界问题墨迹了好长一会)
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-5-3 22:50

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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