View file search.php

File size: 14.68Kb
<?php
/*Alexus finder 3.0
*Поисковая система на основе поиска от wappc.ru
*Оффсайт скрипта: http://youjob.org.ua
*Автор скрипта: Васильев Александр (Alexus)
*Автор библиотеки wappc: Denvas
*Дата: 29 марта 2009 года
*Страница: search.php - страница вывода поисковых результатов с сайта wappc.ru.
*-----------------------------------------------------
*СКРИПТ ЗАПРЕЩЕНО ПРОДАВАТЬ!!!
*/
	$nrowpage=10;
	include('config.php');
	include('func.php');
	$wappc_nametemp = "temp";

//Проверяем не пустое ли поле формы
if(empty($_GET['search']))
	{	
		include('header.php');
		echo "ОШИБКА!<br />Вы оставили поле формы пустым!<br />Введите свой запрос!";
		include('footer.php');
		exit();
	};
	
    //вывод данных
	$namelast="temp/wappclastsearch.txt";
	if(file_exists($namelast))$datalast=file($namelast); else $datalast=array();
    if(!empty($_GET["search"])){
        $search=trim($_GET["search"]);

		include('header.php');
		
//Подключение популярных запросов
if($on_off_p_links == "on")
	{
	include("pop_links.php");
	}
else	
	{
	echo "";
	}
				
        print "<div>Ваш запрос: ".$search."</div>";
        print "<hr />";
        print "<div>";

        $codesearch=GetFeedSearch($search);
        if($codesearch){
			$n=count($datalast);$flag=true;
			for($i=0;$i<$n;$i++){
				if(strcmp($datalast[$i],$search."\n")==0){$flag=false;break;};
			};
			if($flag){
				$datalast[]=$search."\n";
				if(count($datalast)>7)array_splice($datalast,0,1);
				$fd=fopen($namelast,"wb");
				fwrite($fd,join($datalast));
				fclose($fd);
			};
            print $codesearch;
        }
        else{
            print "По вашему запросу ничего не найдено<br/>"; 
        };
    }
    else{
		print "<?xml version=\"1.0\" encoding=\"UTF-8\"?><!DOCTYPE html PUBLIC \"-//WAPFORUM//DTD XHTML Mobile 1.0//EN\" \"http://www.wapforum.org/DTD/xhtml-mobile10.dtd\"><html xmlns=\"http://www.w3.org/1999/xhtml\"><head><title>".$title."</title><meta http-equiv=\"Content-Type\" content=\"application/vnd.wap.xhtml+xml; charset=utf-8\"/><link rel=\"stylesheet\" type=\"text/css\" href=\"pic/style.css\"/></head><body><div class='main'>";
        print "<div>".$title."</div>";
        print "<div>";
		$search="";

    };
    
    //Выводим последние поиски
	$n=count($datalast);
	if($n>1){
		print "<hr />";
		print "Последние поиски: ";
		for($i=0;$i<$n;$i++){
			$s=trim($datalast[$i]);
			print "<a href='search.php?search=".urlencode($s)."'>".$s."</a> ";
		};
		print "<br/>";
	};
    print "</div>";
	include('footer.php');

//==================================================//
    function GetFeedSearch($search){
        global $wappc_nametemp,$wappc_aff,$charset,$rows,$dataip;
        //загрузка базы IP
        $dataip=array();
        $nameip=rtrim($wappc_nametemp,"/")."/ip.ppctemp";
        if(file_exists($nameip)){
            $content=file($nameip);
            $oldtime=(int)$content[0];
            $dataip=unserialize($content[1]);
        }
        else
            $oldtime=0;
        if(time()-$oldtime>10*24*60*60){
			$ch=curl_init("http://wap.wappc.ru/exportip.php");
			curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
			curl_setopt($ch, CURLOPT_TIMEOUT, 10); 
			$html=curl_exec($ch);
			curl_close($ch);
			
            if(strpos($html,"ok:")!==false){
                $html=explode("\n",$html);
                $fd=fopen($nameip,"wb");
                if($fd){fwrite($fd,time()."\n".$html[1]);fclose($fd);};
                $dataip=unserialize($html[1]);
            };
        };
        //загрузка списка рекламы
        $content="";
        $nametemp=rtrim($wappc_nametemp,"/")."/".md5($search).".wappctemp";
        if(file_exists($nametemp)){
            $content=file_get_contents($nametemp);
            $oldtime=(int)substr($content,0,strpos($content,"\n"));
        } else $oldtime=0;
        if(time()-$oldtime>5*60){//кешировать на 5 минут (чаще запрашивать нельзя, сервер будет блокировать запросы)
            $url="http://wap.wappc.ru/export.php?charset=utf-8&user=".WAPPC_ID."&i=0&search=".urlencode($search)."&num=40&minprice=2&rnd=".mt_rand(0,1000);
            //забор средствами php
			$ch=curl_init($url);
			curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
			curl_setopt($ch, CURLOPT_TIMEOUT, 10); 
			$html=curl_exec($ch);
			curl_close($ch);

            //кэширование
            if($html)$content=$html;
            $fd=fopen($nametemp,"wb");
            if($fd){fwrite($fd,time()."\n".$content);fclose($fd);};
        }//if
        //очистить временный каталог (очистка вызывается 1 раз из 100 запросов)
        elseif(mt_rand(0,100)==0){
            $handle=opendir($wappc_nametemp);
            while ($namefile = readdir($handle)){
                if((strpos($namefile,".wappctemp")===false))continue;
                @unlink(rtrim($wappc_nametemp,"/\\")."/".$namefile);
            };//while ($file = readdir($handle))
            closedir($handle);
        };

        //подготовка данных
        global $user_agent, $ip, $wapver;
        $user_agent=(isset($_SERVER['HTTP_USER_AGENT'])?strtr($_SERVER['HTTP_USER_AGENT'],array("\r"=>"","\n"=>"","|"=>"")):"");
        $ip=(isset($_SERVER['REMOTE_ADDR'])?$_SERVER['REMOTE_ADDR']:"");
        $userallinfo=array(
            "referer"=>"http://".@$_SERVER['HTTP_HOST'].$_SERVER["REQUEST_URI"]
        );		
        $wapver=2;
        $data=ParseResultSearch($content);
        $rows=count($data);
        if($rows>0){
            $code="";
            //прогнать по таркетингу, если это не поисковик. Если поисковик, то показать все результаты
			if(strpos($user_agent,"http://")===false){
	            for($j=0;$j<$rows;$j++){
	                $row=&$data[$j];
	                if((!empty($row[6]))&&(CheckTargeting($userallinfo,$row[6]))){
	                    array_splice($data,$j,1);
	                    $j--;$rows--;
	                };//if
	            };//for
			};
            //вывести результат
            list($start,$stop)=GetPage();
            for($i=$start;$i<$stop;$i++){
                $slink=$data[$i];
                $code.="<div class='line".($i%2)."'><a href='".$slink[4]."'>".$slink[2]."</a><br/><small>".trim($slink[3]," \r\n.!")."<a href='".$slink[4]."'>...</a></small><br/></div>";
            };
            $code.=ShowPage();
            return $code;
        };
        return "";//нет данных
    };//function 
    //==================================================//
    /*
    Функция разбирает данные и возвращает массив
    */
    function ParseResultSearch($content,$badwords=array()){
        if(empty($content))return array();
        $data=array();
        $lines=explode("\n",$content);
        $nlines=count($lines);
        $nbadwords=count($badwords);
        for($j=1;$j<$nlines;$j++){
            $line=trim($lines[$j]);
            $flag=false;
            for($i=0;$i<$nbadwords;$i++)if(strpos($line,$badwords[$i])!==false){$flag=true;break;};
            if($flag)continue;
            $elem=explode("|",$line);
            if(count($elem)<3)continue;
            $data[]=$elem;
        };
        return $data;
    };//function 
    //==================================================//
    function CheckTargeting(&$info,$rule){
        global $user_agent, $ip, $wapver;

        $repeat=0;
        //разруливатель по версиям
        if(!empty($rule["ver"])){
            if(empty($rule["ver"][$wapver]))return "ver";
        };
        //проверка на прокси
        if(!empty($rule["proxy"])){
            if((isset($_SERVER["HTTP_X_FORWARDED_FOR"]))||(isset($_SERVER["HTTP_CLIENT_IP"])))return "proxy";
        };//if($rule["proxy"])
    
        //разруливатель по хорошим агентам
        if(!empty($rule["agent"])){
            $nagent=count($rule["agent"]);
            $flag=true;
            for($i=0;$i<$nagent;$i++){
                if(empty($rule["agent"][$i]))continue;
                if(strpos($user_agent,$rule["agent"][$i])!==false){
                    $flag=false;//нашли разрешенный
                    break;
                };
            };
            if($flag)return "agent";
        };//if($rule["agent"])
        //разруливатель по плохим агентам
        if(!empty($rule["banagent"])){
            $nagent=count($rule["banagent"]);
            $flag=false;
            for($i=0;$i<$nagent;$i++){
                if(empty($rule["banagent"][$i]))continue;
                if(strpos($user_agent,$rule["banagent"][$i])!==false){
                    $flag=true;//нашли запрещенный
                    break;
                };
            };
            if($flag)return "banagent";
        };//if($rule["banagent"])
    
        //проверка на разрешенные 
        if(!empty($rule["ip"])){
            $nip=count($rule["ip"]);
            $flag=true;
            for($i=0;$i<$nip;$i++){
                if(empty($rule["ip"][$i]))continue;
                if(strpos($ip,$rule["ip"][$i])===0){
                    $flag=false;//эта сетка разрешена к пересылке
                    break;
                };
            };//for
            if($flag)return "ip";
        };//if($rule["ip"])
        //проверка на запрещенные ip
        if(!empty($rule["banip"])){
            $nip=count($rule["banip"]);
            $flag=false;
            for($i=0;$i<$nip;$i++){
                if(empty($rule["banip"][$i]))continue;
                if(strpos($ip,$rule["banip"][$i])===0){
                    $flag=true;//эта сетка запрещена к переходу
                    break;
                };
            };//for
            if($flag)return "banip";
        };//if($rule["ip"])

        //проверка на запрещенные рекламные страницы
        if((!empty($info["referer"]))&&(!empty($rule["banreferer"]))){
            $nreferer=count($rule["banreferer"]);
            $flag=false;
            for($i=0;$i<$nreferer;$i++){
                if(empty($rule["banreferer"][$i]))continue;
                if(strpos($info["referer"],$rule["banreferer"][$i])!==false){
                    $flag=true;//нашли запрещенный
                    break;
                };
            };
            if($flag)return "banreferer";
        };//if($rule["banagent"])
    
        //проверка на разрешенные host
        if(!empty($rule["host"])){
            if(empty($info["host"])){
                $info["host"]=gethostbyaddr($ip);
            };
            $host=$info["host"];
            $nhost=count($rule["host"]);
            $flag=true;
            for($i=0;$i<$nhost;$i++){
                if(empty($rule["host"][$i]))continue;
                if(strpos($host,$rule["host"][$i])!==false){
                    $flag=false;//эта сетка разрешена к пересылке
                    break;
                };
            };//for
            if($flag)return "host";
        };//if($rule["host"])
        //проверка на запрещенные host
        if(!empty($rule["banhost"])){
            if(empty($info["host"])){
                $info["host"]=gethostbyaddr($ip);
            };
            $host=$info["host"];
            $nhost=count($rule["banhost"]);
            $flag=false;
            for($i=0;$i<$nhost;$i++){
                if(empty($rule["banhost"][$i]))continue;
                if(strpos($host,$rule["banhost"][$i])!==false){
                    $flag=true;//эта сетка запрещена к переходу
                    break;
                };
            };//for
            if($flag)return "banhost";
        };//if($rule["host"])

//более сложные разруливания, которые требует чтение дополнительных файлов
        //ограничение по операторам
        if(!empty($rule["operator"])){
            if(empty($info["operator"])){
                $info["operator"]=getoperatorGO($ip);
            };
            $operator=$info["operator"];
            $noperator=count($rule["operator"]);
            $flag=true;
            for($i=0;$i<$noperator;$i++){
                if(empty($rule["operator"][$i]))continue;
                if(strpos($operator,$rule["operator"][$i])!==false){
                    $flag=false;//этот оператор разрешен к пересылке
                    break;
                };
            };//for
            if($flag)return "operator";
        };//if(!empty($rule["operator"]))
    
        if(!empty($rule["banoperator"])){
            if(empty($info["operator"])){
                $info["operator"]=getoperatorGO($ip);
            };
            $operator=$info["operator"];
            $noperator=count($rule["banoperator"]);
            $flag=false;
            for($i=0;$i<$noperator;$i++){
                if(empty($rule["banoperator"][$i]))continue;
                if(strpos($operator,$rule["banoperator"][$i])!==false){
                    $flag=true;//этот оператор запрещен к пересылке
                    break;
                };
            };//for
            if($flag)return "banoperator";
        };//if(!empty($rule["banoperator"]))
    
    };
    //==================================================//
    function getoperatorGO($ip){
        global $dataip;
        $ip=IPnormal($ip);
        $nbase=count($dataip);
        for($i=0;$i<$nbase;$i++){
            $row=&$dataip[$i];
            if((strcmp($row[0],$ip)<=0)&&(strcmp($row[1],$ip)>=0))return $row[4];
        };
        return "other";
    };
    //==================================================//
    function IPnormal($ip){
        $str=explode(".",$ip);
        return str_pad($str[0],3,"0",STR_PAD_LEFT).".".str_pad($str[1],3,"0",STR_PAD_LEFT).".".str_pad($str[2],3,"0",STR_PAD_LEFT).".".str_pad($str[3],3,"0",STR_PAD_LEFT);
    };

?>