")){ $where=''; break; } next($names); } if ($where=='variables'){ // find and assign vars if ($var=strtok($str, '=')){ $value=strtok(" \n\r"); $var=strtolower($var); if($var[0]=='r'){ $rand=0+substr($var,1); $frand=rand(); $frand=$frand/getrandmax()*$value; $Randoms[$rand]=floor($frand); } else $GLOBALS["$var"]="$value"; } } else if ($where!=''){ $templates["$where"]=$templates["$where"]."\n".$str; } } while (!feof($fp)); fclose($fp); } /* Variables used in templates */ $from1; // $f - num of first doc on page $to; // $l - num of last doc on page $found; // $t - total docs found $query; // $Q - query $error; // $E - error $nav; // $V - naVigator $wordsinfo; // $W - words info /* don't uncomment this $self; // $A - form Action */ // some about Document found $url; // $DU - Document URL $title; // $DT - Document Title $rating; // $DR - Document Rating $contype; // $DC - Document Content-type $lastmod; // $DM - Document last Modified $docsize; // $DS - Document Size $ndoc; // $DN - Document No $desc; // $DD - Document Description $keyw; // $DK - Document Keywords $text; // $DX - Document teXt function print_template($t,$echo=1){ global $templates; global $from1, $to, $found, $query, $error, $self; global $nav, $wordsinfo; global $url, $title, $rating, $desc, $contype, $lastmod, $docsize, $ndoc; global $keyw, $text; global $crc, $Randoms, $rec_id, $mysqldb, $DEBUG; $str=$templates["$t"]; $str=ereg_replace('\$f', "$from1", $str); $str=ereg_replace('\$l', "$to", $str); $str=ereg_replace('\$t', "$found", $str); $str=ereg_replace('\$A', $self, $str); $str=ereg_replace('\$Q', $query, $str); $str=ereg_replace('\$E', $error, $str); $str=ereg_replace('\$V', $nav, $str); $str=ereg_replace('\$W', $wordsinfo, $str); $str=ereg_replace('\$DU', $url, $str); $str=ereg_replace('\$DT', $title, $str); $str=ereg_replace('\$DR', "$rating", $str); $str=ereg_replace('\$DX', $text, $str); $str=ereg_replace('\$DC', $contype, $str); $str=ereg_replace('\$DM', $lastmod, $str); $str=ereg_replace('\$DS', "$docsize", $str); $str=ereg_replace('\$DN', "$ndoc", $str); $str=ereg_replace('\$DD', $desc, $str); $str=ereg_replace('\$DK', $keyw, $str); $sub=$str; while($sub=strstr($sub,'$r')){ $sub=substr($sub,2); $pos=0; $num=''; while(($sub[$pos]>='0')&&($sub[$pos]<='9')){ $num.=$sub[$pos++]; } $str=ereg_replace('\$r'.$num, ''.$Randoms[$num], $str); } if(strstr($str,'$CL')&&($t=='res')){ if($crc<>''){ $myurl=$url;$myct=$contype;$mylm=$lastmod; $query="SELECT url,content_type,last_modified FROM url WHERE crc='$crc' AND rec_id<>'$rec_id'"; if($DEBUG) echo $query,"

"; if(!($res=mysql($mysqldb,$query))) print_error('Query error:'.$query."\n
".mysql_error()); while($row=mysql_fetch_row($res)){ $url=$row[0]; $contype=$row[1]; $lastmod=$row[2]; $clon.=print_template('clone',0); } mysql_free_result($res); $url=$myurl;$contype=$myct;$lastmod=$mylm; } $str=ereg_replace('\$CL', $clon, $str); } // .... if($echo) echo $str; else return $str; } function print_error($str){ global $error; $error=$str; print_template('error'); print_template('bottom'); exit; } if (isset($q)){ $query=htmlspecialchars($q); } else{ $query=''; } read_template(); if(isset($resultsperpage)) $ps=$resultsperpage; print_template('top'); function ParseStr($qwe){ $qwe=ereg_replace("[^ &|~()ÁÂ×ÇÄÅ£ÖÚÉÊËÌÍÎÏÐÒÓÔÕÆÈÃÞÛÝßÙØÜÀÑ0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ]{1,}","&",$qwe); $qwe=ereg_replace("^ {0,}","",$qwe); $qwe=ereg_replace(" {0,}\| {0,}","|",$qwe); $qwe=ereg_replace(" {0,}\& {0,}","&",$qwe); $qwe=ereg_replace(" {0,}\( {0,}","(",$qwe); $qwe=ereg_replace(" {0,}\) {0,}",")",$qwe); $qwe=ereg_replace(" {0,}\~ {0,}","~",$qwe); $qwe=ereg_replace(" {1,}","|",$qwe); $qwe=ereg_replace("\|{1,}","|",$qwe); $qwe=ereg_replace("&{1,}","&",$qwe); $qwe=ereg_replace("\|\&\|","&",$qwe); $qwe=ereg_replace("[\|\&]{1,}$","",$qwe); $qwe=ereg_replace("^[\|\&]{1,}","",$qwe); return($qwe); } if (ereg_replace(" ","",$q)==''){ print_template('bottom'); exit; } $query_orig=$q; $q=ParseStr($q); $q=ereg_replace("\&"," && ",$q); $q=ereg_replace("\|"," || ",$q); $q=ereg_replace("\~"," ! ",$q); $q=ereg_replace("\("," ( ",$q); $q=ereg_replace("\)"," ) ",$q); $q="( $q )"; $q=ereg_replace(" {1,}"," ",$q); $qu=""; $w=""; $state=0; $n=0; $t=strtok($q," "); if (!mysql_pconnect($mysqlhost,$mysqluser,$mysqlpass)) print_error('Connection Error'); $stopwords=array(); $query="SELECT word FROM stopword"; if($DEBUG) echo $query,"

"; if(!($res=mysql($mysqldb,$query))) print_error('Query Error'); while($row=mysql_fetch_row($res)){ $stopwords[$row[0]]=1; } while(($t!="")&&($error=="")){ if(isset($stopwords[$t])) { if(isset($wordsinfo)) $wordsinfo.=', '; $wordsinfo.="$t: stopword"; $t=''; } switch($state){ case 0; if(($t=="||")||($t=="&&")||($t==")")) $error="at '$t'"; else if($t=="!"){ $state=0; $qu="$qu ! "; } else if($t=="("){ $n++; $state=0; $qu="$qu("; } else { $qu="$qu sum(dict.word='$t')"; if($w=="") $w="'$t'"; else $w="$w,'$t'"; $state=1; } break; case 1; if(($t=="||")||($t=="&&")){ $state=0; $qu="$qu $t"; } else if($t==")"){ $n--; $state=1; $qu="$qu)"; } else $error=" at '$t'"; break; } $t=strtok(" "); } if(isset($wordsinfo)) $wordsinfo.='; '; if($error==""&&$n!=0) $error='Unmatched brackets'; if($error!="") print_error($error); if($ul||$tagstr) $query="SELECT word,count(*) as c FROM dict,url WHERE word IN ($w) AND url.rec_id=dict.url_id AND url.url LIKE '%$ul%' $tagstr GROUP BY word ORDER BY word"; else $query="SELECT word,count(*) as c FROM dict WHERE word IN ($w) GROUP BY word ORDER BY word"; if($DEBUG) echo $query,"

"; if(!($res=mysql($mysqldb,$query))) print_error('Query Error'); $rows=mysql_num_rows($res); for($i=0;$i<$rows;$i++){ $row=mysql_fetch_row($res); $wordsinfo.=$row[0].': '.$row[1]; if($i+1<$rows) $wordsinfo.=', '; else $wordsinfo.='     '; } mysql_free_result($res); $query="SELECT ($qu)as qu, dict.url_id FROM dict,url WHERE url.rec_id=dict.url_id AND url.url LIKE '%$ul%' $tagstr AND dict.word in ($w) GROUP BY dict.url_id HAVING qu>0"; if($DEBUG) echo $query,"

"; if (!($res=@mysql($mysqldb,$query))) print_error('Query error: '.$query."\n
".mysql_error()); $found=mysql_numrows($res); mysql_FreeResult($res); $from=IntVal($np)*IntVal($ps); $from1=IntVal($from)+1; $to=IntVal($np+1)*IntVal($ps); $ps1=IntVal($ps)+1; if($to>$found) $to=IntVal($found); $ps_next=$found-$to; if (($ps_next>$ps) || ($ps_next<0)) $ps_next=$ps; if($found>0){ print_template('restop'); } else{ print_template('notfound'); print_template('bottom'); exit; } if($ul||$tagstr) $query="SELECT dict.url_id,sum(dict.word in ($w))as r,($qu)as qu FROM url,dict WHERE url.rec_id=dict.url_id AND url.url LIKE '%$ul%' $tagstr AND dict.word in ($w) GROUP BY url_id HAVING qu>0 ORDER BY r DESC LIMIT $from,$ps1"; else $query="SELECT dict.url_id,sum(dict.word in ($w))as r,($qu)as qu FROM dict WHERE dict.word in ($w) GROUP BY url_id HAVING qu>0 ORDER BY r DESC LIMIT $from,$ps1"; if($DEBUG) echo $query,"

"; if (!($res=@mysql($mysqldb,$query))) print_error('Query error: '.$query."\n
".mysql_error()); $rows=mysql_numrows($res); $i=0; if($rows>$ps){ $rows=$ps; $isnext=1; } while($i++<$rows){ $row=mysql_fetch_row($res); $url_id = $row[0]; if($url_in=="") $url_in="$url_id"; else $url_in.=",$url_id"; } mysql_FreeResult($res); if($url_in!=""){ $query="SELECT url.url,url.title,url.text,url.content_type,url.size,url.last_modified,url.keywords,url.description,url.crc,dict.url_id,sum(dict.word in ($w))as r,($qu)as qu FROM dict,url WHERE dict.word in ($w) AND dict.url_id in ($url_in) AND dict.url_id=url.rec_id GROUP BY url_id HAVING qu>0 ORDER BY r DESC"; if($DEBUG) echo $query,"

"; if (!($res=@mysql($mysqldb,$query))) print_error('Query error: '.$query."\n
".mysql_error()); $ndoc=$from+1; while($data=mysql_fetch_array($res)){ $title=$data[title]; $title=($title) ? htmlspecialChars($title):'No title'; $text=htmlspecialChars($data[text]); $url=$data[url]; $rec_id=0+$data[url_id]; $contype=$data[content_type]; $docsize=$data[size]; $lastmod=$data[last_modified]; $rating=$data[r]; $keyw=$data[keywords]; $desc=$data[description]; $crc=$data[crc]; print_template('res'); $ndoc++; } mysql_FreeResult($res); } $q=ereg_replace(" ","+",$query_orig); $q=ereg_replace("&","%26",$q); if($np>0){ $prevp=$np-1; $nav="[< < Prev $ps]   "; } if($isnext==1){ $nextp=$np+1; $nav=$nav."[Next $ps_next > >]"; } print_template('resbot'); print_template('bottom'); ?>