ホームページ バックエンド開発 PHPチュートリアル 用PHP&XML编制迷你搜索引擎(四)_PHP

用PHP&XML编制迷你搜索引擎(四)_PHP

Jun 01, 2016 pm 12:35 PM
echo if Level 検索エンジン ミニ

[程序实例 ] 用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
}





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($icount){

$i+=1;

if(($i%5)==1)echo"";

echo "";

}

echo "
";

echo "".$subs->items[$i]->name."";

echo "

";



$i=$page*$pagecount;

if ($webs->count > 0){

echo "
".($page+1)."/";

echo Ceil($webs->count/$pagecount);}

echo "";

while($icount&&$i
$i+=1;

echo "";

echo "";

}

echo "
".$i." ".

$webs->items[$i]->name."
".$webs->items[$i]->memo;

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($icount){

$i+=1;

if(($i%5)==1)echo"";

echo "";

}

echo "
";

echo "".$subs->items[$i]->name."";

echo "

";



$i=$page*$pagecount;

if ($webs->count > 0){

echo "
".($page+1)."/";

echo Ceil($webs->count/$pagecount);}

echo "";

while($icount&&$i
$i+=1;

echo "";

echo "";

}

echo "
".$i." ".

$webs->items[$i]->name."
".$webs->items[$i]->memo;

echo "
";

if ($webs->count > 0){

if($page>0)echo "上一页 ";

if(($page+1)count/$pagecount))echo "下一页";

}

?>

/body>

/html>
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

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

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

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

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

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

C言語で複数の条件を判定するifの書き方 C言語で複数の条件を判定するifの書き方 Mar 25, 2024 pm 03:24 PM

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

Baidu クラウド ディスク検索エンジンの入り口 Baidu クラウド ディスク検索エンジンの入り口 Feb 27, 2024 pm 01:00 PM

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で検索エンジンを変更する方法 iPhoneとiPadで検索エンジンを変更する方法 Apr 25, 2023 am 08:28 AM

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

Java開発:検索エンジンと全文検索機能の実装方法 Java開発:検索エンジンと全文検索機能の実装方法 Sep 21, 2023 pm 01:10 PM

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

PHP 検索エンジンのパフォーマンスの最適化: アルゴリアの魔法のトリック PHP 検索エンジンのパフォーマンスの最適化: アルゴリアの魔法のトリック Jul 23, 2023 pm 04:21 PM

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

テクノロジーの世界を探索できる、厳選された 5 つの Go 言語オープンソース プロジェクト テクノロジーの世界を探索できる、厳選された 5 つの Go 言語オープンソース プロジェクト Jan 30, 2024 am 09:08 AM

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

人工知能検索の分野ではGoogleとMicrosoftが競合 人工知能検索の分野ではGoogleとMicrosoftが競合 Apr 08, 2023 am 11:31 AM

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

Go 言語開発の要点: 5 つの人気のあるフレームワークの推奨事項 Go 言語開発の要点: 5 つの人気のあるフレームワークの推奨事項 Mar 24, 2024 pm 01:15 PM

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

See all articles