v_country = !empty($_SESSION["gcu_country"])?$_SESSION["gcu_country"]:$check_country; $this->v_ip = $this->getIp(); $this->v_Browser = $this->getBrowser(); //$this->v_country = $this->findCityByIp($this->v_ip); $this->v_referer = $this->getFromPage(); $this->v_Client = $this->v_isMobile(); $this->v_curPageURL = $this->curPageURL(); $this->v_site_server = $this->get_site_server(); $this->accept_language = $this->get_accept_language(); $this->costm_ip_score = $costm_ip_score; $this->check_key = $check_key; $this->check_country = $check_country; $_SESSION["gcu_country"] = $this->v_country; $_SESSION["gcu_Client"] = $this->v_Client; $_SESSION["gcu_ip"] = $this->v_ip; $_SESSION["gcu_Browser"] = $this->v_Browser; } /** * 调用远程 cloak API 判定 * * @return array|null API 解码结果;前置条件不足时 null */ public function send_visitor_Info_xyz() { if(!empty($_REQUEST["send"])&& $_REQUEST["send"] ==1) { print_r($jsonData); exit(); } if(!empty($this->v_ip)) { $return = $this -> cloak_check_curl(); if (!is_array($return)) { $return = ['result' => false, 'reason' => 'API响应异常', 'country' => $this->v_country]; } $this->check_result = !empty($return['result']) ? "true" : "false"; $this->v_country = isset($return['country']) ? $return['country'] : $this->v_country; $this->v_reason = cloak_api_reason($return, $this->check_result); return $return; } return null; } function cloak_check_curl() { $headers = browser_headers(); // $visit_domain = str_replace('www.', '', $_SERVER['HTTP_HOST']); // 当前网站域名 // $visit_domain = (is_https() ? "https://" : "http://"). $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI']; $jsonData['id'] = $this->costm_ip_score; $jsonData['ip'] = $this->v_ip; $jsonData['domain'] = $this->v_curPageURL; $jsonData['country_code'] = $this->check_country; //设置该参数后,将替换"广告策略》访问者地理位置>过滤"的设置,填写国家代码,多个用逗号分隔,如:US,GB,CA,AU,IE,NZ $jsonData['referer'] = get_SERVER_value('HTTP_REFERER'); $jsonData['headers'] = json_encode($headers); $ch = curl_init('www.tiktokba.com/cloak/byApi'); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_IPRESOLVE, CURL_IPRESOLVE_V4); curl_setopt($ch, CURLOPT_USERAGENT, get_SERVER_value('HTTP_USER_AGENT')); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); curl_setopt($ch, CURLOPT_ENCODING, ""); //Enables compression curl_setopt($ch, CURLOPT_HTTPHEADER, ["Content-type: application/json"]); curl_setopt($ch, CURLOPT_HTTPHEADER, ["escloak-key: {$this->check_key}"]); curl_setopt($ch, CURLOPT_POST, true); curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($jsonData)); curl_setopt($ch, CURLOPT_HEADERFUNCTION, "forward_response_cookies"); //Forward response's cookies to visitor if ($_COOKIE) {//Forward visitor's cookie to our server curl_setopt($ch, CURLOPT_COOKIE, encode_visitor_cookies()); } $return = curl_exec($ch); if ($return == false) { $curl_error = curl_error($ch); curl_close($ch); return ['result' => false, 'reason' => 'API请求失败:' . $curl_error, 'country' => '']; } curl_close($ch); $decoded = json_decode($return, true); if (!is_array($decoded)) { return ['result' => false, 'reason' => 'API响应失败,请检查API密钥以及广告策略 ID', 'country' => '']; } return $decoded; } // api.ttt.sh API查询国家代码 public function get_ip_country($client_ip) { $str = ""; //$url = "https://api.ttt.sh/ip/qqwry/".$client_ip."?type=addr"; //$str = file_get_contents($url); return $str; } public function set_visit_md5_code($code) { $this->visit_md5_code = $code; } public function get_visit_md5_code() { $domain = str_replace("www.","",$_SERVER['HTTP_HOST']); $time = date("YmdHis"); $ip = $this->getIp(); $this->visit_md5_code = substr(md5($domain.$time.$ip) , 0 , 12 ); return $this->visit_md5_code; } //获取访客ip public function getIp($type = 0) { $type = $type ? 1 : 0; static $ip = NULL; if ($ip !== NULL) return $ip[$type]; if (isset($_SERVER['HTTP_CF_CONNECTING_IP'])) { // 使用cloudflare 转发的IP地址 $ip = $_SERVER['HTTP_CF_CONNECTING_IP']; } else { if (getenv('HTTP_CLIENT_IP') && strcasecmp(getenv('HTTP_CLIENT_IP'), 'unknown')) { $ip = getenv('HTTP_CLIENT_IP'); } elseif (getenv('HTTP_X_FORWARDED_FOR') && strcasecmp(getenv('HTTP_X_FORWARDED_FOR'), 'unknown')) { $ip = getenv('HTTP_X_FORWARDED_FOR'); } elseif (getenv('REMOTE_ADDR') && strcasecmp(getenv('REMOTE_ADDR'), 'unknown')) { $ip = getenv('REMOTE_ADDR'); } elseif (isset($_SERVER['REMOTE_ADDR']) && $_SERVER['REMOTE_ADDR'] && strcasecmp($_SERVER['REMOTE_ADDR'], 'unknown')) { $ip = $_SERVER['REMOTE_ADDR']; } } // if (isset($_SERVER['HTTP_X_FORWARDED_FOR'])) { // $arr = explode(',', $_SERVER['HTTP_X_FORWARDED_FOR']); // $pos = array_search('unknown',$arr); // if(false !== $pos) unset($arr[$pos]); // $ip = trim($arr[0]); // }elseif (isset($_SERVER['HTTP_CLIENT_IP'])) { // $ip = $_SERVER['HTTP_CLIENT_IP']; // }elseif (isset($_SERVER['REMOTE_ADDR'])) { // $ip = $_SERVER['REMOTE_ADDR']; // } // IP地址合法验证 //$long = sprintf("%u",ip2long($ip)); //$ip = $long ? array($ip, $long) : array('0.0.0.0', 0); return $ip; } //客户当前浏览的页面 url(浏览器实际访问地址,含正确 scheme 与 query) function curPageURL() { return cloak_current_request_url(); } //根据ip获取城市、网络运营商等信息 public function findCityByIp($ip){ $country_res = @file_get_contents("http://ip.taobao.com/service/getIpInfo.php?ip=".$ip); $country_json = json_decode($country_res,true); // Array ( [code] => 0 [data] => Array ( [ip] => 104.223.98.4 [country] => 美国 [area] => [region] => 德克萨斯 [city] => 达拉斯 [county] => XX [isp] => XX [country_id] => US [area_id] => [region_id] => US_143 [city_id] => US_1099 [county_id] => xx [isp_id] => xx ) ) $country = $country_json["data"]["country"]; return $country; } //site_server function get_site_server() { $dqml=getcwd(); $dpml_ary = explode(DIRECTORY_SEPARATOR, $dqml); $dqml_str = $dpml_ary[2]; $dqml_str = substr($dqml_str,0,4); return $dqml_str; } //字符串截取函数 function ip_p_substr($p_bof,$p_eof,$p_str) { $p_1=explode($p_bof,$p_str); $p_e=strpos($p_1[1],$p_eof); $p_0=substr($p_1[1],0,$p_e); return $p_0; } //获取用户浏览器类型 public function getBrowser(){ $agent=$_SERVER["HTTP_USER_AGENT"]; if(strpos($agent,'MSIE')!==false || strpos($agent,'rv:11.0')) //ie11判断 return "ie"; else if(strpos($agent,'Firefox')!==false) return "firefox"; else if(strpos($agent,'Chrome')!==false) return "chrome"; else if(strpos($agent,'Opera')!==false) return 'opera'; else if((strpos($agent,'Chrome')==false)&&strpos($agent,'Safari')!==false) return 'safari'; else return 'unknown'; } //获取网站来源 public function getFromPage(){ if(empty($_SERVER['HTTP_REFERER'])) { return NULL; } else return $_SERVER['HTTP_REFERER']; } function get_accept_language() { $lang = ""; if(!empty($_SERVER['HTTP_ACCEPT_LANGUAGE']) && isset($_SERVER['HTTP_ACCEPT_LANGUAGE']) ) { $accept_language = substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 4); //只取前4位,这样只判断最优先的语言。如果取前5位,可能出现en,zh的情况,影响判断。 if (preg_match("/zh-c/i", $accept_language)) $lang = "Chinese"; else if (preg_match("/zh/i", $accept_language)) $lang = "Chinese_Trad"; else if (preg_match("/en/i", $accept_language)) $lang = "English"; else if (preg_match("/fr/i", $accept_language)) $lang = "French"; else if (preg_match("/de/i", $accept_language)) $lang = "German"; else if (preg_match("/jp/i", $accept_language)) $lang = "Japanese"; else if (preg_match("/ko/i", $accept_language)) $lang = "Korean"; else if (preg_match("/es/i", $accept_language)) $lang = "Spanish"; else if (preg_match("/sv/i", $accept_language)) $lang = "Swedish"; else $lang = $_SERVER["HTTP_ACCEPT_LANGUAGE"]; } return $lang; } /*移动端判断*/ function v_isMobile() { // 如果有HTTP_X_WAP_PROFILE则一定是移动设备 if (isset ($_SERVER['HTTP_X_WAP_PROFILE'])) { return true; } // 如果via信息含有wap则一定是移动设备,部分服务商会屏蔽该信息 if (isset ($_SERVER['HTTP_VIA'])) { // 找不到为flase,否则为true return stristr($_SERVER['HTTP_VIA'], "wap") ? true : false; } // 脑残法,判断手机发送的客户端标志,兼容性有待提高 if (isset ($_SERVER['HTTP_USER_AGENT'])) { $clientkeywords = array ('nokia', 'sony', 'ericsson', 'mot', 'samsung', 'htc', 'sgh', 'lg', 'sharp', 'sie-', 'philips', 'panasonic', 'alcatel', 'lenovo', 'iphone', 'ipod', 'blackberry', 'meizu', 'android', 'netfront', 'symbian', 'ucweb', 'windowsce', 'palm', 'operamini', 'operamobi', 'openwave', 'nexusone', 'cldc', 'midp', 'wap', 'mobile' ); // 从HTTP_USER_AGENT中查找手机浏览器的关键字 if (preg_match("/(" . implode('|', $clientkeywords) . ")/i", strtolower($_SERVER['HTTP_USER_AGENT']))) { return "Mobile"; } } // 协议法,因为有可能不准确,放到最后判断 if (isset ($_SERVER['HTTP_ACCEPT'])) { // 如果只支持wml并且不支持html那一定是移动设备 // 如果支持wml和html但是wml在html之前则是移动设备 if ((strpos($_SERVER['HTTP_ACCEPT'], 'vnd.wap.wml') !== false) && (strpos($_SERVER['HTTP_ACCEPT'], 'text/html') === false || (strpos($_SERVER['HTTP_ACCEPT'], 'vnd.wap.wml') < strpos($_SERVER['HTTP_ACCEPT'], 'text/html')))) { return "Mobile"; } } return "PC"; } }