#!/usr/bin/php433 include("db.inc"); //================================================================= define("tagHTML" , 1); define("tagHead" , 2); define("tagTitle" , 4); define("tagMeta" , 8); define("tagBody" , 16); define("tagWord" , 32); define("tagA" , 64); define("tagOthers" ,128); //=================================================== $WordNoiseCount=5000; function ReadEnds() { global $Ends; $s="ends.txt"; $size=filesize($s); $f=fopen($s, 'r'); $rec=fread($f, $size); fclose($f); $Ends=explode("\n", $rec); } function OnWord($word) { global $WordNoiseCount, $WordStats, $Context, $Ends; $word2=$word[0]; //echo "$word2
\n";
if ($word2=="&") return "and";
if ($word2=="|") return "or";
if ($word2=="^") return "not";
if (strlen($word2)==1) return "true";
$w=str_replace("*", "%", $word[0]);
if ($w[0]!="!" && strchr($w, "%")===false) {
for ($i=0; $i
";
else $WordStats.=" ".$word[0].": $cnt
";
if ($cnt>=$WordNoiseCount) return "true";
$sql="select fw.fileid, count(*) from files2words fw, words2 w ".
"where w.word like \"$w\" and w.wordid=fw.wordid and fw.context&$Context ".
"group by 1 ".
"limit 0, $WordNoiseCount";
//echo $sql."\n";
$result=mysql_query($sql) or die("Invalid query 1");
$fid=Array();
$n=0;
while ($row = mysql_fetch_array($result, MYSQL_NUM)) {
$fid[]=$row[0];
$n++;
if ($n>10000) break;
}
mysql_free_result($result);
if (count($fid)==0) $s="false";
else $s=sprintf("(fileid in (%s))\n", implode (",", $fid));
/* $sql="select fw.fileid from files2words fw, words2 w ".
"where w.word like \"$w\" and w.wordid=fw.wordid and fw.context&$Context ".
"group by 1";
$s="(fileid in ($sql))";*/
return $s;
}
function ExprSQL($Expression) {
// echo "$Expression
";
$where="where (".
preg_replace_callback ("'[\w!%*&|\^]{1,}'", "OnWord", $Expression).
") ";
//$select="SELECT f.fileid, f.fileurl, f.filetitle FROM files f, files2words fw ";
$select="select fileid, fileurl, filetitle from files ";
$s=$select.$where;
//echo "
$s
";
return $s;
}
function Cnt() {
global $First, $ShowBy, $LastID, $Filter, $Context, $BaseDir;
$s=$Filter;
$s=preg_replace(Array("'[^()%*\w!]{1,}'", "'(\band\b|\bи\b)'i", "'(\bor\b|\bили\b)'i", "'(\bnot\b|\bне\b)'i"),
Array(" ", "&", "|", "^"), $s );
// echo "
$s
";
while (1) {
$s2=preg_replace("'([()%*\w!]{1,})[\s]{1,}([()%*\w!]{1,})'", "\\1 & \\2 ", $s);
if ($s2==$s) break;
$s=$s2;
}
$s=preg_replace("'[\s]{1,}'", " ", $s);
$Expression=$s;
ReadEnds();
//Запомним запрос:
$sql=sprintf("insert into searches set time=NOW(), context=%d, REMOTE_ADDR=\"%s\", REMOTE_HOST=\"%s\", rq=\"%s\"",
$Context, $_SERVER["REMOTE_ADDR"], substr(gethostbyaddr($_SERVER["REMOTE_ADDR"]), 0, 120),
$Filter);
$result=mysql_query($sql) or die("Invalid query X $sql\n");
if (!$LastID) $LastTitle="";
else {
$sql=sprintf("select * from files where fileid=%d", $LastID);
$result=mysql_query($sql) or die("Invalid query 2");
$row = mysql_fetch_array($result, MYSQL_NUM);
$LastTitle=$row[2];
@mysql_free_result($result);
}
$sql=ExprSQL($Expression);
$sql=sprintf("%s and filetitle>\"%s\" order by 3", $sql, $LastTitle); //echo $sql;
$sql=str_replace("\\", "", $sql); // echo "$sql\n";
$result=mysql_query($sql) or die("Invalid query 3\n");// $sql\n");
$i=$First; $n=$ShowBy;
$Res="";
while ($n>0 && $row = mysql_fetch_array($result, MYSQL_NUM)) {
$i++;
$Res.=sprintf("%d. %s
\n", $i, $BaseDir,
str_replace("\\", "/", strtolower($row[1])), $row[2]);
$n--;
}
$LastID=$row[0];/*
if ($row) {
printf("
Cледующие $ShowBy > >
urlencode($Filter), $i, $ShowBy, $LastID);
}*/
mysql_free_result($result);
if ($Res=="") $Res="По Вашему запросу ничего не найдено. Попробуйте расширить поиск, включив в него ссылки и/или текст
";
//==========>>>
$Res=preg_replace('|/empty/x0|si', '/x0', $Res);
return $Res;
}
$s=InitDB(); if ($s!="OK") die($s);
header("Cache-Control: no-store, no-cache, must-revalidate");
//phpinfo();
$s=$_SERVER["DOCUMENT_ROOT"]."/include/head.inc";
$size=@filesize($s);
$f=fopen($s, 'r');
$inc=fread($f, $size);
fclose($f);
$s="search.inc";
$size=@filesize($s);
$f=fopen($s, 'r');
$sinc=fread($f, $size);
fclose($f);
$title="Поиск"; $ShowBy=500; $Context=tagTitle; $First=0; $LastID=""; $Res=""; $Filter="";
if (array_key_exists("Search", $_POST)) if ($_POST["Search"]) { //Search btn pressed
$Filter=$_POST["Filter"];
$ShowBy=$_POST["ShowBy"]; $LastID=@$_POST["LastID"];
$Context=0; $cntxt=Array();
if (array_key_exists("cbTitle", $_POST)) if (strtolower($_POST["cbTitle"])=="on") {$Context|=tagTitle; $cntxt[]="заголовках";}
if (array_key_exists("cbRefs", $_POST)) if (strtolower($_POST["cbRefs"] )=="on") {$Context|=tagA; $cntxt[]="ссылках";}
if (array_key_exists("cbText", $_POST)) if (strtolower($_POST["cbText"] )=="on") {$Context|=tagOthers;$cntxt[]="тексте";}
$WordStats="Статистика встречаемости слов в ".implode(", ", $cntxt).":
\n";
$title="Результаты поиска «$Filter»";
$Res=Cnt()."
";
$Res=$WordStats."
\n".$Res;
}
$sinc=str_replace("%%first%%", $First, $sinc);
$sinc=str_replace("%%filter%%", $Filter, $sinc);
$sinc=str_replace("%%showby%%", $ShowBy, $sinc);
if ($Context & tagTitle ) $sinc=str_replace("%%title%%","checked", $sinc); else $sinc=str_replace("%%title%%", "", $sinc);
if ($Context & tagA ) $sinc=str_replace("%%refs%%", "checked", $sinc); else $sinc=str_replace("%%refs%%", "", $sinc);
if ($Context & tagOthers) $sinc=str_replace("%%text%%", "checked", $sinc); else $sinc=str_replace("%%text%%", "", $sinc);
$s=$sinc; //remembering $sinc
$sinc=$sinc.$Res;
if ($Res!="") $sinc=$sinc.$s;
$inc=str_replace("%%url", $_SERVER["REQUEST_URI"], $inc);
$inc=str_replace("%%title", $title, $inc);
$inc=str_replace("%%header", $title, $inc);
$inc=str_replace("%%data", $sinc, $inc);
print($inc);
?>