當前位置:吉日网官网 - 紀念幣收藏 - 請問PHP程序網站收藏網站鏈接是怎麽弄的

請問PHP程序網站收藏網站鏈接是怎麽弄的

壹、設計搜索表單

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

  • 上一篇:誠實的經典語錄
  • 下一篇:讀書隨筆
  • copyright 2024吉日网官网