= $value[0] && $current_time < $value[1]){ $db_access_flg = false; } } //高負荷対応 $isFirefoxAndChrome=false; if(strpos($_SERVER["HTTP_USER_AGENT"],"Firefox")) $isFirefoxAndChrome=true; else if(strpos($_SERVER["HTTP_USER_AGENT"],"Chrome")) $isFirefoxAndChrome=true; else if(strpos($_SERVER["HTTP_USER_AGENT"],"MSIE")) $isFirefoxAndChrome=false; //KIKAN_UNNYOU-1353 【レコメンド機能】スマホサイト適用 $isSmartPhoneBrowser = false; // iPhoneかどうか if (strpos($_SERVER["HTTP_USER_AGENT"], "iPhone") !== false) { $isSmartPhoneBrowser = true; } // Androidかどうか if (strpos($_SERVER["HTTP_USER_AGENT"], "Android") !== false) { // Mobileが含まれていた場合には、タブレットではない。 if (strpos($_SERVER["HTTP_USER_AGENT"], "Mobile") !== false) { $isSmartPhoneBrowser = true; } } $time = time(); defined('APPLICATION_PATH') || define('APPLICATION_PATH', realpath(dirname(__FILE__) . '/../application')); // Define application environment defined('APPLICATION_ENV') || define('APPLICATION_ENV', (getenv('APPLICATION_ENV') ? getenv('APPLICATION_ENV') : 'production')); // Ensure library/ is on include_path set_include_path(implode(PATH_SEPARATOR, array( realpath(APPLICATION_PATH . '/library'), realpath(APPLICATION_PATH.'/commons'), realpath(APPLICATION_PATH.'/include'), get_include_path(), ))); require_once 'AppDefinition.php'; require_once 'DbManager.class.php'; $DB= DbManager::getConnection('mast_db'); require_once 'LogClass.class.php'; // パラメータチェック require 'validate.php'; $iid = validate_var($_GET['iid'], '/^[0-9]*$/'); $aid = validate_var($_GET['aid'], '/^[0-9]*$/'); $pfg = validate_var($_GET['pfg'], '/^[0-9]*$/'); $sid = validate_var($_GET['sid'], '/^[0-9]*$/'); $spr = validate_var($_GET['pr'], '/^[0-9]*$/'); //#3600 require '../application/include/AppDefinition.php'; $logger = new LogClass("click", "Ymd"); $savestop_logger = new LogClass("savestop", "Ymd"); //高負荷対応 //add by kongpei http://redmine.hineri.jp/issues/2563 $ini_array = parse_ini_file(APPLICATION_PATH."/configs/block_aid_list.ini"); $maxtime = $ini_array['max_time']?$ini_array['max_time']:3; $block_aid = explode(',',$ini_array['aid_list']); // 特定商品に対する不正アフィリエイター対応 if ($aid == '5151' && $iid == '50899') { header("Location: /"); exit; } $clicktime = $_COOKIE["ClickTime"]; if(time()>($clicktime+$maxtime)){ setcookie("ClickTime",time(),time()+60*60*24*90,'/'); // KIKAN_UNNYOU-9087 }else{ $host = getenv("REMOTE_HOST"); $ip = $_SERVER['REMOTE_ADDR']; if ($host == null || $host == $ip) $host = gethostbyaddr($ip); $logger->write(sprintf("[click_save]%s,%s;",$iid,$aid)); } //end 2011.10.13 $interval = 10; // クリック加算する間隔(秒) //KIKAN_UNNYOU-2322 アフィリリンク切れの場合の挙動 // KIKAN_UNNYOU-0000 SQLチューニング $item_recs = $DB->fetchRow(sprintf(" SELECT id_i, pub_tab_id_i, status_id_i, check_id_i, category1_id_i, url_txt, mo_url_txt, price_i, afi_rate_i, afi_price_i, parent_afi_rate_i, parent_afi_price_i, first_afi_rate_i, first_afi_price_i FROM item_tab WHERE id_i = '%d'", $iid)); $afi_recs = $DB->fetchRow(sprintf("SELECT id_i, type_id_i FROM afi_tab WHERE id_i = '%d' AND status_id_i = 1", $aid)); $link_recs = $DB->fetchRow(sprintf(" SELECT id_i, judge_id_i, afi_rate_i, afi_price_i, afi_free_rate_i, afi_free_price_i, first_afi_rate_i, first_afi_price_i FROM link_tab WHERE item_tab_id_i = '%d' AND afi_tab_id_i = '%d'", $item_recs['id_i'], $afi_recs['id_i'])); $hitNum = $link_recs && $link_recs['judge_id_i'] == 2 ? 1 : 0; // エラーチェック //KIKAN_UNNYOU-4905 タイムアウトページの改修 start if(!$item_recs){ header("Location: /buy/timeout?t=2"); exit; }elseif($item_recs['status_id_i'] == 0 || $item_recs['check_id_i'] != 2){ header("Location: /buy/timeout?t=1&c=" . $item_recs['category1_id_i'] . '&iid=' . $item_recs['id_i']); exit; }elseif(strlen($aid) && !$afi_recs || $hitNum){ header("Location: /buy/timeout?t=3&iid=" . $item_recs['id_i']); exit; } //KIKAN_UNNYOU-4905 タイムアウトページの改修 end // A8経由 if(!strlen($aid)){ setcookie(sprintf("CCLICKS[%d]", $item_recs['id_i']), 1, $time+60*60*24*90,'/'); // KIKAN_UNNYOU-9087 header(sprintf("Location: %s", $item_recs['url_txt'])); exit; } //KIKAN_UNNYOU-2106 アフィリ使用する→アフィリ使用しないに変更した際のアフィリリンクの有効性について if (empty($aid) || empty($iid) || empty($item_recs['pub_tab_id_i'])) { $link_tab["num"] = 0; } else { // KIKAN_UNNYOU-0000 SQLチューニング $link_tab["num"] = $link_recs && ($link_recs['afi_rate_i'] > 0 || $link_recs['afi_price_i'] > 0 || $link_recs['afi_free_rate_i'] > 0 || $link_recs['afi_free_price_i'] > 0 || $link_recs['first_afi_rate_i'] > 0 || $link_recs['first_afi_price_i'] > 0) ? 1 : 0; } // end of KIKAN_UNNYOU-2106 アフィリ使用する→アフィリ使用しないに変更した際のアフィリリンクの有効性について if ($link_tab["num"] < 1 && ($item_recs['afi_rate_i'] == null && $item_recs['afi_price_i'] == null && $item_recs['parent_afi_rate_i'] == null && $item_recs['parent_afi_price_i'] == null && $item_recs['first_afi_rate_i'] == null && $item_recs['first_afi_price_i'] == null)) { $privilege_recs = ''; //KIKAN_UNNYOU-2106 アフィリ使用する→アフィリ使用しないに変更した際のアフィリリンクの有効性について $afi_recs['id_i'] = false; $atime = time()-60*60*24*365; if($isFirefoxAndChrome){ setcookie("CAFI_TAB_ID_I", false, $atime, '/',HTTPS_HOST); } else { setcookie("CAFI_TAB_ID_I", false, $atime, '/'); } //end of KIKAN_UNNYOU-2106 アフィリ使用する→アフィリ使用しないに変更した際のアフィリリンクの有効性について } else { // KIKAN_UNNYOU-0000 SQLチューニング if($pfg) { $row = $DB->fetchRow(sprintf(" SELECT id_i FROM privilege_tab WHERE item_tab_id_i = '%d' AND afi_tab_id_i = '%d'", $item_recs['id_i'], $afi_recs['id_i'])); $privilege_recs = $row ? $row : ''; } else { $privilege_recs = ''; } } /* ######################################################################## * 不正対策:KIKAN_UNNYOU-1377 アフィリエイターIDが誤反映されないように修正 * ######################################################################## * ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ */ // 不正疑惑のあるクライアントからのアクセスの場合 // COOKIEのID情報を上書きせずに販売ページへ遷移させる $salt = 1377; if(isset($_COOKIE["ClickCount"])) { setcookie("ClickCount", false, $time-60*60*24*365, '/', HTTPS_HOST); header(sprintf("Location: %s", $item_recs['url_txt'])); exit; } setcookie(crypt($iid, $salt), crypt($aid, $salt), $time+60*60, '/',HTTPS_HOST); /* ↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑ * ######################################################################## * 不正対策:KIKAN_UNNYOU-1377 アフィリエイターIDが誤反映されないように修正 * ######################################################################## */ if($afi_recs['type_id_i']==1){ // 通常アフィリ if(!in_array($aid,$block_aid)){ //KIKAN_UNNYOU-4386 アフィリエイトIDの再振り分け(同一キーでの重複登録)start setcookie("CAFI_TAB_ID_I", $afi_recs['id_i'], $time+60*60*24*90, '/'); // KIKAN_UNNYOU-9087 //KIKAN_UNNYOU-4386 アフィリエイトIDの再振り分け(同一キーでの重複登録) end } // サイトID if(!in_array($aid,$block_aid)){ setcookie("CSITE_ID_TXT", $sid, $time+60*60*24*90,'/'); // KIKAN_UNNYOU-9087 } // 特典アフィリ if(!in_array($aid,$block_aid)){ setcookie("CPRIVILEGE_TAB_ID_I", $privilege_recs['id_i'], $time+60*60*24*90,'/'); // KIKAN_UNNYOU-9087 } $url_txt = $item_recs['url_txt']; if(!$url_txt){ $url_txt = '/item/detail?id=' . $item_recs['id_i']; } // KIKAN_UNNYOU-1085 【レコメンド機能】[開発]閲覧情報に紐づくレコメンド require_once 'App/BrowseHist.php'; $browse_hist = new App_BrowseHist(); //$browse_hist->saveBrowseHist($item_recs['id_i'], $afi_recs['id_i']); $browse_hist->saveBrowseHist($item_recs['id_i'], $afi_recs['id_i'], $isSmartPhoneBrowser);//KIKAN_UNNYOU-1353 【レコメンド機能】スマホサイト適用 // 20161019 kamikawa //---------------- 不正クリック対策 ----------------// # 前回クリックから、n秒以内のクリックは無効 if(empty($_COOKIE['PREV_CLICK_TIME'])){ if(!in_array($aid,$block_aid)){ setcookie("PREV_CLICK_TIME", "interval", $time + $interval,'/'); } }else{ header(sprintf("Location: ".$url_txt)); exit; } //--------------------------------------------------// }elseif($afi_recs['type_id_i']==2){ ini_set("session.use_cookies", 0); session_start(); // 通常アフィリ session_register("SMOAFI_TAB_ID_I"); $SMOAFI_TAB_ID_I = $afi_recs['id_i']; // 特典アフィリ session_register("SMOPRIVILEGE_TAB_ID_I"); $SMOPRIVILEGE_TAB_ID_I = $privilege_recs['id_i']; //@todo change the mobile url if(strlen($item_recs['mo_url_txt'])){ $url_txt = sprintf("%s%s%skey=%s", $item_recs['mo_url_txt'], ereg("^https?://.*/.*$", $item_recs['mo_url_txt']) ? '' : '/', !ereg("\?", $item_recs['mo_url_txt']) ? "?" : "&", session_id()); }else{ $url_txt = sprintf("moItem.php?com=detail&id_i=%d&%s", $item_recs['id_i'], SID); } } // afi_click2_tab $time_i = mktime(0, 0, 0, date("m", $time), date("d", $time), date("Y", $time)); // KIKAN_UNNYOU-0000 SQLチューニング $select_sql = sprintf("SELECT id_i FROM afi_click2_tab WHERE item_tab_id_i = '%d' AND afi_tab_id_i = '%d' AND time_i = '%d'", $item_recs['id_i'], $afi_recs['id_i'], $time_i); $afi_click2_recs = $DB->fetchRow($select_sql); if(!$afi_click2_recs){ $insert_sql = sprintf("INSERT INTO afi_click2_tab (item_tab_id_i, afi_tab_id_i, pub_tab_id_i, time_i, count_i, utime_i) VALUES('%d', '%d', '%d', '%d', '1', '%d')", $item_recs['id_i'], $afi_recs['id_i'], $item_recs['pub_tab_id_i'], $time_i, $time); if($db_access_flg){ //高負荷対応 $DB->query($insert_sql); }else{ $savestop_logger->write(sprintf("[select]%s:[insert]%s;",$select_sql,$insert_sql)); } }else{ if(( $afi_click2_recs['id_i'] == '106548751' || $afi_click2_recs['id_i'] == '106470941' || $afi_click2_recs['id_i'] == '106470739' || $afi_click2_recs['id_i'] == '105322981' ) ){ die; } /* if(getEnvironment() == 'production') { //---------------- 不正クリック対策 ----------------// // pg_stat_activityのwaitingの件数を調べる。 $pg_stat = $DB->fetchAll("select substr(current_query, length(current_query)-9) as aaa, count(*) from pg_stat_activity where waiting='t' group by aaa having count(*)>50"); $cnt = count($pg_stat)>3 ? 10 : 50; // pg_stat_activityのwaitingの件数を調べる。 $pg_stat = $DB->fetchAll("select count(*) as count from pg_stat_activity where current_query <> '' and waiting='t' and current_query like '%".$afi_click2_recs['id_i']."%'"); // 待ち状態のクエリが100件以上あったら更新しない。 if($pg_stat[0]['count'] > $cnt){ die; } //---------------- 不正クリック対策 ----------------// } */ $update_sql = sprintf("UPDATE afi_click2_tab SET count_i = count_i + 1, utime_i = %d WHERE id_i = %d", $time, $afi_click2_recs['id_i']); if($db_access_flg){ //高負荷対応 $DB->query($update_sql); }else{ $savestop_logger->write(sprintf("[select]%s:[update]%s;",$select_sql,$update_sql)); } } //#3600 if($spr==1){ $ad = $DB->fetchAll("SELECT * FROM ad_tab WHERE id_i= 102"); if(count($ad)>0){ $unscontent = unserialize($ad[0]['content_txt']); if(($unscontent['link_url']) && ($iid ==$unscontent['item_id'])){ header(sprintf("Location: %s", $unscontent['link_url'])); exit; } } } //end #3600 header(sprintf("Location: %s", $url_txt)); exit;