'count_visitor.php');
$DEFAULT_TAGPART_ARRAY = array();
// 指定されたCP_CODEを持つ広告情報を設定ファイルから読み込む
// @param co_code string 対象のco_code(キャンペーンエディターのcpid)
// データベースは参照していないのでキャンペーンエディターで「再生成」されるまでは
// 反映されないので注意してください。
function load_cp_info($cp_code)
{
global $DEFAULT_TEMPLATE_FILE, $DEFAULT_ADDPART_ARRAY, $DEFAULT_TAGPART_ARRAY;
// 個人アフィリエイト対応
if (strpos($cp_code, 'a_') === 0) {
$cpid = 'affiliate';
} else {
$cpid = $cp_code;
}
// Yahoo Premium対応
if (($pos = strpos($cp_code, ':')) !== false) {
$data = explode(':', $cp_code);
$cpid = $data[0];
}
$cp_info = array('cp_code' => '');
$cp_file_data = file(dirname(__FILE__).'/files/campaign_list.txt');
foreach ($cp_file_data as $data) {
$param = explode(',', $data);
if ($cpid == trim($param[0])) {
$add_part_name = array();
$add_part_name[1] = trim($param[5]);
$add_part_name[2] = trim($param[6]);
$add_part_name[3] = trim($param[7]);
$add_part_name[4] = trim($param[8]);
$add_part_name[5] = trim($param[9]);
$add_part_name[6] = trim($param[10]);
$tag_part = array();
$tag_part[1] = trim($param[11]);
$app_link_ios = trim($param[12]);
$app_link_android = trim($param[13]);
$cp_info['cp_code' ] = $cp_code;
$cp_info['cp_point' ] = trim($param[1]);
$cp_info['cp_name' ] = trim($param[2]);
$cp_info['cp_portal' ] = trim($param[3]);
$cp_info['template_name'] = trim($param[4]);
$cp_info['add_part_name'] = $add_part_name;
$cp_info['tag_part' ] = $tag_part;
$cp_info['tp_code' ] = '';
$cp_info['extra' ] = array();
if ($app_link_ios && $app_link_ios != '') {
$cp_info['app_link_ios'] = $app_link_ios;
}
if ($app_link_android && $app_link_android != '') {
$cp_info['app_link_android'] = $app_link_android;
}
if ($cp_info['template_name'] == '') {
$cp_info['template_name'] = $DEFAULT_TEMPLATE_FILE;
$cp_info['add_part_name'] = $DEFAULT_ADDPART_ARRAY;
$cp_info['tag_part' ] = $DEFAULT_TAGPART_ARRAY;
}
// 特殊テンプレート対応
$cp_info = load_group_template($cp_info);
$cp_info = load_dorekiru_template($cp_info);
$cp_info = load_new_template($cp_info);
break;
}
}
return $cp_info;
}
// 指定されたCP_CODEと同じグループから広告情報を読み込む
// @param gid string 対象のグループCP_CODE
// グループIDは yahoo_ad23 のような形で指定され、
// 登録されている広告情報一覧から、最後の1文字以外は一致する広告を
// 全てリストアップし、そのリストの中からラウンドロビンで選択された
// 広告の設定情報を返却する。
// 先ほどの例からいうと、yahoo_ad23A, yahoo_ad23B, yahoo_ad23C, yahoo_ad23D
// の4つが登録されていた場合、その4つを閲覧されるたびに順繰りに表示する
function load_cp_info_by_group($gid)
{
if (strpos($gid, 'tid') === 0) {
$target = db()->query("select cp_code from gid_group where gid=$1 and enable='t'", $gid);
if (!$target) {
return load_cp_info($gid);
}
$win = db()->query_value("select win from gid_group_settings where gid=$1", $gid);
if ($win) {
return load_cp_info($win);
}
$expects = array();
foreach ($target as $cp) {
$expects[] = $cp['cp_code'];
}
$func = function($cpid) use (&$expects) {
foreach ($expects as $expect) {
if ($expect == $cpid) {
return true;
}
}
return false;
};
} else {
$gidlen = strlen($gid) + 1;
$func = function($cpid) use ($gid, $gidlen) {
if (preg_match('/'.$gid.'./', $cpid) && ($gidlen == strlen($cpid))) {
return true;
}
return false;
};
}
$default = null;
$cp_id_table = array();
$cp_file_data = file(dirname(__FILE__).'/files/campaign_list.txt');
foreach ($cp_file_data as $data) {
$param = explode(',', $data);
$cpid = trim($param[0]);
if ($func($cpid)) {
array_push($cp_id_table, $cpid);
}
}
if (($id_num = count($cp_id_table)) == 0) {
return load_cp_info($gid);
}
// main
$fp_lock = @fopen("./data/counter_$gid.lock", 'r+');
if (!$fp_lock) {
$fp_lock = fopen("./data/counter_$gid.lock", 'w');
}
flock($fp_lock, LOCK_EX);
$counter = (int) implode(file("./data/counter_$gid.txt"));
$target_id = $cp_id_table[$counter % $id_num];
++$counter;
if ($fp = fopen("./data/counter_$gid.txt", w)) {
flock($fp, LOCK_EX);
fwrite($fp, $counter);
flock($fp, LOCK_UN);
fclose($fp);
}
flock($fp_lock, LOCK_UN);
return load_cp_info($target_id);
}
// gid 指定で LP を利用する際に F5 リロードしても、同一の LP テンプレートを返す関数
function load_cp_info_by_cookie($gid)
{
global $DEFAULT_TEMPLATE_FILE, $DEFAULT_ADDPART_ARRAY, $DEFAULT_TAGPART_ARRAY;
global $COOKIE_PREFIX;
$cp_code = (string)filter_input(INPUT_COOKIE, $COOKIE_PREFIX.'HOTMJ_CAMPAIGN', FILTER_SANITIZE_SPECIAL_CHARS);
if ($cp_code && strpos($cp_code, $gid) === 0) {
$cp_file_data = file(dirname(__FILE__).'/files/campaign_list.txt');
foreach ($cp_file_data as $data) {
$param = explode(',', $data);
$cpid = trim($param[0]);
if ($cpid === $cp_code) {
return load_cp_info($cp_code);
}
}
}
return load_cp_info_by_group($gid);
}
// 指定されたキャンペーンコード及びポータルコードをCOOKIEに設定する。
// 設定された各種コードは登録時のreg_from, cp_codeに利用される
// ただし、
function set_mj_campaign_cookie($cp_code, $cp_portal)
{
global $STATIC_ISP_URL;
global $COOKIE_PREFIX, $COOKIE_DOMAIN;
//キャンペーンコード埋め込みクッキーをセット
$cookie_campaign = $COOKIE_PREFIX.'HOTMJ_CAMPAIGN';
$limit_campaign = time() + (60 * 60 * 24 * 14);
$path_campaign = '/';
setcookie($cookie_campaign, $cp_code, $limit_campaign, $path_campaign, $COOKIE_DOMAIN);
if (($cp_code != $cp_portal) && array_key_exists($cp_portal, $STATIC_ISP_URL)) {
$cookie_from = 'HOTMJ_FROM';
$limit_from = time() + (60 * 60 * 24 * 14);
$path_from = '/';
setcookie($cookie_from, $cp_portal, $limit_from, $path_from);
}
return true;
}
// アクセストレード広告タグ
// Schedule #63994
function set_accesstrade_cookie($atss_code)
{
global $STATIC_ISP_URL;
global $COOKIE_PREFIX, $COOKIE_DOMAIN;
$cookie_name = $COOKIE_PREFIX .'ACCESSTRADE_ATSS';
$limit_campaign = time() + (60 * 60 * 24 * 90); // 先方指定 90 日以上
$path_campaign = '/';
// 先方指定 HttpOnly 属性 Secure 属
setcookie($cookie_name, $atss_code, $limit_campaign, $path_campaign, $COOKIE_DOMAIN, TRUE, TURE);
return true;
}
function view_mj_campaign_page($cp_info)
{
//キャンペーンページの表示
$cp_code = $cp_info['cp_code'];
$cp_name = $cp_info['cp_name'];
$cp_point = $cp_info['cp_point'];
$tp_code = $cp_info['tp_code'];
$target_filename = dirname(__FILE__).'/files/'.$cp_info['template_name'];
$table = $cp_info['extra'];
// OSによる出し分け
if (($suffix = user_os_suffix()) != '') {
$pathext = pathinfo($target_filename, PATHINFO_EXTENSION);
if ($pathext != '') {
$pathrc = preg_replace('/\.'.$pathext.'$/', "{$suffix}.{$pathext}", $target_filename);
} else {
$pathrc .= $suffix;
}
if (is_readable($pathrc)) {
$target_filename = $pathrc;
}
}
// TAG PART の処理
$add_part_name = $cp_info['add_part_name'];
for ($no = 1; $no <= 6; ++$no) {
$content_part = '';
if ($add_part_name[$no] != '') {
/*
* phpファイルの動的読み込み対応
* 対象phpファイルで生成物をreturnする
*/
$part_names = explode('?', $add_part_name[$no]);
$filename = $part_names[0];
$ext = pathinfo($filename, PATHINFO_EXTENSION);
if (isset($part_names[1])) {
// GET呼び出しへの対応
$gets = explode('&', $part_names[1]);
foreach ($gets as $get) {
list($get_index, $get_value) = explode('=', $get);
$_GET[$get_index] = $get_value;
}
}
if ($ext === 'php') {
$part_filename = dirname(__FILE__).'/files/'.$filename;
$part_filename = find_ua_file($part_filename);
$content_part = require $part_filename;
} else {
/*
// 追加:virtual nanikiru(t + qno) 対応
if (preg_match('/virtual_nanikiru_t(\d+)_\{(\d+)\}\.html$/', $add_part_name[$no], $m)) {
$t = $m[1];
$qno = $m[2];
$content_part = '';
*/
// 追加:virtual nanikiru t15 対応
if (preg_match('/virtual_nanikiru_t15_\{(\d+)\}\.html$/', $add_part_name[$no], $m)) {
$qno = $m[1];
$content_part = '';
} else {
// 拡張子がphp以外の場合は単純ファイル読み込み
$part_filename = dirname(__FILE__).'/files/'.$add_part_name[$no];
$part_filename = find_ua_file($part_filename);
$content_part = file_get_contents($part_filename);
}
}
}
$table['add_part'.$no] = $content_part;
}
// タグパート処理
$table['tag_part1'] = @$cp_info['tag_part'][1];
// MJIリンク処理
$table['app_link_ios'] = isset($cp_info['app_link_ios']) ? $cp_info['app_link_ios'] : 'https://itunes.apple.com/jp/app/id816142637?l=ja&ls=1&mt=8&at=1l3vpsg&ct=mobileindex';
$table['app_link_android'] = isset($cp_info['app_link_android']) ? $cp_info['app_link_android'] : 'https://play.google.com/store/apps/details?id=com.signaltalk.mji';
// norton_safeweb_site_verification Ref: #72019
$cp_code_norton_code_list = array(
'tenpai_g_dvd_ad01' => 'ERQYVH2KTMA7DIZJT25OW0QFQK073HNIF8SLTA4WJTN99W-K2KKM5SNX3E-A-NW2SGSKHP1ST0QVK2WUL78LH8YI-BP1XG3A2KDUHNO3XF1139QZE5YR8PTJHOPJ-LX4', // 088
'line_manga_ad01' => 'QGJ6EYDUX9TY3XQ5L9WCUTFGNT4FXFTIQYA08MNL26EGWF8GTQV97WFHSK9F3FKYCJCMK1V-FJ3NL5KHR4HSXFGOH4I9C9IRS5JCIFKPMAR3T9NS7OID99FBS1IZ0SCE', // 099
'gendai_nmc_pr01' => '8O2O8WAGXOG2UC249FQAA7OOIWOUOW8GC2255AES230Q32TY216PM4LVNMPD4V1A-FW7VCHT525-YVIF377U237G7VJ6NSYYZTKNFBTAUJ73CUVLT5OPYYR3FV1NF3P5', // 111
'tvasahi_ch_ad01' => 'IMVKCK8BQ6QGYS998SV7KBHE3B1OL-DE4CPCQLCN9Z61RW4XE0D3FAV9OOQAGP00BRPMDGE5OMDLCY67UR6V6MTZ6UW69JYLT58FBK4WV3QFZT3MT8K0ONSCM5VBXP1U', // 123
'nishinihon_news_ad01a' => 'X0O3C36MDB8D123APT9G9KWM1ZS5JLODBRR6YB4PGLPSQMOU6BANP3HIM7SQ4ISKP--F6NBJEAM432PZ0IEKQE74N8M4426BN2F5E8SOP7-9200F7NZYGLUPVKBJF36G', // 222
'nishinihon_news_ad01b' => 'Y8HFJ586BOVN11NIOO26C09I6A8Q2-HJUCPQ038E9NL9BRQ7JIR8ULH9TRPK7FE4AZD3PL4Z5GXCTY8W44N9GHCI-9ZIBPL0XHWJ385Q4UADU21UAQL6KJM19JMKMCQD', // 333
'goraku_nmc_ad09' => 'UZ275RWM-HGWLHB1IKNJMDYYLMFDF459TN692XYU3MQWMKZ2GW4U3YMP4HVR4IUVK0X3TWQDDJ1WWOT74V54C4H575WOA9R9DKG3TVM4PTQTQKTCG6FQWCIYJ5HA1K0K', // 555
'gendai_ad02' => 'KEMETWFE-T8JEW724GL6S-VA9LXJQURMXBUP14VI339SVZLSZ9XOZOAOY52GSWJ-8IJ3BIV6G36ZXQID36WUWVZHVFJXDLEMRIF06EG69HRLF1DF70Z30-39-N9Q-6VJ', // 777
'abema_tv_ad06' => 'F8NAO-8-9E651S7JW3OQXW2XD9XM8SIVQILHHP9B6OKTGW7P2TV8PHWFSPPFWVAI55WZ6CUTAMXZRSRPQ4XF4K8QLQ524MZG2NN691--SCWWOLHMZMQO4PUF8OHWQLX7', // 888
'mj_adcard' => 'AQALXYIN8OKRD5PSE53GN84K8VVQBU4KZBCICVK7L6PJTEDMXB6PQ1448GBGVE5P3GIVJ6SI1I8JYWZGLT7GL8NLIEB1R8NNXJXR1WW627PO0AMICXOXMEWVFUHECL3H', // 999
);
$table['norton_safeweb_site_verification'] = '';
foreach ($cp_code_norton_code_list as $norton_key => $norton_value) {
if ($table['norton_safeweb_site_verification'] === '') {
$table['norton_safeweb_site_verification'] = $cp_code === $norton_key ? $norton_value : '';
}
}
$cp_image = "/image/cplogo_{$cp_code}.jpg";
if (is_readable(dirname(__FILE__).$cp_image)) {
$self_path = '/'.str_replace(PUBLIC_HOME, '', dirname(__FILE__));
$cp_name = '
';
}
global $AD_SERVER_ADDR;
$table['cp_code'] = $cp_code;
$table['cp_point'] = $cp_point;
$table['cp_name'] = $cp_name;
$table['tp_code'] = $tp_code;
$table['ad_server_url'] = 'http://'.$AD_SERVER_ADDR;
$table['signaltalk_url'] = $GLOBALS['SIGNALTALK_URL'];
$table['raw_mode'] = true;
if (empty($table['from'])) {
$from = get_session_portal();
if ($from == 'ios' || $from == 'android') {
$table['from'] = $from;
}
}
$table['ua'] = Http::analyze_ua();
$target_filename = find_ua_file($target_filename);
$contents = twango_str($target_filename, $table);
$contents = preg_replace('#([\'"\(])//www\.#', '$1https://ssl-www.', $contents);
print $contents;
}
function redirect_page($cp_info) {
$url = '/sys/campaign/set.php?id=err_redirect';
if ($cp_info['template_name'] == 'redirect:store') {
$os = get_user_os();
if (strpos($os,'Android') !== false) {
$url = isset($cp_info['app_link_android']) ? $cp_info['app_link_android'] : 'https://play.google.com/store/apps/details?id=com.signaltalk.mji';
} else if ($os == 'iOS' || $os == 'Mac') {
$url = isset($cp_info['app_link_ios']) ? $cp_info['app_link_ios'] : 'https://itunes.apple.com/jp/app/id816142637?l=ja&ls=1&mt=8&at=1l3vpsg&ct=mobileindex';
}
} else {
$url = substr($cp_info['template_name'], strlen('redirect:'));
}
\Http::redirect($url);
}
function execute_last_cpcode_record($cp_code)
{
// ここからラストキャンペーン計測
global $my_cookie_pass;
$value_pass = '';
// クッキーの確認
if (isset($_COOKIE['HOTMJ_PASS'])) {
$value_pass = $_COOKIE['HOTMJ_PASS'];
} elseif (isset($_COOKIE[$my_cookie_pass])) {
$value_pass = $_COOKIE[$my_cookie_pass];
}
if ($value_pass != '') {
$val = explode(' ', $value_pass);
$ck_login_id = $val[0];
if ($ck_login_id != '') {
$FILENAME_LASTCP_LOCK = ROOT_PATH.'log/last_cpcode_record.lock';
$FILENAME_LASTCP_OUTPUT = ROOT_PATH.'data/statistics/last_cpcode_record.csv';
//ロック
$fp_lock = @fopen($FILENAME_LASTCP_LOCK, 'r+');
if (!$fp_lock) {
$fp_lock = fopen($FILENAME_LASTCP_LOCK, 'w');
}
flock($fp_lock, LOCK_EX);
{
// 出力は、時刻とパラメータの実データ
$output = date('Y-m-d G:i:s').','.$_SERVER['REMOTE_ADDR'].','.$cp_code.','.$ck_login_id.','.$_SERVER['HTTP_USER_AGENT']."\n";
// ファイルに追記
$handle = fopen($FILENAME_LASTCP_OUTPUT, 'a');
if ($handle) {
fwrite($handle, $output);
fclose($handle);
}
}
flock($fp_lock, LOCK_UN);
fclose($fp_lock);
}
}
}
//////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////
////////////////////////////// utility ///////////////////////////
//////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////
function load_group_template($cp_info)
{
if (isset($cp_info['template_name']) == false) {
return $cp_info;
}
if (strpos($cp_info['template_name'], 'group_template_') === false) {
return $cp_info;
}
// オートテンプレート
$cp_code = $cp_info['cp_code'];
$template_name = $cp_info['template_name'];
$template_table = @file(dirname(__FILE__)."/files/{$template_name}");
$template_num = count($template_table);
// カウンターで順番に出す→キャンペーンコード毎
$work_path = dirname(__FILE__).'/group_template/';
$work_base = "{$work_path}/{$template_name}_{$cp_code}";
//ロック
$fp_lock = @fopen("{$work_base}.lock", 'r+');
if (!$fp_lock) {
$fp_lock = fopen("{$work_base}.lock", 'w');
}
flock($fp_lock, LOCK_EX);
$counter = (int) file_get_contents("{$work_base}_counter.txt");
$target_template_data = explode(',', $template_table[($counter % $template_num)]);
$tp_code = trim($target_template_data[0]);
$target_template_name = trim($target_template_data[1]);
++$counter;
if ($fp = fopen("{$work_base}_counter.txt", w)) {
fwrite($fp, $counter);
fclose($fp);
}
// ロック終わり
flock($fp_lock, LOCK_UN);
$cp_info['tp_code' ] = $tp_code;
$cp_info['template_name'] = $target_template_name;
return $cp_info;
}
function load_dorekiru_template($cp_info)
{
if (isset($cp_info['template_name']) == false) {
return $cp_info;
}
if (strpos($cp_info['template_name'], 'dorekiru_template_') === false) {
return $cp_info;
}
$template_name = $cp_info['template_name'];
//どれ切るテンプレート対応
$template_table = @file(dirname(__FILE__)."/files/{$template_name}");
$answer_no = @$_GET['answer'];
if (($answer_no == '') || !(preg_match('/[0-9]/', $answer_no))) {
$answer_no = 0;
}
$target_template_data = explode(',', $template_table[$answer_no]);
$target_template_name = trim($target_template_data[1]);
$target_answer_name = trim($target_template_data[2]);
$cp_info['extra']['answer_html'] = file_get_contents(dirname(__FILE__).'/files/'.$target_answer_name);
$cp_info['template_name'] = $target_template_name;
return $cp_info;
}
function load_new_template($cp_info)
{
global $my_cookie_pass;
if (isset($cp_info['template_name']) == false) {
return $cp_info;
}
if (strpos($cp_info['template_name'], 'template_new_') === false) {
return $cp_info;
}
// 既存会員出し分け
// ここからラストキャンペーン計測
$value_pass = '';
// クッキーの確認
if (isset($_COOKIE['HOTMJ_PASS'])) {
$value_pass = $_COOKIE['HOTMJ_PASS'];
} elseif (isset($_COOKIE[$my_cookie_pass])) {
$value_pass = $_COOKIE[$my_cookie_pass];
}
if ($value_pass != '') {
$val = explode(' ', $value_pass);
$ck_login_id = $val[0];
if ($ck_login_id != '') {
// ここにきたら出し分ける
$cp_info['template_name'] = str_replace('template_new_', 'template_mem_', $cp_info['template_name']);
}
}
return $cp_info;
}
if (!function_exists('get_user_os')) {
function get_user_os()
{
global $SERVERMODE;
if (get('os') != '' && ($SERVERMODE != 'SERVICE' || (get('magic') == 'segadna' || (isset($_COOKIE['magic']) && $_COOKIE['magic'] == 'segadna')))) {
$os = get('os');
$omit = array('xp' => 'WindowsXP', 'XP' => 'WindowsXP', 'vista' => 'WindowsVista', '7' => 'Windows7', '8' => 'Windows8', 'ios' => 'iOS', 'android' => 'Android', 'mac' => 'Mac');
return array_key_exists($os, $omit) ? $omit[$os] : $os;
}
$agent = isset($_SERVER['HTTP_USER_AGENT']) ? $_SERVER['HTTP_USER_AGENT'] : null;
if (strpos($agent, 'Windows Phone') !== false) {
$os = 'WindowsPhone';
} elseif (strpos($agent, 'BlackBerry') !== false) {
$os = 'BlackBerry';
} elseif (strpos($agent, 'Windows NT 6.2') !== false) {
$os = 'Windows8';
} elseif (strpos($agent, 'Windows NT 6.1') !== false) {
$os = 'Windows7';
} elseif (strpos($agent, 'Windows NT 6.0') !== false) {
$os = 'WindowsVista';
} elseif (strpos($agent, 'Windows NT 5.1') !== false || strpos($agent, 'Windows NT 5.2') !== false) {
$os = 'WindowsXP';
} elseif (strpos($agent, 'iPhone') !== false || strpos($agent, 'iPad') !== false) {
$os = 'iOS';
} elseif (strpos($agent, 'Android') !== false) {
$suffix = (preg_match('/Android\s(\d+)/', $agent, $m)) ? $m[1] : '';
$os = 'Android'.$suffix;
} elseif (strpos($agent, 'Mac') !== false) {
$os = 'Mac';
} else {
$os = null;
}
return $os;
}
}
function user_os_suffix($os = null)
{
if ($os === null || $os === false) {
$os = get_user_os();
}
switch ($os) {
case 'WindowsPhone':
return '_wp';
case 'BlackBerry':
return '_bb';
case 'Windows8':
return '_8';
case 'Windows7':
return '_7';
case 'WindowsVista':
return '_vista';
case 'WindowsXP':
return '_XP';
case 'iOS':
return '_ios';
case 'Android':
return '_android';
case 'Mac':
return '_mac';
}
return '';
}
function find_ua_file($filename)
{
$ua = Http::analyze_ua();
if ($ua) {
$fn = preg_replace('{\.([^/]+)$}', "_$ua.$1", $filename);
if (is_file($fn)) {
$filename = $fn;
}
}
return $filename;
}