国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發 > PHP > 正文

用PHP程序為自己網站打造一個搜索引擎

2024-05-04 23:02:58
字體:
來源:轉載
供稿:網友

一,設計搜索表單

在網站的根目錄下建個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.

,歡迎訪問網頁設計愛好者web開發。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 肥乡县| 松江区| 驻马店市| 简阳市| 禹城市| 新平| 内黄县| 大关县| 伊金霍洛旗| 桃源县| 潼南县| 德庆县| 南京市| 隆子县| 安乡县| 海晏县| 五指山市| 屯留县| 马鞍山市| 乾安县| 安义县| 泸定县| 万盛区| 克东县| 涟水县| 苍南县| 额济纳旗| 阳高县| 依兰县| 含山县| 临泉县| 青铜峡市| 昆明市| 麻栗坡县| 双城市| 阳谷县| 莱州市| 巴塘县| 柘荣县| 桃园县| 高台县|