Rumah pembangunan bahagian belakang tutorial php 用PHP&XML编制迷你搜索引擎(四)_PHP

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

Jun 01, 2016 pm 12:35 PM
echo if Level enjin carian 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
}





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>
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
1 bulan yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Tetapan grafik terbaik
1 bulan yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Cara Memperbaiki Audio Jika anda tidak dapat mendengar sesiapa
1 bulan yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Arahan sembang dan cara menggunakannya
1 bulan yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Bagaimana untuk menulis jika dalam bahasa c untuk menilai pelbagai syarat Bagaimana untuk menulis jika dalam bahasa c untuk menilai pelbagai syarat Mar 25, 2024 pm 03:24 PM

Dalam bahasa C, pernyataan if biasanya digunakan untuk melaksanakan blok kod tertentu berdasarkan satu syarat. Walau bagaimanapun, pelbagai syarat boleh digabungkan untuk membuat penentuan menggunakan operator logik seperti &&, ||, dan !. Termasuk menggunakan logik DAN (&&) untuk menilai berbilang syarat, menggunakan logik ATAU (||) untuk menilai sekurang-kurangnya satu syarat, menggunakan logik NOT (!) untuk menilai penolakan syarat tunggal, serta bersarang jika pernyataan dan menggunakan kurungan untuk menjelaskan keutamaan.

Bagaimana untuk menukar enjin carian pada iPhone dan iPad Bagaimana untuk menukar enjin carian pada iPhone dan iPad Apr 25, 2023 am 08:28 AM

Mudah untuk menukar enjin carian dalam Safari, Google Chrome atau penyemak imbas lain pada iPhone atau iPad anda. Tutorial ini akan menunjukkan kepada anda cara melakukannya pada empat pelayar web berbeza yang tersedia pada iPhone dan iPad. Cara Menukar Enjin Carian Safari pada iPhone atau iPad Safari ialah penyemak imbas web lalai pada iOS dan iPadOS, tetapi anda mungkin tidak menyukai enjin carian tersebut. Nasib baik, anda boleh menggunakan langkah ini untuk menukarnya: Pada iPhone atau iPad anda, lancarkan Tetapan daripada skrin Utama. Leret ke bawah dan ketik Safari daripada senarai. Dalam menu seterusnya,

Pintu masuk enjin carian cakera awan Baidu Pintu masuk enjin carian cakera awan Baidu Feb 27, 2024 pm 01:00 PM

Baidu Cloud ialah perisian yang membolehkan pengguna menyimpan banyak fail Jadi apakah pintu masuk ke enjin carian Baidu Cloud Disk? Pengguna boleh memasukkan URL https://pan.baidu.com untuk memasuki Baidu Cloud Disk Perkongsian pintu masuk terbaru ke enjin carian Baidu Cloud Disk ini akan memberi anda pengenalan terperinci. . Pintu masuk enjin carian cakera awan Baidu 1. Laman web carian Qianfan: https://pan.qianfan.app Menyokong cakera rangkaian: carian agregat, Alibaba, Baidu, Quark, Lanzuo, Tianyi, kaedah paparan cakera rangkaian Xunlei: log masuk diperlukan, ikut syarikat Kelebihan mendapatkan kod pengaktifan: Cakera rangkaian adalah komprehensif, terdapat banyak sumber, dan antara muka adalah mudah. 2. Laman web Maolipansou: alipansou.c

Pembangunan Java: Bagaimana untuk melaksanakan enjin carian dan fungsi mendapatkan semula teks penuh Pembangunan Java: Bagaimana untuk melaksanakan enjin carian dan fungsi mendapatkan semula teks penuh Sep 21, 2023 pm 01:10 PM

Pembangunan Java: Bagaimana untuk melaksanakan enjin carian dan fungsi mendapatkan semula teks penuh, contoh kod khusus diperlukan Enjin carian dan mendapatkan semula teks penuh adalah fungsi penting dalam era Internet moden. Mereka bukan sahaja membantu pengguna mencari perkara yang mereka inginkan dengan cepat, mereka juga menyediakan pengalaman pengguna yang lebih baik untuk tapak web dan apl. Artikel ini akan memperkenalkan cara menggunakan Java untuk membangunkan enjin carian dan fungsi perolehan teks penuh, dan menyediakan beberapa contoh kod khusus. Carian teks penuh menggunakan perpustakaan Lucene Lucene ialah perpustakaan enjin carian teks penuh sumber terbuka, dibangunkan oleh ApacheSo

Pengoptimuman Prestasi Enjin Carian PHP: Cara Ajaib Algolia Pengoptimuman Prestasi Enjin Carian PHP: Cara Ajaib Algolia Jul 23, 2023 pm 04:21 PM

Pengoptimuman Prestasi Enjin Carian PHP: Cara Ajaib Algolia Dengan pembangunan Internet dan keperluan pengguna yang semakin meningkat untuk pengalaman carian, pengoptimuman prestasi enjin carian telah menjadi penting. Dalam dunia pembangunan PHP, Algolia ialah perkhidmatan enjin carian yang berkuasa dan mudah disepadukan. Artikel ini akan memperkenalkan kegunaan ajaib Algolia dan cara mengoptimumkan prestasi enjin carian PHP melalui Algolia. Pengenalan Algolia Algolia ialah pembekal perkhidmatan enjin carian berdasarkan model SaaS.

Lima projek sumber terbuka bahasa Go yang dipilih untuk membawa anda meneroka dunia teknologi Lima projek sumber terbuka bahasa Go yang dipilih untuk membawa anda meneroka dunia teknologi Jan 30, 2024 am 09:08 AM

Dalam era perkembangan teknologi yang pesat hari ini, bahasa pengaturcaraan bermunculan seperti cendawan selepas hujan. Salah satu bahasa yang telah menarik perhatian ramai ialah bahasa Go, yang digemari oleh ramai pembangun kerana kesederhanaan, kecekapan, keselamatan serentak dan ciri-ciri lain. Bahasa Go terkenal dengan ekosistemnya yang kukuh dengan banyak projek sumber terbuka yang sangat baik. Artikel ini akan memperkenalkan lima projek sumber terbuka bahasa Go yang dipilih dan membawa pembaca untuk meneroka dunia projek sumber terbuka bahasa Go. KubernetesKubernetes ialah enjin orkestrasi kontena sumber terbuka untuk automatik

Dalam bidang pencarian kecerdasan buatan, Google dan Microsoft bersaing Dalam bidang pencarian kecerdasan buatan, Google dan Microsoft bersaing Apr 08, 2023 am 11:31 AM

Sejak dilancarkan lewat tahun lepas, ChatGPT telah dilihat sebagai ancaman utama kepada cara tradisional mencari maklumat. Kerana ia adalah pelbagai, anda boleh menjawab soalan orang, menulis esei atau puisi, atau menulis kod program. Keupayaan AI perbualan untuk memberikan jawapan yang koheren dianggap sebagai ancaman kepada enjin carian Google, yang selama beberapa dekad telah menjadi platform penanda aras untuk orang ramai mencari maklumat di Internet. ChatGPT OpenAI boleh menyesuaikan jawapan kepada soalan khusus yang ditanya oleh pengguna, yang boleh menjimatkan masa melayari tapak web. Laporan New York Times yang diterbitkan pada bulan Disember mendedahkan bahawa kejayaan semalaman ChatGPT memaksa Google memanggilnya "Kod Merah" dan mula menangani ancaman yang ditimbulkan oleh chatbot kecerdasan buatan kepada perniagaan enjin cariannya. mengikut

Bagaimana untuk menyediakan Google Chrome untuk menukar enjin carian Bagaimana untuk menukar enjin carian dalam penyemak imbas Bagaimana untuk menyediakan Google Chrome untuk menukar enjin carian Bagaimana untuk menukar enjin carian dalam penyemak imbas Mar 15, 2024 pm 12:49 PM

Bagaimana untuk menukar enjin carian dalam Google Chrome? Google Chrome ialah penyemak imbas yang sangat popular di kalangan pengguna Ia bukan sahaja mempunyai perkhidmatan yang ringkas dan mudah digunakan, alatan praktikal dan fungsi tambahan yang lain, tetapi juga boleh memenuhi keperluan pengguna yang berbeza secara default kepada Google mahu Bagaimana saya perlu menyediakannya untuk menggantikannya? Jom saya kongsikan caranya di bawah. Kaedah penggantian 1. Klik untuk membuka Google Chrome. 2. Klik ikon tiga titik untuk membuka antara muka menu. 3. Klik pilihan Tetapan untuk memasuki antara muka tetapan penyemak imbas. 4. Cari modul enjin carian dalam antara muka tetapan. 5. Klik butang Urus Enjin Carian. 6. Anda boleh melihat butang tambah Klik butang tambah ini untuk menambah enjin carian. ,

See all articles