📄 search.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 ";
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 + -