首页
技术博客
PHP教程
数据库技术
前端开发
HTML5
Nginx
php论坛
新用户注册
|
会员登录
PHP教程
技术博客
编程问答
PNG素材
编程语言
前端技术
Android
PHP教程
HTML5教程
数据库
Linux技术
Nginx技术
PHP安全
WebSerer
职场攻略
JavaScript
开放平台
业界资讯
大话程序猿
登录
极速注册
取消
热门标签 | HotTags
heatmap
process
nodejs
get
stream
typescript
text
regex
php8
version
keyword
request
shell
match
frameworks
cPlusPlus
datetime
timestamp
javascript
import
select
byte
copy
const
js
int
uri
java
jsp
chat
io
tree
string
bytecode
uml
tags
object
subset
email
go
python3
php
timezone
hash
grid
hashset
python2
bit
scala
netty
controller
rsa
fetch
hook
callback
flutter
loops
buffer
list
数组
dockerfile
install
cpython
usb
perl
sum
metadata
less
header
dll
format
search
include
instance
c语言
bash
merge
replace
input
当前位置:
开发笔记
>
编程语言
> 正文
用PHP&XML编制迷你搜索引擎(四)
作者:手机用户2502895231 | 来源:互联网 | 2014-07-17 11:58
[程序实例]用PHPXML编制迷你搜索引擎(四)作者来源时间2000年11月30日阅读次数247版本-----价值17[投他一票]来源:奥索网用PHPXML编制迷你搜索引擎(四)五、mini的搜索引擎作了如干的铺垫,令人激动的时刻到来了。分页等版式输
[程序实例
]
用PHP
&
XML编制迷你搜索引擎
(
四
)
作者 来源
时间 2000年11月30日 阅读次数 247
版本
-
-
-
-
-
价值 17
[
投他一票
]
来源
:
奥索网
用PHP
&
XML编制迷你搜索引擎
(
四
)
五、mini的搜索引擎
作了如干的铺垫
,
令人激动的时刻到来了。
分页等版式输出和用SQL的搜索引擎差不多
,
我就不加注释了。
第一段为仿sina
,
yahoo的按照类别查询
第二段为搜索查询部分
(
其实就是把整个树遍历一遍
)
显示符合的
内容。
说明
:
"网络狂飙之谜你搜索引擎"
适用于小数据量的数据索引查询
,
根据测试
,
当数据量超过1000条以后便不再适用
,
相当浪费主机资源
,
建议您超过400条记录采用mysql等数据库语言构建。希望您通过我的程序
,
对PHP对XML的解析函数有所认识。所有范例程序欢迎大家适用
,
如果您要将其用于自己的主页中请于我联系说明
(
其实就是将其用于的网站的名称告知于我
)
。
sfs
(
sfsz
@
chinese
.
com
)
以上的所有范例请到我的主页fire
.
oso
.
com
.
cn
上下载
,
我学PHP不到一个月
,
也刚来oso
,
希望文章中的错误之处大家能谅解。以后
,
我将为大家奉献出更多的源创范例。
废话少说
,
尽请看来。
__________________________________________________________
xml2
.
php
<
html
>
<
body
>
<
style type
=
text
/
css
>
td
,
p
,
li
,
input
,
select
{
font
-
size
:
12px
;
}
A
:
link
{
font
-
size
:
12px
;
color
:
#00007f
;
}
A
:
visited
{
font
-
size
:
12px
;
color
:
#00007f
;
}
A
:
active
{
font
-
size
:
12px
;
color
:
#ff0000
;
}
A
:
hover
{
font
-
size
:
12px
;
color
:
#ff0000
;
}
.
title
{
font
-
family
:
Tahoma
;
width
=
420
;
font
-
size
:
16px
;
font
-
weight
:
bold
;
color
:
steelblue
;
filter
:
Shadow
(
color
=
"LightGrey"
,
Direction
=
"130"
)
;
}
.
counter
{
font
-
family
:
Tahoma
;
color
=
green
;
font
-
size
:
12px
;
}
<
/
style
>
// XML文件
$file = "demo.xml";
$pagecount = 10;
class Cweb { //网页
var $name;
var $url;
var $memo;
}
class Cwebs {
var $items = array(Cweb);
var $count = 0;
}
class Csub { //类别
var $name;
var $url;
}
class Csubs {
var $items = array(Csub);
var $count = 0;
}
function xml_parse_from_file($parser, $file)
{
if(!file_exists($file))
die("Can’t find file "$file".");
if(!($fp = @fopen($file, "r")))
die("Can’t open file "$file".");
while($data = fread($fp, 4096)) {
if(!xml_parse($parser, $data, feof($fp)))
return(false);
}
fclose($fp);
return(true);
}
function start_element($parser, $name, $attrs)
{
global $show,$level,$levelcount,$maxlevel,$hide,$lev,$num,$PHP_SELF;
global $webs,$subs;
$level += 1;
if($level>$maxlevel)$maxlevel=$level;
$levelcount[$level]+=1;
if($hide){
if($level==$lev&&$levelcount[$level]==$num)$hide=FALSE;
}else{
if($level<=$lev)$hide=TRUE;
}
if(!$hide){
switch($name){
case "sub":
$show="sub";
break;
case "web":
$show="web";
break;
default:
break;
}
if($level==$lev+1&&$level>0){
switch($show){
case "sub":
$subs->count+=1;
$subs->items[$subs->count]->url = "$PHP_SELF?lev=$level&num=$levelcount[$level]";
break;
case "web":
$webs->count+=1;
while ( list( $key, $val ) = each( $attrs ) ) {
switch(trim($key)){
case "url" :
$webs->items[$webs->count]->url=trim($val);
break;
case "memo" :
$webs->items[$webs->count]->memo=trim($val);
break;
}
}
break;
default:
break;
}
}
}
}
function stop_element($parser, $name)
{
global $level;
$level -= 1;
}
function data($parser, $data)
{
global $level,$hide,$show,$lev,$levelcount,$num;
global $webs,$subs,$title;
if($level==$lev&&$levelcount[$level]==$num&&trim($data)!="")$title=trim($data);
if(!$hide)
if(trim($data)!=""&&($level==$lev+1&&$level>0)){
switch($show){
case "sub":
$subs->items[$subs->count]->name=trim($data);
break;
case "web":
$webs->items[$webs->count]->name=trim($data);
break;
}
}
}
//main start
global $lev,$num,$PHP_SELF;
global $title,$webs,$subs;
$level = -1;
$hide = TRUE;
$webs = new Cwebs;
$subs = new Csubs;
if($lev==""){$lev=0;$num=1;}
if($page=="")$page=0;
$parser = xml_parser_create();
xml_set_element_handler($parser, "start_element", "stop_element");
xml_set_character_data_handler($parser, "data");
xml_parser_set_option($parser, XML_OPTION_CASE_FOLDING, 0);
$ret = xml_parse_from_file($parser, $file);
if(!$ret)
{
die(sprintf("XML error: %s at line %d",
xml_error_string(xml_get_error_code($parser)),
xml_get_current_line_number($parser)));
}
xml_parser_free($parser);
echo "
搜索首页
";
echo "
后退
".
"
";
echo "
".$title."
";
$i=0;
echo "
";
while($i<$subs->count){
$i+=1;
if(($i%5)==1)echo"
";
echo "
";
echo "
".$subs->items[$i]->name."
";
echo "
";
}
echo "
";
$i=$page*$pagecount;
if ($webs->count > 0){
echo "
".($page+1)."/";
echo Ceil($webs->count/$pagecount);}
echo "
";
while($i<$webs->count&&$i<(($page+1)*$pagecount)){
$i+=1;
echo "
";
echo "
".$i."
".
$webs->items[$i]->name."
".$webs->items[$i]->memo;
echo "
";
}
echo "
";
if ($webs->count > 0){
if($page>0)echo "
上一页
";
if(($page+1)
count/$pagecount))echo "
下一页
";
}
?>
<
/
body
>
<
/
html
>
__________________________________________________________
xml3
.
php
关键字匹配采用eregi函数
,
功能相对简单
,
且有些bug
,
如输入C
+
+
会报错
(
因为
+
是关键字
)
这点就不如用SQL查询了。
您可以在下面的程序的基础上加以完善
,
我这个迷你的就
起到抛砖引玉的作用吧。
<
html
>
<
body
>
<
style type
=
text
/
css
>
td
,
p
,
li
,
input
,
select
{
font
-
size
:
12px
;
}
A
:
link
{
font
-
size
:
12px
;
color
:
#00007f
;
}
A
:
visited
{
font
-
size
:
12px
;
color
:
#00007f
;
}
A
:
active
{
font
-
size
:
12px
;
color
:
#ff0000
;
}
A
:
hover
{
font
-
size
:
12px
;
color
:
#ff0000
;
}
.
title
{
font
-
family
:
Tahoma
;
width
=
420
;
font
-
size
:
16px
;
font
-
weight
:
bold
;
color
:
steelblue
;
filter
:
Shadow
(
color
=
"LightGrey"
,
Direction
=
"130"
)
;
}
.
counter
{
font
-
family
:
Tahoma
;
color
=
green
;
font
-
size
:
12px
;
}
<
/
style
>
// XML文件
$file = "demo.xml";
$pagecount = 10;
class Cweb { //网页
var $name;
var $url;
var $memo;
}
class Cwebs {
var $items = array(Cweb);
var $count = 0;
}
class Csub { //类别
var $name;
var $url;
}
class Csubs {
var $items = array(Csub);
var $count = 0;
}
// 解析XML文件的函数
function xml_parse_from_file($parser, $file)
{
if(!file_exists($file))
die("Can’t find file "$file".");
if(!($fp = @fopen($file, "r")))
die("Can’t open file "$file".");
while($data = fread($fp, 4096)) {
if(!xml_parse($parser, $data, feof($fp)))
return(false);
}
fclose($fp);
return(true);
}
function start_element($parser, $name, $attrs)
{
global $show,$level,$levelcount,$maxlevel,$PHP_SELF;
global $webs,$subs;
global $search,$finded;
$finded=FALSE;
$level += 1;
if($level>$maxlevel)$maxlevel=$level;
$levelcount[$level]+=1;
switch($name){
case "sub":
$show="sub";
break;
case "web":
$show="web";
break;
default:
break;
}
switch($show){
case "sub":
$subs->count+=1;
$subs->items[$subs->count]->url = "xml2.php?lev=$level&num=$levelcount[$level]";
break;
case "web":
$webs->count+=1;
while ( list( $key, $val ) = each( $attrs ) ) {
if(eregi($search,$val))$finded=TRUE;
switch(trim($key)){
case "url" :
$webs->items[$webs->count]->url=trim($val);
break;
case "memo" :
$webs->items[$webs->count]->memo=trim($val);
break;
}
}
break;
default:
break;
}
}
function stop_element($parser, $name)
{
global $level;
$level -= 1;
}
function data($parser, $data)
{
global $level,$show,$levelcount;
global $webs,$subs;
global $search,$finded;
if(trim($data)!=""){
switch($show){
case "sub":
$subs->items[$subs->count]->name=trim($data);
if(!eregi($search,$data))$subs->count-=1;
break;
case "web":
$webs->items[$webs->count]->name=trim($data);
if((!eregi($search,$data))&&(!$finded))$webs->count-=1;
break;
}
}
}
//main start
global $PHP_SELF;
global $search,$webs,$subs;
$level = -1;
$hide = TRUE;
$webs = new Cwebs;
$subs = new Csubs;
if($page=="")$page=0;
if($search=="")$search="请输入关键字";
$parser = xml_parser_create();
xml_set_element_handler($parser, "start_element", "stop_element");
xml_set_character_data_handler($parser, "data");
xml_parser_set_option($parser, XML_OPTION_CASE_FOLDING, 0);
$ret = xml_parse_from_file($parser, $file);
if(!$ret)
{
die(sprintf("XML error: %s at line %d",
xml_error_string(xml_get_error_code($parser)),
xml_get_current_line_number($parser)));
}
xml_parser_free($parser);
// 输出
echo "
搜索首页
";
echo "
后退
";
echo "
".$search."
";
$i=0;
echo "
";
while($i<$subs->count){
$i+=1;
if(($i%5)==1)echo"
";
echo "
";
echo "
".$subs->items[$i]->name."
";
echo "
";
}
echo "
";
$i=$page*$pagecount;
if ($webs->count > 0){
echo "
".($page+1)."/";
echo Ceil($webs->count/$pagecount);}
echo "
";
while($i<$webs->count&&$i<(($page+1)*$pagecount)){
$i+=1;
echo "
";
echo "
".$i."
".
$webs->items[$i]->name."
".$webs->items[$i]->memo;
echo "
";
}
echo "
";
if ($webs->count > 0){
if($page>0)echo "
上一页
";
if(($page+1)
count/$pagecount))echo "
下一页
";
}
?>
<
/
body
>
<
/
html
>
php
xml
sql
mysql
写下你的评论吧 !
吐个槽吧,看都看了
会员登录
|
用户注册
推荐阅读
select
PHP 编程疑难解析与知识点汇总
本文详细解答了 PHP 编程中的常见问题,并提供了丰富的代码示例和解决方案,帮助开发者更好地理解和应用 PHP 知识。 ...
[详细]
蜡笔小新 2024-12-28 12:22:34
jsp
新浪笔试题
1:有如下一段程序:packagea.b.c;publicclassTest{privatestaticinti0;publicintgetNext(){return ...
[详细]
蜡笔小新 2024-12-27 19:32:17
jsp
PHP 5.2.5 安装与配置指南
本文详细介绍了 PHP 5.2.5 的安装和配置步骤,帮助开发者解决常见的环境配置问题,特别是上传图片时遇到的错误。通过本教程,您可以顺利搭建并优化 PHP 运行环境。 ...
[详细]
蜡笔小新 2024-12-27 19:05:41
int
深入理解 SQL 视图、存储过程与事务
本文详细介绍了SQL中的视图、存储过程和事务的概念及应用。视图为用户提供了一种灵活的数据查询方式,存储过程则封装了复杂的SQL逻辑,而事务确保了数据库操作的完整性和一致性。 ...
[详细]
蜡笔小新 2024-12-27 17:40:42
jsp
网站与MySQL数据库的连接与交互
本文详细介绍了如何通过多种编程语言(如PHP、JSP)实现网站与MySQL数据库的连接,包括创建数据库、表的基本操作,以及数据的读取和写入方法。 ...
[详细]
蜡笔小新 2024-12-27 14:09:23
jsp
MySQL 数据库迁移指南:从本地到远程及磁盘间迁移
本文详细介绍了如何在不同场景下进行 MySQL 数据库的迁移,包括从一个硬盘迁移到另一个硬盘、从一台计算机迁移到另一台计算机,以及解决迁移过程中可能遇到的问题。 ...
[详细]
蜡笔小新 2024-12-26 13:21:38
int
网络链路质量监控:Smokeping部署与配置
本文详细介绍了如何在Linux系统上安装和配置Smokeping,以实现对网络链路质量的实时监控。通过详细的步骤和必要的依赖包安装,确保用户能够顺利完成部署并优化其网络性能监控。 ...
[详细]
蜡笔小新 2024-12-27 19:31:05
uri
CentOS7源码编译安装MySQL5.6
2019独角兽企业重金招聘Python工程师标准一、先在cmake官网下个最新的cmake源码包cmake官网:https:www.cmake.org如此时最新 ...
[详细]
蜡笔小新 2024-12-27 17:49:56
java
Dockerfile 编写与 Docker 网络配置详解
本文详细介绍了 Dockerfile 的编写方法及其在网络配置中的应用,涵盖基础指令、镜像构建与发布流程,并深入探讨了 Docker 的默认网络、容器互联及自定义网络的实现。 ...
[详细]
蜡笔小新 2024-12-27 17:31:41
java
解决PHP与MySQL连接时出现500错误的方法
本文详细探讨了当使用PHP连接MySQL数据库时遇到500内部服务器错误的多种解决方案,提供了详尽的操作步骤和专业建议。无论是初学者还是有经验的开发者,都能从中受益。 ...
[详细]
蜡笔小新 2024-12-27 15:48:52
java
MyBatis:深入解析与应用
在当前众多持久层框架中,MyBatis(前身为iBatis)凭借其轻量级、易用性和对SQL的直接支持,成为许多开发者的首选。本文将详细探讨MyBatis的核心概念、设计理念及其优势。 ...
[详细]
蜡笔小新 2024-12-27 12:17:16
java
将Web服务部署到Tomcat
本文介绍了如何在JDeveloper 12c中创建一个Java项目,并将其打包为Web服务,然后部署到Tomcat服务器。内容涵盖从项目创建、编写Web服务代码、配置相关XML文件到最终的本地部署和验证。 ...
[详细]
蜡笔小新 2024-12-27 11:48:15
select
解决SQL Server动态SQL中LIKE语句参数传递导致无返回值的问题
在使用SQL Server进行动态SQL查询时,如果遇到LIKE语句无法正确返回预期结果的情况,通常是因为参数传递方式不当。本文将详细探讨这一问题,并提供解决方案及相关的技术背景。 ...
[详细]
蜡笔小新 2024-12-26 17:02:33
int
SQL 触发器实现视图插入操作
本文介绍如何通过创建替代插入触发器,使对视图的插入操作能够正确更新相关的基本表。涉及的表包括:飞机(Aircraft)、员工(Employee)和认证(Certification)。 ...
[详细]
蜡笔小新 2024-12-26 15:53:40
int
MySQL缓存机制深度解析
本文详细探讨了MySQL的缓存机制,包括主从复制、读写分离以及缓存同步策略等内容。通过理解这些概念和技术,读者可以更好地优化数据库性能。 ...
[详细]
蜡笔小新 2024-12-26 15:15:06
手机用户2502895231
这个家伙很懒,什么也没留下!
Tags | 热门标签
heatmap
process
nodejs
get
stream
typescript
text
regex
php8
version
keyword
request
shell
match
frameworks
cPlusPlus
datetime
timestamp
javascript
import
select
byte
copy
const
js
int
uri
java
jsp
chat
RankList | 热门文章
1
idea 设置字体
2
微软推送Win10 RS3 Build 16170预览版
3
微信聊天怎么一起听歌? 微信聊天窗口播放音乐给对方听的技巧
4
为什么在天涯社区关闭浏览器两个多小时后还显示在线,而不自动退出登录?
5
什么叫卡拉OK?
6
[转载] 唐浩明评点曾国藩家书(上)——封面序言及目录
7
一月份反思内容:BUG & Communicate
8
转:网页设计常用颜色16进制代码
9
用html和css制作小黄人,纯CSS3画出小黄人并实现动画效果
10
抖音文字时钟壁纸html,抖音文字时钟
11
centos 查看硬盘使用情况
12
吴裕雄 Bootstrap 前端框架开发——Bootstrap 辅助类:在元素获取焦点时显示(如:键盘操作的用户)
13
html游戏源码_[源码和文档分享]基于VS2012和Cocos2dx实现的StickToLast益智小游戏
14
display:none 和 hidden 区别
15
vue—点击换一批就更换一批内容_iPhone 可以自动换壁纸了,连 6S 都能用!
PHP1.CN | 中国最专业的PHP中文社区 |
DevBox开发工具箱
|
json解析格式化
|
PHP资讯
|
PHP教程
|
数据库技术
|
服务器技术
|
前端开发技术
|
PHP框架
|
开发工具
|
在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved |
京公网安备 11010802041100号
|
京ICP备19059560号-4
| PHP1.CN 第一PHP社区 版权所有