$start_time = microtime(true); ignore_user_abort(true); include_once("./drupal//config.inc.php"); // global settings /***************************************************************************** * Function checks memory cache status * * @return boolean memcache status ****************************************************************************/ function checkMemoryCache() { if (extension_loaded('eAccelerator')) { // do we have memory cache? $e_info = eaccelerator_info(); $cache = (intval($e_info['cache'])==1)?true:false; } return $cache; } /***************************************************************************** * Function saves visitor and current visit data into memory * * @param array visitor data ****************************************************************************/ function saveClickData($clicker) { global $cookie_names; $click = $clicker['click']; $click['to_trade'] = $clicker['trade_id']; $click['thumb'] = $clicker['thumb']; $click['niche'] = $clicker['niche']; $click['is_nocookie'] = ($clicker['is_cookie']===false)?1:0; $mem_str = eaccelerator_get(DB_DBASE.'_visit_'.$_SERVER['REMOTE_ADDR']); if (strlen(trim($mem_str))>0) { $mem_ip_data = unserialize($mem_str); if (!is_array($mem_ip_data)) { $mem_ip_data = Array(); $mem_ip_data['ttl'] = time()+3600; // inicialize TTL } } else { $mem_ip_data = Array(); $mem_ip_data['ttl'] = time()+3600; // inicialize TTL } $mem_ip_data['country'] = $_SERVER["GEOIP_COUNTRY_CODE"]; $mem_ip_data['is_proxy'] = ((checkProxy())?'1':'0'); $mem_ip_data['agent'] = $_SERVER["HTTP_USER_AGENT"]; $ttl = $mem_ip_data['ttl'] - time(); $ttl = (($ttl<1)?1:$ttl); $visits = $mem_ip_data['visits']; $visit_time = 0; if (is_array($visits) && count($visits)>0) { ksort($visits); foreach($visits as $time=>$visit) { if ($visit['sent_to_niche']==$click['niche']) { $visit_time = $time; } } $visit_time = ($visit_time==0)?$time:$visit_time; // if there is no match then use last time value } if (intval($mem_ip_data['visits'][$visit_time]['id'])>0 && $mem_ip_data['visits'][$visit_time]['is_nocookie']!=$click['is_nocookie']) { $mem_ip_data['visits'][$visit_time]['update_visit'] = 1; } $mem_ip_data['visits'][$visit_time]['is_nocookie'] = $click['is_nocookie']; $mem_ip_data['visits'][$visit_time]['clicks'][time()] = $click; $mem_val_str = serialize($mem_ip_data); eaccelerator_put(DB_DBASE.'_visit_'.$_SERVER['REMOTE_ADDR'],$mem_val_str,$ttl); } /***************************************************************************** * Function validates visitor key * * @param string key * @return bool Valid/Not valid ****************************************************************************/ function validateKey($passed_key) { global $cookie_names; $prefix = "_super_secret_"; $ip = $_SERVER['REMOTE_ADDR']; $datetime1 = date("Y.m.d"); $datetime2 = date("Y.m.d",time()-24*3600); // yesterday $key1 = md5($prefix.$ip.$datetime1); $key2 = md5($prefix.$ip.$datetime2); if ($passed_key==$key1 || $passed_key==$key2) { return true; } else { return false; } } /***************************************************************************** * Function validates visitor key * * @param string key * @return bool Valid/Not valid ****************************************************************************/ function isClicksGood($clicks, $seconds) { global $cookie_names; if ($clicks<1||$seconds<0) { return true; } $mem_str = eaccelerator_get(DB_DBASE.'_visit_'.$_SERVER['REMOTE_ADDR']); if (strlen($mem_str)>0) { $mem_ip_data = unserialize($mem_str); } if (!is_array($mem_ip_data)) { $mem_ip_data = Array(); } $visits = $mem_ip_data['visits']; $all_clicks = Array(); if (is_array($visits) && count($visits)>0) { foreach($visits as $visit_time=>$visit) { if (count($visit['clicks'])>0) { foreach($visit['clicks'] as $click_time=>$click) { $all_clicks[] = $click_time; } } } } if (count($all_clicks)>$clicks) { sort($all_clicks); $size = count($all_clicks)-$clicks; for($i=0;$i<$size;$i++) { if (($all_clicks[($i+$clicks)]-$all_clicks[$i])<$seconds) { return false; } } } return true; } /***************************************************************************** * Function validates visitor key * * @param string key * @return bool Valid/Not valid ****************************************************************************/ function isImgOK($clicker) { global $cookie_names; $mem_str = eaccelerator_get(DB_DBASE.'_visit_'.$_SERVER['REMOTE_ADDR']); if (strlen($mem_str)>0) { $mem_ip_data = unserialize($mem_str); } if (!is_array($mem_ip_data)) { $mem_ip_data = Array(); } $visits = $mem_ip_data['visits']; $visit_time = 0; if (is_array($visits) && count($visits)>0) { ksort($visits); foreach($visits as $time=>$visit) { if ($visit['sent_to_niche']==$clicker['niche']) { $visit_time = $time; } } $visit_time = ($visit_time==0)?$time:$visit_time; } if ($mem_ip_data['visits'][$visit_time]['is_cht2']===0) { return true; // passed } else { return false; // check not passed } } /***************************************************************************** * Function gets trade_id from referer * * @return array settings ****************************************************************************/ function getTrade($refdomain) { global $cookie_names; if (strlen(trim($refdomain))==0) { return 0; } $trades_str = eaccelerator_get(DB_DBASE.'_trades'); if (strlen($trades_str)>0) { $trades = unserialize($trades_str); if (!is_array($trades)||count($trades)==0) { return 0; } foreach($trades as $trade) { if (trim($trade['domain'])==trim($refdomain)) { return $trade['id']; } } } return 0; } /***************************************************************************** * Function gets click data * * @return array click params ****************************************************************************/ function getClickData() { global $cookie_names; if (strlen($_REQUEST['req_id'])>0) { $req_id = intval(trim($_REQUEST['req_id'])); $se_friendly = getMemoryArray('se_friendly'); if (strlen($se_friendly[$req_id])>0) { $my_request = $se_friendly[$req_id]; } else { $se_file = file('tmanager7/pages/se_friendly_urls'); if (count($se_file)>0) { foreach($se_file as $item) { list($id,$ttl,$url) = split('\|',$item,3); $se_friendly[$id] = $url; } storeMemoryArray('se_friendly',$se_friendly); $my_request = $se_friendly[$req_id]; } } if (strpos($my_request,'&')===false && strpos($my_request,'v=')!==false) { $my_request = base64_decode(substr($my_request, strpos($my_request, 'v=')+2)); } if (strpos($my_request,'&')!==false) { $vars = explode('&',$my_request); foreach($vars as $var) { list($name,$val) = split("=",$var); $request[$name] = $val; } } else { $request = $_REQUEST; // (error?) } } else if (strlen($_REQUEST['v'])>0) { /// do we have variables encoded? if (($var_str = base64_decode($_REQUEST['v'])) !== false) { $vars = explode('&',$var_str); foreach($vars as $var) { list($name,$val) = split("=",$var); $request[$name] = $val; } } else { $request = $_REQUEST; // we shouldn't be here (base64_decode error?) } } else { $request = $_REQUEST; // variables not encoded, use them from $_REQUEST if (strlen($_SERVER['QUERY_STRING'])>0 && strpos($_SERVER['QUERY_STRING'],'u=') !== false) { $request['u'] = substr($_SERVER['QUERY_STRING'],strpos($_SERVER['QUERY_STRING'],'u=')+2); } } if(!empty($GLOBALS['urllocal'])){ $request['u']=$GLOBALS['urllocal']; } $click['ip'] = $_SERVER['REMOTE_ADDR']; $click['country'] = $_SERVER["GEOIP_COUNTRY_NAME"]; $click['country_short'] = $_SERVER["GEOIP_COUNTRY_CODE"]; $click['referer'] = $_COOKIE[$cookie_names['tm_refdomain']]; $click['click_num'] = intval($_COOKIE[$cookie_names['tm_click_num']])+1; $click['is_cookie'] = (strlen($_COOKIE[$cookie_names['tm_visit']])>0)?true:false; $click['is_cheat'] = ($request['c']=='1')?true:false; $click['click_again'] = (strlen($_COOKIE[$cookie_names['clicked_thumbs']])>0)?1:0; $click['content'] = urldecode($request['u']); $click['link_track'] = trim($_REQUEST['l']); $click['thumb'] = intval($request['t']); $click['niche'] = (intval($request['n'])>0)?intval($request['n']):1; $click['thube_thumb'] = intval($request['t']); $click['click_type'] = intval($request['ct']); $click['spot'] = intval($request['sp']); $click['key'] = (strlen($_COOKIE[$cookie_names['tm_key']])>0)?$_COOKIE[$cookie_names['tm_key']]:'nocookie'; $click['key2'] = (strlen($_COOKIE[$cookie_names['tm_key2']])>0)?$_COOKIE[$cookie_names['tm_key2']]:''; $click['pct'] = ((strlen($request['pct'])>0)?intval($request['pct']):""); $clicked_ids = explode("%7C", $_COOKIE[$cookie_names['tm_clicked_thumbs']]); $click['clicked_thumbs'] = (is_array($clicked_ids))?$clicked_ids:Array(); $clicked_trades = explode("%7C", $_COOKIE[$cookie_names['tm_clicked_trades']]); $click['clicked_trades'] = (is_array($clicked_trades))?$clicked_trades:Array(); $external_trades = explode("\.", $_COOKIE[$cookie_names['external_info']]); $click['external_trades'] = (is_array($external_trades))?$external_trades:Array(); $click['trade_id'] = 3; // default trade = content if ($click['is_cookie']) { //set cookies setcookie($cookie_names['tm_click_num'], "".$click['click_num'], time()+86400,"/"); if ($click['thumb']>0) { $clicked_thumbs_cookie = (strlen($_COOKIE[$cookie_names['clicked_thumbs']])>0)?$_COOKIE[$cookie_names['clicked_thumbs']]."%7C":""; setcookie($cookie_names['clicked_thumbs'], $clicked_thumbs_cookie.$click['thumb'], time()+86400,"/"); } } return $click; } /***************************************************************************** * Function gets memory cached array * * @param string variable name * @return array cached array ****************************************************************************/ function getMemoryArray($name) { global $cookie_names; $arr_str = eaccelerator_get(DB_DBASE.'_'.$name); if (strlen($arr_str)>0) { $arr = unserialize($arr_str); if (!is_array($arr)) { $arr = Array(); } } return $arr; } /***************************************************************************** * Function stores memory cached array * * @param string variable name * @param array array for cache ****************************************************************************/ function storeMemoryArray($name,$arr,$ttl = 3600) { global $cookie_names; if (!is_array($arr)) { $arr = Array(); } $arr_str = serialize($arr); eaccelerator_put(DB_DBASE.'_'.$name,$arr_str,$ttl); } /***************************************************************************** * Function adds click for thumb * * @param array click data ****************************************************************************/ function addClick($click) { global $cookie_names; if ($click['click_num']==1) { $var_name = 'thumb_fclicks'; // we got fclick } else if ($click['click_num']<6) { $var_name = 'thumb_clicks'; // we got click } else { return; // too many clicks (don't count any more) } $id = intval($click['thumb']); $clicks = getMemoryArray($var_name); $clicks[$id] = intval($clicks[$id]) + 1; storeMemoryArray($var_name,$clicks); } /***************************************************************************** * Function adds view for thumb * * @param array view data ****************************************************************************/ function addView($click) { global $cookie_names; if ($click['click_num']<6) { $var_name = 'views'; // we got click to gallery } else { return; // too many clicks (don't count any more) } $id = intval($click['thumb']); $views = getMemoryArray($var_name); $views[$id] = intval($views[$id]) + 1; storeMemoryArray($var_name,$views); } /***************************************************************************** * Function saves script exec time * * @param time start time ****************************************************************************/ function saveExecTime($start_time) { global $cookie_names; $time_end = microtime(true); $time = $time_end - $start_time; if ($time>100) { // bugfix? return; // return if number too large } $val_str = "('".date("Y-m-d H:i:s")."','out.php','".strtolower(TRADESCRIPT_VERSION)."',".$time.")"; $load_stats = eaccelerator_get(DB_DBASE.'_load_stats'); if (strlen($load_stats)==0) { eaccelerator_put(DB_DBASE.'_load_stats',$val_str); } else { eaccelerator_put(DB_DBASE.'_load_stats',$load_stats.",".$val_str); } } /***************************************************************************** * Function checks visitor for using proxy * * @return boolean proxy status ****************************************************************************/ function checkProxy() { $PROXY_VARS = array(); $PROXY_VARS[0] = "HTTP_X_FORWARDED_FOR"; $PROXY_VARS[1] = "HTTP_VIA"; $PROXY_VARS[2] = "HTTP_PROXY_CONNECTION"; $PROXY_VARS[3] = "HTTP_CLIENT_IP"; $PROXY_VARS[4] = "HTTP_X_COMING_FROM"; $PROXY_VARS[5] = "HTTP_X_FORWARDED"; $PROXY_VARS[6] = "HTTP_COMING_FROM"; $PROXY_VARS[7] = "HTTP_PROXY"; $PROXY_VARS[8] = "HTTP_XPROXY"; $PROXY_VARS[9] = "HTTP_FORWARDED_FOR"; $PROXY_VARS[10] = "HTTP_FORWARDED"; $PROXY_VARS[11] = "ZHTTP_CACHE_CONTROL"; $PROXY_VARS[12] = "HTTP_CACHE_INFO"; $PROXY_VARS[13] = "HTTP_XONNECTION"; $PROXY_VARS[14] = "HTTP_PRAGMA"; $PROXY_VARS[15] = "X-Cache"; foreach($PROXY_VARS as $k=>$val) { if(getenv($val)) { return true; // using proxy } } return false; } /***************************************************************************** * Function saves script exec time * * @param time start time ****************************************************************************/ function showPage($click,$cache='') { global $cookie_names; global $settings,$start_time,$trades,$mem_visitor; //***** [1.1] Format url if(is_numeric($click['url'])){ $newcontent=FormatUrl($click['url']); $click['url']=$newcontent; } if($cache=="googlebot") { //show page, no stats header("Location: ".$click['url']); return; } if ($cache=='no_cache') { // no memory cache, just send to content and exit header("Pragma: no-cache"); header("Cache-Control: no-store, no-cache, must-revalidate"); header("Location: ".$click['url']); return; } //add trade data $val_str = "('".date("Y-m-d H:i:s")."',".$click['trade_id'].",'".$click['ip']."','".addslashes($click['country'])."','".$click['country_short']."','".addslashes($click['referer'])."',".intval($click['click_num']).",".(($click['is_cookie'])?"1":"0").",".(($click['free_hit'])?"1":"0").",".(($click['is_cheat'])?"1":"0").",".(($click['click_again'])?"1":"0").",'".addslashes($click['link_track'])."')"; $out_data = eaccelerator_get(DB_DBASE.'_out_data'); if (strlen($out_data)==0) { eaccelerator_put(DB_DBASE.'_out_data',$val_str); } else { eaccelerator_put(DB_DBASE.'_out_data',$out_data.','.$val_str); } /* if ($click['trade_id']>4) { $click['click']['sent_to_trade'] = $click['trade_id']; } else { $click['click']['sent_to_content'] = '1'; } */ saveClickData($click); // Add click into visitor memory tree /* $cur_click = Array(); $cur_click['trade_id'] = $click['trade_id']; $cur_click['referer'] = $click['referer']; $cur_click['click_num'] = count($mem_visitor['clicks'])+1; $cur_click['is_cookie'] = (($click['is_cookie'])?"1":"0"); $cur_click['is_freehit'] = (($click['free_hit'])?"1":"0"); $cur_click['is_cheat'] = (($click['is_cheat'])?"1":"0"); $cur_click['click_again'] = (($click['click_again'])?"1":"0"); $cur_click['link_track'] = $click['link_track']; $mem_visitor['clicks'][time()] = $cur_click; $mem_ip_data[$visitor['key']] = $mem_visitor; addMemIpData($mem_ip_data,$mem_visitor); */ // set visited trade cookie if ($click['trade_id']>4) { if (count($click['clicked_trades'])>0) { $trades_cookie = implode("%7C",$click['clicked_trades'])."%7C".$click['trade_id']; } else { $trades_cookie = $click['trade_id']; } setcookie($cookie_names['tm_clicked_trades'],$trades_cookie , time()+86400,"/"); // set visited trades cookie if ($settings['external_info']=="1" && $trades[$click['trade_id']]['external_info']=="1") { $out_crc = substr(crc32($_SERVER['SERVER_NAME']), -4); $external_str = "x=".((strlen($_COOKIE[$cookie_names['external_info']])>0)?$_COOKIE[$cookie_names['external_info']].".".$out_crc:$out_crc); $url_info = parse_url($click['url']); $click['url'] = $url_info['scheme']."://".$url_info['host'].$url_info['path']."?".((strlen($url_info['query'])>0)?$url_info['query']."&":"").$external_str; // $click['url'] = (substr($click['url'],-3)=='com')?$click['url'].'/':$click['url']; // $click['url'] = (!strstr($click['url'],"?") && substr($click['url'],-1)!='/')?$click['url'].'/':$click['url']; // $click['url'] = (strstr($click['url'],"?"))?$click['url']."&x=".$external_str:$click['url']."?x=".$external_str; } } // modify content URL setting if ($click['trade_id']==3 && strlen($settings['modify_content'])>0 && $settings['modify_content']!='%%GALLERY_URL%%') { $click['url'] = str_ireplace('%%GALLERY_URL%%',$click['url'],$settings['modify_content']); } // show page if ($click['trade_id']==3&&($settings['top_frame_enable']==1||$settings['bottom_frame_enable']==1)&&(file_exists(TMANAGER_DIR."/pages/niche1/top_frame.html")||file_exists(TMANAGER_DIR."/pages/niche1/bottom_frame.html"))) { echo "\n
\n"; } else { setcookie($cookie_names['tm_click'],$click['click_num'] , time()+86400,"/"); // set click cookie header("Pragma: no-cache"); header("Cache-Control: no-store, no-cache, must-revalidate"); header("Location: ".$click['url']); } saveExecTime($start_time); // save page exec time } /***************************************************************************** * Function calculates random weighted value ****************************************************************************/ function weighted_rand($weights) { global $cookie_names; $total_weight = 0; if (count($weights)==0) return; foreach ($weights as $val=>$weight) { $total_weight += $weight; } if ($total_weight<1) { return $val; } $rand = mt_rand(1, $total_weight); $total_weight = 0; foreach ($weights as $value => $weight) { $total_weight += $weight; if ($rand <= $total_weight) return $value; } } /***************************************************************************** * Function checks user IP address against ban-list * * @param string visitor IP address * @return boolean IP ban status ****************************************************************************/ function checkIpBan($ip) { global $cookie_names; $ip = ip2long($ip); $banned_ips_str = eaccelerator_get(DB_DBASE.'_ip_ban'); if (strlen($banned_ips_str)>0) { $banned_ips = unserialize($banned_ips_str); if (is_array($banned_ips) && count($banned_ips)>0) { foreach($banned_ips as $banned_ip) { if ($banned_ip['ip_from']<=$ip && $ip<=$banned_ip['ip_to']) { return true; // IP banned } } } } return false; } /***************************************************************************** * Function checks referer against ban-list * * @param string visitor domain name * @return boolean domain ban status ****************************************************************************/ function checkRefBan($host) { global $cookie_names; $banned_refs_str = eaccelerator_get(DB_DBASE.'_ref_ban'); if (strlen($banned_refs_str)>0) { $banned_refs = unserialize($banned_refs_str); if (is_array($banned_refs) && count($banned_refs)>0) { if (in_array($host,$banned_refs)) { return true; // referer banned } } } return false; } /**************************************************************************** * Format url from id to real */ function FormatUrl($u){ global $memcashed_server,$memcashed_port,$thumblocal; //***** banned gallery hosts if(is_file("bannedhost")){ $fp=fopen("bannedhost","r"); while($str=fgets($fp)){ $str=trim($str); if(!empty($str)){ $bannedhost[]=$str; } } fclose($fp); } else { $bannedhost=array(); } $u=intval($u); $ip=$_SERVER['REMOTE_ADDR']; include(RT_DIR."lib/mysql/db_config.php"); if(@mysql_connect($db_host,$db_user,$db_passwd)){ if(mysql_select_db($db_name)) { if(!empty($u)) { $res=mysql_query("SELECT url,localurl FROM htm_gallery WHERE gid=".$u); $row=mysql_fetch_array($res); if(count($row)){ $url=$row[0]; $localurl=$row[1]; $host=parse_url($url,PHP_URL_HOST); $host=str_replace("www.", "", $host); if (! empty($localurl)) { if (! empty($memcashed_server) && ! empty($memcashed_port)) { $memcache_obj = new Memcache(); if ($memcache_obj->connect($memcashed_server, $memcashed_port)) { /* $fp=fopen("iplog","a"); fputs($fp, $ip." ".$host." con\n"); fclose($fp);*/ $visit = @$memcache_obj->get("gal_" . $host . "_" . $ip); if(in_array($host, $bannedhost)){ $banned=1; } else { $banned=0; } if (empty($visit) && !$banned) { // первый заход $memcache_obj->set("gal_" . $host . "_" . $ip, "1", false, 86400); $u = $url; /* $fp=fopen("iplog","a"); fputs($fp, $ip." ".$host." 1\n"); fclose($fp);*/ } else { // повторный заход $u=$localurl; if(!empty($thumblocal)){ $u.="?".$thumblocal; } /* $fp=fopen("iplog","a"); fputs($fp, $ip." ".$u." 2\n"); fclose($fp);*/ } } else { $u = $url; } } else { $u = $url; } } else { $u = $url; } } else { $u="http://google.com"; } } else { $u="http://google.com"; } } else { $u="http://google.com"; } } else { $u="http://google.com"; } return $u; } Function decbin32 ($dec) { return str_pad(decbin($dec), 32, '0', STR_PAD_LEFT); } // ip_in_range // This function takes 2 arguments, an IP address and a "range" in several // different formats. // Network ranges can be specified as: // 1. Wildcard format: 1.2.3.* // 2. CIDR format: 1.2.3/24 OR 1.2.3.4/255.255.255.0 // 3. Start-End IP format: 1.2.3.0-1.2.3.255 // The function will return true if the supplied IP is within the range. // Note little validation is done on the range inputs - it expects you to // use one of the above 3 formats. Function ip_in_range($ip, $range) { if (strpos($range, '/') !== false) { // $range is in IP/NETMASK format list($range, $netmask) = explode('/', $range, 2); if (strpos($netmask, '.') !== false) { // $netmask is a 255.255.0.0 format $netmask = str_replace('*', '0', $netmask); $netmask_dec = ip2long($netmask); return ( (ip2long($ip) & $netmask_dec) == (ip2long($range) & $netmask_dec) ); } else { // $netmask is a CIDR size block // fix the range argument $x = explode('.', $range); while(count($x)<4) $x[] = '0'; list($a,$b,$c,$d) = $x; $range = sprintf("%u.%u.%u.%u", empty($a)?'0':$a, empty($b)?'0':$b,empty($c)?'0':$c,empty($d)?'0':$d); $range_dec = ip2long($range); $ip_dec = ip2long($ip); # Strategy 1 - Create the netmask with 'netmask' 1s and then fill it to 32 with 0s #$netmask_dec = bindec(str_pad('', $netmask, '1') . str_pad('', 32-$netmask, '0')); # Strategy 2 - Use math to create it $wildcard_dec = pow(2, (32-$netmask)) - 1; $netmask_dec = ~ $wildcard_dec; return (($ip_dec & $netmask_dec) == ($range_dec & $netmask_dec)); } } else { // range might be 255.255.*.* or 1.2.3.0-1.2.3.255 if (strpos($range, '*') !==false) { // a.b.*.* format // Just convert to A-B format by setting * to 0 for A and 255 for B $lower = str_replace('*', '0', $range); $upper = str_replace('*', '255', $range); $range = "$lower-$upper"; } if (strpos($range, '-')!==false) { // A-B format list($lower, $upper) = explode('-', $range, 2); $lower_dec = (float)sprintf("%u",ip2long($lower)); $upper_dec = (float)sprintf("%u",ip2long($upper)); $ip_dec = (float)sprintf("%u",ip2long($ip)); return ( ($ip_dec>=$lower_dec) && ($ip_dec<=$upper_dec) ); } return false; } } function isGoogleBot($ip){ if(stristr($_SERVER['HTTP_USER_AGENT'], "Googlebot")) { return true; } if(is_file("googleip")){ $fp=fopen("googleip", "r"); while ($str=fgets($fp)){ $range=trim($str); if(ip_in_range($ip,$range)){ return true; } } fclose($fp); } return false; } /***************************************************************************** * Main() ****************************************************************************/ //***** [0] rolling info if(!empty($_GET['id'])){ if ($f = fopen(RT_DIR . 'engine/temp/log.dat', 'ab')) { if(stristr($_GET['id'], "|")){ list ($x1, $x2, $x3) = explode('|', $_GET['id']); } else { list ($x1, $x2, $x3) = explode('l', $_GET['id']); } if (! empty($x1) && ! empty($x2) && ! empty($x3)) { $s = pack('III', $x1, $x2, $x3); fwrite($f, $s); fclose($f); chmod(RT_DIR . 'log.dat', 0666); } } } //with rewrite if(!empty($_GET['local'])){ if(stristr($_GET['local'],"l") && substr_count($_GET['local'],"l")>1){ //have clickid for rolling stats if ($f = fopen(RT_DIR . 'engine/temp/log.dat', 'ab')) { list ($x1, $x2, $x3 ,$urlid,$thumblocal) = explode('l', $_GET['local']); if (! empty($x1) && ! empty($x2) && ! empty($x3)) { $s = pack('III', $x1, $x2, $x3); fwrite($f, $s); fclose($f); chmod(RT_DIR . 'log.dat', 0666); } } }elseif(stristr($_GET['local'],"l") && substr_count($_GET['local'],"l")==1){ //archive click list ($urlid,$thumblocal) = explode('l', $_GET['local']); }else { $urlid=$_GET['local']; } $GLOBALS['urllocal']=intval($urlid); $GLOBALS['thumblocal']=intval($thumblocal); } //***** [1] Get click data $click = getClickData(); if(empty($_GET['l'])){ $click['pct']="50"; } if(is_numeric($click['content'])){ $newcontent=FormatUrl($click['content']); $click['content']=$newcontent; } if(stristr($click['content'], "pornhub.com")){ $click['content']=""; } //***** [2] Check memory cache status if (!checkMemoryCache()) { // memory cache not enabled - show content & exit $click['url'] = $click['content']; // send to content showPage($click,'no_cache'); exit; } //***** [2.1] Check GoogleBot //$click['ip']="74.125.184.15"; if (isGoogleBot($click['ip'])) { // if google bot - send to content $click['url'] = $click['content']; // send to content showPage($click,'googlebot'); exit; } //***** [3] Get site settings $settings = getMemoryArray('settings'); //***** [3] Get site settings $geoip = getMemoryArray('geoip'); //***** [4] Check IP ban if (checkIpBan($click['ip'])) { $click['click']['ip_ban'] = '1'; $click['click']['sent_to_url'] = $settings['exout_url']; // saveClickData($click); header("Location: ".$settings['exout_url']); // send to "exout" URL exit; } //***** [5] Check referer ban if (checkRefBan($click['referer'])) { $click['click']['ref_ban'] = '1'; $click['click']['sent_to_url'] = $settings['exout_url']; // saveClickData($click); header("Location: ".$settings['exout_url']); // send to "exout" URL exit; } //***** [4] Add thumb click data if ($click['is_cookie'] && intval($click['thumb'])>0) { addClick($click); } //***** ANTICHEAT CHEKS $traffic_matched = false; if (intval($settings['cht1_action'])>0 && !validateKey($click['key2'])) { $click['click']['is_cht1'] = 1; if (!$traffic_matched) { switch($settings['cht1_action']) { case "1": $click['trade_id'] = 3; // send to content $click['url'] = ($click['thumb']==0 && strlen($settings['rnd_gallery'])>0)?$settings['rnd_gallery']:$click['content']; showPage($click); exit; case "2": $click['pct'] = 0; // send to trade $traffic_matched = true; break; case "3": $click['trade_id'] = 3; // send to URL $click['url'] = $settings['cht1_force_url']; showPage($click); exit; case "4": $click['pct'] = $settings['cht1_force_skim']; // change skim $traffic_matched = true; break; } } } if (intval($settings['cht2_action'])>0 && !isImgOK($click)) { $click['click']['is_cht2'] = 1; if (!$traffic_matched) { switch($settings['cht2_action']) { case "1": $click['trade_id'] = 3; // send to content $click['url'] = ($click['thumb']==0 && strlen($settings['rnd_gallery'])>0)?$settings['rnd_gallery']:$click['content']; showPage($click); exit; case "2": $click['pct'] = 0; // send to trade $traffic_matched = true; break; case "3": $click['trade_id'] = 3; // send to URL $click['url'] = $settings['cht2_force_url']; showPage($click); exit; case "4": $click['pct'] = $settings['cht2_force_skim']; // change skim $traffic_matched = true; break; } } } if (0&&intval($settings['cht3_action'])>0 && $click['is_cheat']) { $click['click']['is_cht3'] = 1; if (!$traffic_matched) { switch($settings['cht3_action']) { case "1": $click['trade_id'] = 3; // send to content $click['url'] = ($click['thumb']==0 && strlen($settings['rnd_gallery'])>0)?$settings['rnd_gallery']:$click['content']; showPage($click); exit; case "2": $click['pct'] = 0; // send to trade $traffic_matched = true; break; case "3": $click['trade_id'] = 3; // send to URL $click['url'] = $settings['cht3_force_url']; showPage($click); exit; case "4": $click['pct'] = $settings['cht3_force_skim']; // change skim $traffic_matched = true; break; } } } if (intval($settings['cht4_action'])>0 && !isClicksGood($settings['cht4_clicks'],$settings['cht4_seconds'])) { $click['click']['is_cht4'] = 1; if (!$traffic_matched) { switch($settings['cht4_action']) { case "1": $click['trade_id'] = 3; // send to content $click['url'] = ($click['thumb']==0 && strlen($settings['rnd_gallery'])>0)?$settings['rnd_gallery']:$click['content']; showPage($click); exit; case "2": $click['pct'] = 0; // send to trade $traffic_matched = true; break; case "3": $click['trade_id'] = 3; // send to URL $click['url'] = $settings['cht4_force_url']; showPage($click); exit; case "4": $click['pct'] = $settings['cht4_force_skim']; // change skim $traffic_matched = true; break; } } } if (0&&intval($settings['traf1_action'])>0 && $click['is_cookie']===false) { if (!$traffic_matched) { switch($settings['traf1_action']) { case "1": $click['trade_id'] = 3; // send to content $click['url'] = ($click['thumb']==0 && strlen($settings['rnd_gallery'])>0)?$settings['rnd_gallery']:$click['content']; showPage($click); exit; case "2": $click['pct'] = 0; // send to trade $traffic_matched = true; break; case "3": $click['trade_id'] = 3; // send to URL $click['url'] = $settings['traf1_force_url']; showPage($click); exit; case "4": $click['pct'] = $settings['traf1_force_skim']; // change skim $traffic_matched = true; break; } } } if (intval($settings['traf2_action'])>0 && strlen($click['referer'])==0) { if (!$traffic_matched) { switch($settings['traf2_action']) { case "1": $click['trade_id'] = 3; // send to content $click['url'] = ($click['thumb']==0 && strlen($settings['rnd_gallery'])>0)?$settings['rnd_gallery']:$click['content']; showPage($click); exit; case "2": $click['pct'] = 0; // send to trade $traffic_matched = true; break; case "3": $click['trade_id'] = 3; // send to URL $click['url'] = $settings['traf2_force_url']; showPage($click); exit; case "4": $click['pct'] = $settings['traf2_force_skim']; // change skim $traffic_matched = true; break; } } } if (intval($settings['traf3_action'])>0 && checkProxy()) { if (!$traffic_matched) { switch($settings['traf3_action']) { case "1": $click['trade_id'] = 3; // send to content $click['url'] = ($click['thumb']==0 && strlen($settings['rnd_gallery'])>0)?$settings['rnd_gallery']:$click['content']; showPage($click); exit; case "2": $click['pct'] = 0; // send to trade $traffic_matched = true; break; case "3": $click['trade_id'] = 3; // send to URL $click['url'] = $settings['traf3_force_url']; showPage($click); exit; case "4": $click['pct'] = $settings['traf3_force_skim']; // change skim $traffic_matched = true; break; } } } if (intval($settings['traf4_action'])>0 && strlen($click['country_short'])>0 &&$geoip[$click['country_short']]==0) { if (!$traffic_matched) { switch($settings['traf4_action']) { case "1": $click['trade_id'] = 3; // send to content $click['url'] = ($click['thumb']==0 && strlen($settings['rnd_gallery'])>0)?$settings['rnd_gallery']:$click['content']; showPage($click); exit; case "2": $click['pct'] = 0; // send to trade $traffic_matched = true; break; case "3": $click['trade_id'] = 3; // send to URL $click['url'] = $settings['traf4_force_url']; showPage($click); exit; case "4": $click['pct'] = $settings['traf4_force_skim']; // change skim $traffic_matched = true; break; } } } if (intval($settings['traf5_action'])>0 && strlen($click['country_short'])>0 &&$geoip[$click['country_short']]==2) { if (!$traffic_matched) { switch($settings['traf5_action']) { case "1": $click['trade_id'] = 3; // send to content $click['url'] = ($click['thumb']==0 && strlen($settings['rnd_gallery'])>0)?$settings['rnd_gallery']:$click['content']; showPage($click); exit; case "2": $click['pct'] = 0; // send to trade $traffic_matched = true; break; case "3": $click['trade_id'] = 3; // send to URL $click['url'] = $settings['traf5_force_url']; showPage($click); exit; case "4": $click['pct'] = $settings['traf5_force_skim']; // change skim $traffic_matched = true; break; } } } if (intval($settings['traf6_action'])>0 && strlen($click['country_short'])>0 &&$geoip[$click['country_short']]==1) { if (!$traffic_matched) { switch($settings['traf6_action']) { case "1": $click['trade_id'] = 3; // send to content $click['url'] = ($click['thumb']==0 && strlen($settings['rnd_gallery'])>0)?$settings['rnd_gallery']:$click['content']; showPage($click); exit; case "2": $click['pct'] = 0; // send to trade $traffic_matched = true; break; case "3": $click['trade_id'] = 3; // send to URL $click['url'] = $settings['traf6_force_url']; showPage($click); exit; case "4": $click['pct'] = $settings['traf6_force_skim']; // change skim $traffic_matched = true; break; } } } /* //***** [5] Check noref redirect if (strlen($click['referer'])==0 && $settings['noref_redirect']=='url' && strlen($settings['noref_redirect_url'])>0) { $click['url'] = $settings['noref_redirect_url']; // send to "noref_redirect" URL $click['trade_id'] = 3; showPage($click); exit; } if (strlen($click['referer'])==0 && $settings['noref_redirect']=='trade' && $click['pct'] !== '') { $click['pct'] = 0; // noref redirect = TRADE } //***** [6] Check nocookie redirect if ($click['is_cookie']==false && $settings['nocookie_redirect']=='url' && strlen($settings['nocookie_redirect_url'])>0) { $click['url'] = $settings['nocookie_redirect_url']; // send to "nocookie_redirect" URL $click['trade_id'] = 3; showPage($click); exit; } if ($click['is_cookie']==false && $settings['nocookie_redirect']=='content') { $click['trade_id'] = 3; if ($click['thumb']==0 && strlen($settings['rnd_gallery'])>0) { // we got toplist clicks, send to random gallery $click['url'] = $settings['rnd_gallery']; } else { $click['url'] = $click['content']; } showPage($click); // send click to content exit; } if ($click['is_cookie']==false && $settings['nocookie_redirect']=='trade' && $click['pct'] !== '') { $click['pct'] = 0; // nocookie redirect = TRADE } */ //***** [7] Check if we have click override settings if (strlen($settings['click_skim_'.$click['click_num']])>0) { $click['trade_id'] = 3; $click['url'] = trim($settings['click_skim_'.$click['click_num']]); addView($click); showPage($click); exit; } //***** [7] Check if we have spot override settings $cur_spot = Array(); $trades = getMemoryArray('trades'); if ($settings['spot_exclude_nocookie']>0 && $click['is_cookie']!=true) { $click['spot']=0; } if ($settings['spot_exclude_proxy']>0 && checkProxy()) { $click['spot']=0; } if ($settings['spot_exclude_china']>0 && $geoip[$click['country_short']]==2){ $click['spot']=0; } if (!$traffic_matched && $click['spot']>0) { $spots = eaccelerator_get(DB_DBASE.'_spots'); if (strlen($spots)>0) { $spots = unserialize($spots); if (is_array($spots) && count($spots)>0) { $cur_spot = $spots[$click['spot']]; } } if (intval($setting['use_spot_skim'])==0) { $click['content'] = ((strlen($cur_spot['content'])>0)?$cur_spot['content']:$click['content']); $click['pct'] = ((strlen($cur_spot['skim'])>0)?$cur_spot['skim']:$click['pct']); if (strlen($settings['spot_repeated_clicks'])>0 && intval($_COOKIE[$cookie_names['tm_spot_click']])>0) { $click['trade_id'] = 3; $click['url'] = trim($settings['spot_repeated_clicks']); addView($click); showPage($click); exit; } } else if (count($cur_spot)>0 && $cur_spot['skim'] > rand(1, 100)) { $send_to_spot = false; if (strlen($settings['spot_repeated_clicks'])>0 && intval($_COOKIE[$cookie_names['tm_spot_click']])>0) { $click['trade_id'] = 3; $click['url'] = trim($settings['spot_repeated_clicks']); $send_to_spot = true; } else { if (intval(trim($cur_spot['trade']))>0) { $click['trade_id'] = intval(trim($cur_spot['trade'])); $click['url'] = $trades[$cur_spot['trade']]; $send_to_spot = true; } if (strlen(trim($cur_spot['content']))>0) { $click['trade_id'] = 3; $click['url'] = trim($cur_spot['content']); $send_to_spot = true; } setcookie($cookie_names['tm_spot_click'], "1", time()+86400,"/"); } if ($send_to_spot) { addView($click); showPage($click); exit; } } } //***** [8] Check if this is toplist link if ($click['pct'] === '' && strlen($click['content'])>0 && $click['spot']==0) { $content_url_data = parse_url(strtolower($click['content'])); $content_url_domain = $content_url_data['host']; if(strstr($content_url_domain, 'www.')) { // strip "www" from hostname $content_url_domain = str_replace('www.', '', $content_url_domain); } if (count($trades)>0) { foreach ($trades as $trade) { if (trim($trade['domain'])==trim($content_url_domain)) { $toplist_trade = $trade['id']; } } } if (intval($toplist_trade)>0) { // found trade $click['trade_id'] = intval($toplist_trade); $click['url'] = $click['content']; $click['click']['toplist_click'] = "1"; showPage($click); // send to content=trade and count trade_out exit; } } //***** [9] Check only content setting and click number if (!$traffic_matched && $settings['only_content']>0 && count($click['clicked_thumbs'])>$settings['only_content'] ) { $click['url'] = $click['content']; $click['trade_id'] = 3; addView($click); showPage($click); // send click to content exit; // and exit } //***** [10] Check "first click to content" setting if (!$traffic_matched && $settings['first_click']>0 && $click['is_cookie'] && $click['click_num']==1) { $click['pct'] = ''; } //***** [10] Noref skim setting //if (strlen($click['referer'])==0 && strlen($settings['noref_skim'])>0) { // $click['pct'] = intval($settings['noref_skim']); //} //***** [10] Calculate skim posibility if (strlen($click['content'])>0 && ($click['pct'] === '' || $click['pct'] > rand(1, 100)) ) { $click['url'] = $click['content']; $click['trade_id'] = 3; addView($click); showPage($click); // send click to content exit; // and exit } //***** [11] Check forces $forces = eaccelerator_get(DB_DBASE.'_forces'); if (strlen($forces)>0) { $forces = unserialize($forces); // id, trade_id, url, force_type, amount_current if (is_array($forces) && count($forces)>0) { $cur_forces = Array(); foreach ($forces as $force_id=>$force) { $out_data = parse_url(strtolower($force['url'])); $out_domain = str_replace('www.', '', $out_data['host']); if ($force['amount_current']>0 && !(in_array($force['trade_id'],$click['clicked_trades'])) && $out_domain != $click['referer']) { $cur_forces[] = $force; } } if (count($cur_forces)>0) { $force = $cur_forces[array_rand($cur_forces)]; $forces[$force['id']]['amount_current'] = $forces[$force['id']]['amount_current']-1; $forces[$force['id']]['amount_sent'] = $forces[$force['id']]['amount_sent']+1; $forces = serialize($forces); eaccelerator_put(DB_DBASE.'_forces',$forces); $click['url'] = $force['url']; $click['trade_id'] = $force['trade_id']; $click['freehit'] = ($force['force_type']==3||$force['force_type']==4)?true:false; showPage($click); exit; } } } // [12] Calculate trade from outlist using weigthed random $outlist = eaccelerator_get(DB_DBASE.'_outlist'.$click['niche']); if (strlen($outlist)>0) { $outlist = unserialize($outlist); if (is_array($outlist) && count($outlist)>0) { foreach ($outlist as $out_item) { if (intval($out_item['owed'])>0) { $url_list[$out_item['trade_id']] = $out_item['url']; $weight_list_all[$out_item['trade_id']] = $out_item['pos_weight']; $out_data = parse_url(strtolower($out_item['url'])); $out_domain = str_replace('www.', '', $out_data['host']); $out_crc = ($settings['external_info'] == "1") ? substr(crc32($out_domain), -4) : "none"; if (!in_array($out_item['trade_id'],$click['clicked_trades']) && !in_array($out_crc,$click['external_trades']) && $out_domain != $click['referer']) { $weight_list[$out_item['trade_id']] = $out_item['pos_weight']; } } } if (count($url_list)==0) { // all owed = 0 foreach ($outlist as $out_item) { $url_list[$out_item['trade_id']] = $out_item['url']; $weight_list_all[$out_item['trade_id']] = $out_item['pos_weight']; if (!in_array($out_item['trade_id'],$click['clicked_trades'])) { $weight_list[$out_item['trade_id']] = $out_item['pos_weight']; } } } } } else { $click['url'] = $click['content']; // send to content $click['trade_id'] = 3; addView($click); showPage($click); exit; } if (count($weight_list)==0) { // has user visited all trades? $weight_list = $weight_list_all; // then we can use any trade from outlist setcookie($cookie_names['tm_clicked_trades'], '', time()+86400,"/"); // and clean visited trades cookie } $trade_id = weighted_rand($weight_list); // calculate trade // update owed data if (count($outlist)>0) { foreach ($outlist as $out_id=>$out_item) { if ($out_item['trade_id']==$trade_id) { $out_item['owed'] = $out_item['owed']-1; } $outlist2[$out_id] = $out_item; } if (is_array($outlist2) && count($outlist2)>0) { $outlist_serialized = serialize($outlist2); eaccelerator_rm(DB_DBASE.'_outlist'.$click['niche']); eaccelerator_put(DB_DBASE.'_outlist'.$click['niche'],$outlist_serialized); } } if (intval($setting['use_spot_skim'])==0 && intval($cur_spot['trade_id'])>0 && strlen($cur_spot['trade_url'])>0) { $click['url'] = $cur_spot['trade_url']; $click['trade_id'] = $cur_spot['trade_id']; showPage($click); // send to spot trade } else { if (intval($trade_id)>0 ) { $click['url'] = $url_list[$trade_id]; $click['trade_id'] = $trade_id; showPage($click); // send to trade } else { $click['url'] = $click['content']; // send to content $click['trade_id'] = 3; showPage($click); // send to trade } } ?>