⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 search.php

📁 开源的蜘蛛程序
💻 PHP
字号:
<?
/*******************************************
* Sphider Version 1.2.x
* This program is licensed under the GNU GPL.
* By Ando Saabas          ando(a t)cs.ioc.ee
********************************************/
error_reporting(E_ALL ^ E_NOTICE ^ E_WARNING); 


$include_dir = "./include"; 
$language_dir = "./languages";

include "$include_dir/connect.php";
include 'searchfuncs.php';

extract(getHttpVars());

include "$include_dir/index_header.inc";
include "$include_dir/conf.php";



if ($results != "") {
	$results_per_page = $results;
}

if (get_magic_quotes_gpc()==1) {
	$query = stripslashes($query);
} 
if ($type == "phrase") {
	$check3 = "checked";
} else if ($type == "or") {
	$check2 = "checked";
} else {
	$check1 = "checked";
}

?>
<center><table cellpadding="5" 
cellspacing="1" class="searchBox"><tr><td align="center">

<form action="<?print $_SERVER['PHP_SELF'];?>" method="get">
<input type="text" name="query" size="40" value="<?  print quote_replace($query);?>">
<input type="submit" value="<?print $sph_messages['Search'];?>">   
<?
if ($adv ==1 || $advanced_search == 1) {?>

	<table width = "100%">
	<tr><td width="40%"><input type="radio" name="type" value="and" <?print $check1.">".$sph_messages['andSearch'];?></td>
		<td><input type="radio" name="type" value="or" <?print $check2.">".$sph_messages['orSearch'];?></td></tr>
		<tr>
		<td><input type="radio" name="type" value="phrase" <?print $check3.">".$sph_messages['phraseSearch'];?></td>
		<td>	<?print $sph_messages['show'];?><select name='results'><option selected><?print $results_per_page;?></option>
	  <option>20</option>
	  <option>50</option>
	  <option>100</option>
	  </select> <?print $sph_messages['resultsPerPage'];?><br></td>
	</tr>
	</table>

<?	
}
	if ($catid<>0) {
		$query = "SELECT category FROM ".$mysql_table_prefix."categories WHERE category_id='$catid'";
		$result = mysql_query($query);
		echo mysql_error();
		$row = mysql_fetch_array($result);
		$category = $row['category'];

		print "<center><b>".$sph_messages['Search']."</b>: <input type=\"radio\" name=\"category\" value=\"$catid\">".$sph_messages['Only in category']." \"$category\"  <input type=\"radio\" name=\"category\" value=\"-1\" checked>".$sph_messages['All sites']."</center>";
	}
?>

<input type="hidden" name="search" value="1">

</form>
<?
	
	$get_cats = "SELECT * FROM ".$mysql_table_prefix."categories WHERE parent_num=0 ORDER BY category";
	$result = mysql_query($get_cats);
	echo mysql_error();
	$rows = mysql_num_rows($result);

	if ($rows >0 && $search==1) 
		print "<a href=\"".$_SERVER['PHP_SELF']."\">".$sph_messages['Categories']."</a>";
?>
</td></tr></table>
</center>

<?


function getmicrotime(){
    list($usec, $sec) = explode(" ",microtime());
    return ((float)$usec + (float)$sec);
    }


function categories($catid)	{
	global $sph_messages,$showCats,$query,$mysql_table_prefix, $cat_columns;
	if ($catid<>0)
		{
		$query1 = "SELECT category FROM ".$mysql_table_prefix."categories WHERE category_id='$catid'";
		$result = mysql_query($query1);
		$row = mysql_fetch_array($result);
		$category = $row['category'];

//		print "<center><table width=\"550\"><tr><td>\n";
//		print "$category\n";
		$query1 = "SELECT parent_num FROM ".$mysql_table_prefix."categories WHERE category_id=$catid";
		$result = mysql_query($query1);
		if (mysql_num_rows($result)> 0)
			print "<p class=\"cat1\">";
		$row = mysql_fetch_array($result);
		$catid2 = $row['parent_num'];
		$i=0;
		while ($catid2<>0) {
			$query1 = "SELECT category_id, category FROM ".$mysql_table_prefix."categories WHERE category_id='$catid2'";
			$result = mysql_query($query1);
			$row = mysql_fetch_array($result);
			$catname[$i][1] = $row['category'];
			$cid = $catname[$i][2] = $row['category_id'];
			$query1 = "SELECT parent_num FROM ".$mysql_table_prefix."categories WHERE category_id='$cid'";
			$result = mysql_query($query1);
			$row = mysql_fetch_array($result);
			$catid2 = $row['parent_num'];
			$i++;
		}
		print "<a href=\"".$_SERVER['PHP_SELF']."\">".$sph_messages['Categories']."</a> > ";
		for ($x=count($catname)-1;$x>=0;$x--) {
			print "<a href=\"?catid=".$catname[$x][2]."\">".$catname[$x][1]."</a> > ";
		}
		print "$category\n";
		$query1 = "SELECT * FROM ".$mysql_table_prefix."categories WHERE parent_num=$catid ORDER BY category";
		$result = mysql_query($query1);
		$rows = mysql_num_rows($result);
		if (mysql_num_rows($result)> 0)
			print "<p><table width=\"100%\" class=\"catBanner\"><tr><td><b>".$sph_messages['Categories']."</b></td></tr></table></p>";

		$i=0;
		for ($x=1; $x<=3; $x++)
			{
			while ($i < $rows/(3/$x) )
				{
				$row = mysql_fetch_array($result);
				$newcatid = $row['category_id'];
				$category = $row['category'];
				$query1 = "SELECT count(*) FROM ".$mysql_table_prefix."site_category WHERE category_id=$newcatid";
				$result2 = mysql_query($query1);
				$row2 = mysql_fetch_row($result2);
				$sites = $row2[0];
				print "<a href=\"?catid=$newcatid\"><b>$category</b></a> ($sites)<br>\n";
				$i++;
				}
			}



		$query1 = "SELECT url, title, short_desc FROM ".$mysql_table_prefix."sites, ".$mysql_table_prefix."site_category WHERE category_id=$catid AND ".$mysql_table_prefix."sites.site_id=".$mysql_table_prefix."site_category.site_id order by title";
		$result = mysql_query($query1);
		if (mysql_num_rows($result)> 0)
			print "<br><p><table width=\"100%\" class=\"webPageBanner\"><tr><td><b>".$sph_messages['Web pages']."</b></td></tr></table></p>";
		$num =0 ;
		while ($row = mysql_fetch_array($result)) {
			$title = $row['title'];
			$url = $row['url'];
			$desc = $row['short_desc'];
			$num++;
			print "<b>$num.</b> <a href=\"$url\"><b>$title</b></a><br>$desc<br><font class=\"url\">$url</font><br><br>\n";
		}
		?>
		<p>
		<hr class="powered" size="1">
		<?poweredby();?>
		</p><?
	} else {

		$query1 = "SELECT * FROM ".$mysql_table_prefix."categories WHERE parent_num=0 ORDER BY category";
		$result = mysql_query($query1);
		$rows = mysql_num_rows($result);

		print "<center><br>";
		if ($rows >0) 
			print "<b>".$sph_messages['CATEGORIES']."<b>";
		print "<table width=\"550\" border=0 cellpadding=4>\n";
		if ($rows >0) 
			print "<tr><td colspan=$cat_columns><hr size=\"1\"></td></tr>";
		$j=0;
		while ($j < $rows / $cat_columns) {
					print "<tr>";
			for ($k = 0; $k < $cat_columns; $k++) {
				$width = 100/$cat_columns;
				print "<td valign=\"top\" width=\"$width%\">";
				if ($cat_columns * $j + $k < $rows) {
					$row = mysql_fetch_array($result);
					$catid = $row['category_id'];
					$category = $row['category'];
					$query1 = "SELECT * FROM ".$mysql_table_prefix."categories WHERE parent_num=$catid";
					$result2 = mysql_query($query1);
					print  "<a href=\"?catid=$catid\" class=\"cat1\">".$row['category']."</a><br>\n&nbsp;&nbsp;";
					print "<font size=-1>";
					$i = 0;
					while (($row2 = mysql_fetch_array($result2)) && $i<3) {
						if ($i != 0)
							print ", ";
						$id=$row2['category_id'];
						print "<a href=\"?catid=$id\">".$row2['category']."</a>";
						$i++;
					}
					if ($i> 3)
						print "...";
					print "</font><br><br>";
					print "</td>";
				}	
			
			}
			print "</tr>";
			$j++;
		}

		print "<tr><td colspan=$cat_columns>";
		if ($rows >0) {
			print "<hr size=\"1\">";
		}
		print "</td></tr></table></center>";
		poweredby();
		}

	}



function dosearch($query, $start, $category, $searchtype, $results) {
	global $sph_messages, $results_per_page,
		$links_to_next,
		$show_query_scores,
		$mysql_table_prefix,
		$desc_length;
	if ($results != "") {
		$results_per_page = $results;
	}

	if ($searchtype == "phrase") {
	   $query=str_replace('"','',$query);
	   $query = "\"".$query."\"";
	}

	$starttime = getmicrotime();
	// catch " if only one time entered
        if (substr_count($query,'"')==1){
           $query=str_replace('"','',$query);
        }   
	$words = makeboollist($query);
	$ignorewords = $words['ignore'];
	print "<br>";
	if (count($ignorewords)>0) {
		print "<center class=\"commonReport\">".$sph_messages["ignoredWords"]." ";
		while ($thisword=each($words['ignore'])) {
			print " ".$thisword[1];
		}
		print "</center>";
	}
	if ($start==0) 
		$start=1;
	$result = search($words, $category, $start, $results_per_page, $searchtype);
	$query= stripslashes($query);
	$entitiesQuery = htmlspecialchars($query);
	if ($result==0)
		print "<table width=\"100%\" class =\"resultReport\"><tr><td>".$sph_messages["The search"]." \"$entitiesQuery\" ".$sph_messages["noMatch"].".</td></tr></table>";

	$endtime = getmicrotime() - $starttime;
	$rows = $result['results'];
	$time = round($endtime*100)/100;
	$matchword = $sph_messages["matches"];
	if ($rows == 1) {
		$matchword= $sph_messages["match"];
	}
	
	$num_of_results = count($result) - 2;
	if ($start < 2)
		saveToLog(addslashes($query), $time, $rows);
	$from = ($start-1) * $results_per_page+1;
	$to = min(($start)*$results_per_page, $rows);
	if ($result != 0 && $from <= $to)
		print "<table width=\"100%\" class =\"resultReport\"><tr><td>".$sph_messages["Results"]."  $from-$to".$sph_messages["of"]." $rows $matchword ($time ".$sph_messages["seconds"].")</td></tr></table><br>";
	print "<table class=\"results\"><tr><td>";
	if ($rows>0) {
		$maxweight = $result['maxweight'];
		$i = 0;
		while ($i < $num_of_results && $i < $results_per_page) {
			$title = $result[$i]['title'];
			$url = $result[$i]['url'];
			$fulltxt = $result[$i]['fulltxt'];
			$pageSize = $result[$i]['size'];
			if ($pageSize!="") 
				$pageSize = "- ".number_format($pageSize, 1)."kb";
			
			
			$txtlen = strlen($fulltxt);
			if ($txtlen > $desc_length) {
				$places = array();
				foreach($words['hilight'] as $word) {
					$tmp = strtolower($fulltxt);
					$found_in = strpos($tmp, $word);
					$sum = -strlen($word);
					while (!($found_in =='')) {
						$pos = $found_in+strlen($word);
						$sum += $pos;  //FIX!!
						$tmp = substr($tmp, $pos);
						$places[] = $sum;
						$found_in = strpos($tmp, $word);

					}
				}
				sort($places);
				$x = 0;
				$begin = 0;
				$end = 0;
				while(list($id, $place) = each($places)) {
					while ($places[$id + $x] - $place < $desc_length && $x+$id < count($places) && $place < strlen($fulltxt) -$desc_length) {
						$x++;
						$begin = $id;
						$end = $id + $x;
					}
				}

				$begin_pos = max(0, $places[$begin] - 30);
				$fulltxt = substr($fulltxt, $begin_pos, $desc_length);

				if ($places[$begin] > 0) {
					$begin_pos = strpos($fulltxt, " ");
				}
				$fulltxt = substr($fulltxt, $begin_pos, $desc_length);
				$fulltxt = substr($fulltxt, 0, strrpos($fulltxt, " "));
				$fulltxt = "...".$fulltxt."...";
			}

			$weight = number_format($result[$i]['weight']/$maxweight*100, 2);
			if ($title=='')
				$title = $sph_messages["Untitled"];
			$regs = Array();
			foreach($words['hilight'] as $change) {
				while (@eregi("[^\>](".$change.")[^\<]", " ".$title." ", $regs)) {
					$title = eregi_replace($regs[1], "<b>".$regs[1]."</b>", $title);
				}

				while (@eregi("[^\>](".$change.")[^\<]", " ".$fulltxt." ", $regs)) {
					$fulltxt = eregi_replace($regs[1], "<b>".$regs[1]."</b>", $fulltxt);
				}
				$url2 = $url;
				while (@eregi("[^\>](".$change.")[^\<]", $url2, $regs)) {
					$url2 = eregi_replace($regs[1], "<b>".$regs[1]."</b>", $url2);
				}
			}
			if ($show_query_scores == 0) {
				$weight = '';
			} else
				$weight = '['.$weight.'%]';

			$num = $from + $i;
			print "<b>$num.</b> $weight <a href=\"$url\"><font class=\"title\">$title</font></a><br><div class=\"description\">$fulltxt</div><font class=\"url\">$url2 $pageSize</font><br><br>\n";
			$i++;
		}
	}
	$pages = ceil($rows / $results_per_page);
	$prev = $start - 1;
	$next = $start + 1;
	if ($from <= $to) {
		if ($pages > 0)
			print "<center>".$sph_messages["Result page"].": ";
		if ($start<>1)
			print "<a href=\"".$_SERVER['PHP_SELF']."?query=".addmarks($query)."&start=".$prev."&search=1&results=$results_per_page&type=$searchtype\">".$sph_messages["Previous"]."</a> ";
		$firstpage = $start - $links_to_next;
		if ($firstpage < 1) $firstpage = 1;
		$lastpage = $start + $links_to_next;
		if ($lastpage > $pages) $lastpage = $pages;

		for ($x=$firstpage; $x<=$lastpage; $x++)
			if ($x<>$start)	{
				print "<a href=".$_SERVER['PHP_SELF']."?query=".addmarks($query)."&start=$x&search=1&results=$results_per_page&type=$searchtype>$x</a> ";
			}
		else
			print "<b>$x </b>";
		if ($next <= $pages)
			print "<a href=\"".$_SERVER['PHP_SELF']."?query=".addmarks($query)."&start=".$next."&search=1&results=$results_per_page&type=$searchtype\">".$sph_messages["Next"]."</a>";
	}
	if ($pages > 0 && $from <=$to) {
		print "</center>";
		?>
		
		<br>
		<p>
		<hr class="powered" size="1">
		<?poweredby();?>
		</p>
		</td></tr></table> <?

	} else {
		?>
		</td></tr></table>
		<br>
		<p>
		<hr class="powered" size="1">
		<?poweredby();?>
		</p>
		 <?
	}
}

function poweredby () {
	global $sph_messages;
	?>
		<!--IF YOUR WANT TO REMOVE THIS, PLEASE DONATE TO THE PROJECT--> 		
		<center><font size="-2"><?print $sph_messages['Powered by'];?> <a href="http://www.cs.ioc.ee/~ando/sphider/">Sphider</a> | 汉化 by <a href="www.sluke.cn">sluke</a></font></center>

    <?
}


function saveToLog ($query, $elapsed, $results) {
        global $mysql_table_prefix;
	mysql_query("insert into ".$mysql_table_prefix."query_log (query, time, elapsed, results) values ('$query', now(), '$elapsed', '$results')");
	echo mysql_error();
}

switch ($search) {
	case 1:
		if (!isset($type)) {
			$type = "";
		}
		if (!isset($results)) {
			$results = "";
		}
		dosearch($query, $start, $category, $type, $results);
	break;
	default:
		categories($catid);
	break;
	}

include "$include_dir/index_footer.inc";
?>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -