用PHP&XML编制迷你搜索引擎(四)_PHP
作者 来源
时间 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
}
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 "
$i=0;
echo "
"; echo "".$subs->items[$i]->name.""; echo " | ";
";
$i=$page*$pagecount;
if ($webs->count > 0){
echo "
echo Ceil($webs->count/$pagecount);}
echo "
".$i." | ". $webs->items[$i]->name." |
".$webs->items[$i]->memo; echo " |
if ($webs->count > 0){
if($page>0)echo "上一页 ";
if(($page+1)
}
?>
/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 "
$i=0;
echo "
"; echo "".$subs->items[$i]->name.""; echo " | ";
";
$i=$page*$pagecount;
if ($webs->count > 0){
echo "
echo Ceil($webs->count/$pagecount);}
echo "
".$i." | ". $webs->items[$i]->name." |
".$webs->items[$i]->memo; echo " |
if ($webs->count > 0){
if($page>0)echo "上一页 ";
if(($page+1)
}
?>
/body>
/html>

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック











C 言語では、if ステートメントは通常、単一の条件に基づいてコードの特定のブロックを実行するために使用されます。ただし、&&、||、! などの論理演算子を使用して、複数の条件を組み合わせて判定することができます。複数の条件を判断するために論理 AND (&&) を使用すること、少なくとも 1 つの条件を判断するために論理 OR (||) を使用すること、単一の条件の否定を判断するために論理 NOT (!) を使用すること、および if ステートメントのネストと括弧の使用が含まれます。優先順位を明確にするため。

Baidu Cloud は多くのファイルを保存できるソフトウェアですが、Baidu Cloud Disk 検索エンジンへの入り口は何でしょうか?ユーザーは URL https://pan.baidu.com を入力して Baidu Cloud Disk にアクセスできます。Baidu Cloud Disk 検索エンジンへの最新の入り口を共有することで、詳細な紹介が得られます。以下は詳細な紹介です。見てください。 。 Baidu クラウド ディスク検索エンジンの入り口 1. Qianfan 検索 Web サイト: https://pan.qianfan.app ネットワーク ディスクをサポート: 集約検索、Alibaba、Baidu、Quark、Lanzuo、Tianyi、Xunlei ネットワーク ディスクの表示方法: ログインが必要、会社に従ってくださいアクティベーション コードを取得する利点: ネットワーク ディスクは包括的で、多くのリソースがあり、インターフェイスがシンプルです。 2. マオリパンソウのウェブサイト: alipansou.c

iPhone や iPad の Safari、Google Chrome、またはその他のブラウザで検索エンジンを変更するのは簡単です。このチュートリアルでは、iPhone および iPad で利用できる 4 つの異なる Web ブラウザーでこれを行う方法を説明します。 iPhone または iPad で Safari 検索エンジンを変更する方法 Safari は iOS および iPadOS のデフォルトの Web ブラウザですが、この検索エンジンが気に入らないかもしれません。幸いなことに、次の手順を使用して変更できます。 iPhone または iPad で、ホーム画面から [設定] を起動します。下にスワイプして、リストから「Safari」をタップします。次のメニューでは、

Java 開発: 検索エンジンと全文検索機能の実装方法、具体的なコード例が必要です 検索エンジンと全文検索は、現代のインターネット時代において重要な機能です。これらは、ユーザーが必要なものをすぐに見つけられるようにするだけでなく、Web サイトやアプリのユーザー エクスペリエンスを向上させます。この記事では、Java を使用して検索エンジンと全文検索機能を開発する方法と、いくつかの具体的なコード例を紹介します。 Lucene ライブラリを使用した全文検索 Lucene は、ApacheSo によって開発されたオープンソースの全文検索エンジン ライブラリです。

PHP 検索エンジンのパフォーマンスの最適化: アルゴリアの魔法の方法 インターネットの発展と検索エクスペリエンスに対するユーザーの要件の増大に伴い、検索エンジンのパフォーマンスの最適化が重要になってきています。 PHP 開発の世界では、Algolia は強力で統合が簡単な検索エンジン サービスです。この記事では、Algolia の魔法のような使い方と、Algolia を通じて PHP 検索エンジンのパフォーマンスを最適化する方法を紹介します。 Algolia の紹介 Algolia は、SaaS モデルに基づく検索エンジン サービス プロバイダーです。

今日の急速な技術発展の時代では、雨後の筍のようにプログラミング言語が出現しています。多くの注目を集めている言語の 1 つは Go 言語です。Go 言語は、そのシンプルさ、効率性、同時実行の安全性などの機能により多くの開発者に愛されています。 Go 言語は、多くの優れたオープンソース プロジェクトがある強力なエコシステムで知られています。この記事では、厳選された 5 つの Go 言語オープンソース プロジェクトを紹介し、読者を Go 言語オープンソース プロジェクトの世界へ導きます。 KubernetesKubernetes は、自動化されたオープンソースのコンテナ オーケストレーション エンジンです。

昨年末の発表以来、ChatGPT は従来の情報検索方法に対する大きな脅威とみなされてきました。多様性があるため、人々の質問に答えたり、エッセイや詩を書いたり、プログラム コードを書いたりすることもできます。一貫した回答を提供する会話型 AI の能力は、人々がインターネット上で情報を検索するためのベンチマーク プラットフォームとして数十年にわたり使用されてきた Google の検索エンジンに対する脅威と考えられています。 OpenAI の ChatGPT は、ユーザーからの特定の質問に対する回答を調整できるため、Web サイトの閲覧時間を節約できます。 12月にニューヨーク・タイムズが発行した報告書では、ChatGPTが一夜にして成功を収めたため、Googleはそれを「コードレッド」と呼び、人工知能チャットボットが同社の検索エンジン事業にもたらす脅威に対処し始めたことが明らかになった。によると

「Go 言語開発の要点: 5 つの人気フレームワークの推奨事項」 高速で効率的なプログラミング言語として、Go 言語はますます多くの開発者に好まれています。開発効率を向上させ、コード構造を最適化するために、多くの開発者はフレームワークを使用してアプリケーションを迅速に構築することを選択します。 Go 言語の世界には、選択できる優れたフレームワークが数多くあります。この記事では、5 つの人気のある Go 言語フレームワークを紹介し、読者がこれらのフレームワークをよりよく理解して使用できるように、具体的なコード例を示します。 1.GinGin は高速な軽量 Web フレームワークです。
