$bShmem = true; $sHost = getenv("HTTP_HOST"); if($sHost == "main00.ruralnet.or.jp" || $sHost == "hs2.ruralnet.or.jp" || $sHost == "jat.ruralnet.or.jp" || $sHost == "libdt.ruralnet.or.jp") { //--------------------------------------------- // テスト環境 define定義 //--------------------------------------------- // エラーログファイル define("LOG_FILE", "/tmp/php_test_%s.log"); // エラー処理設定 define("FATAL",E_USER_ERROR); define("ERROR",E_USER_WARNING); define("WARNING",E_USER_NOTICE); // サーバー define("DB_SERVER", "192.168.230.8"); define("USER_SERVER", "192.168.230.8"); define("RANK_SERVER", "192.168.230.8"); define("MORI_SERVER", "192.168.230.8"); //define("MEDIA_SERVER", "192.168.220.30"); define("TEST_SERVER", "192.168.230.8"); define("MEDIA_SERVER", "192.168.230.4"); // バックアップサーバー define("DB_SERVER_BACKUP", "192.168.230.8"); define("USER_SERVER_BACKUP", "192.168.230.8"); define("RANK_SERVER_BACKUP", "192.168.230.8"); // サーバー接続ポート define("SRCH_PORT", 20001); define("OTHER_PORT", 20002); define("USER_PORT", 20001); define("LOG_PORT", 20002); define("LOG_PORT_2", 20005); // 団体共通ドメイン define("GROUP_DOMAIN", "libd.ruralnet.or.jp"); define("HS_DOMAIN", "hs.ruralnet.or.jp"); define("NODAI_DOMAIN", "nodai-c.ruralnet.or.jp"); define("HS_TEST_DOMAIN", "hs2.ruralnet.or.jp"); // 個人ドメイン define("PRIVATE_DOMAIN", "main00.ruralnet.or.jp"); // アクセス可能端末数 define("CLIENT_COUNT", 3); define("SP_DIR", "/sp_/"); $bShmem = false; } else { //--------------------------------------------- // 本番環境 define定義 define("WARNING",E_USER_NOTICE); // サーバー define("DB_SERVER", "192.168.230.15"); define("MORI_SERVER", "192.168.230.15"); define("DB_SERVER_BACKUP", "192.168.230.6"); define("USER_SERVER", "192.168.230.14"); define("USER_SERVER_BACKUP", "192.168.230.5"); define("RANK_SERVER", "192.168.230.6"); define("RANK_SERVER_BACKUP", "192.168.230.6"); define("TEST_SERVER", "192.168.230.8"); define("MEDIA_SERVER", "192.168.230.2"); // サーバー接続ポート define("SRCH_PORT", 20001); define("OTHER_PORT", 20002); define("USER_PORT", 20001); define("LOG_PORT", 20002); define("LOG_PORT_2", 20005); // 団体共通ドメイン define("GROUP_DOMAIN", "libd.ruralnet.or.jp"); define("HS_DOMAIN", "hs.ruralnet.or.jp"); define("NODAI_DOMAIN", "nodai-c.ruralnet.or.jp"); define("HS_TEST_DOMAIN", "hs1.ruralnet.or.jp"); // 個人ドメイン define("PRIVATE_DOMAIN", "lib.ruralnet.or.jp"); // アクセス可能端末数 define("CLIENT_COUNT", 3); define("SP_DIR", "/sp_/"); if(DB_SERVER == DB_SERVER_BACKUP) $bShmem = false; else if(USER_SERVER == USER_SERVER_BACKUP) $bShmem = false; } define("HS_TRIAL_NUM", 71); define("HS_TRIAL_NOT_ACCESS", "/not_access.php"); // エラー用メッセージ $g_sMsg = ''; // $tListCnt = array( 10, 20, 30, 50, 100 ); $tSakuhin = array( "現代農業", "農業技術大系", "防除", "日本の食生活全集", "食品加工総覧", "食農教育", "農業入門", "森の聞き書き甲子園", "ビデオ", "農書", "季刊地域" ); $tAccessDB = array( "現代農業","技術大系","防除","食全集","食品加工", "食農教育","農業入門","森の聞き書き甲子園","ビデオ","農書", "季刊地域","##","##","農薬" ); if(isset($_SERVER["REQUEST_URI"])) { if(strpos($_SERVER["REQUEST_URI"], "-2.php") !== false) $tSakuhin[] = "日本の家庭料理"; } $tSakuBit = array( 1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 2048, 4096, 8192, 16384, 32768 ); $tLibrary = array( "農業技術館","食・くらし館","農業入門館","しらべ学習館" ); $gCgiPath = "/var/www/cgi-bin/"; $bDebug = false; $bUserServerDebug = false; $giDownload = 0; $giDownload2 = 1; $gbPDF = true; $gtIP = array( "127.0.0.1", "192.168.200.2", "219.101.143.203", "219.101.143.204", "219.101.143.205", "124.35.4.210", "219.121.6.19", "113.32.8.61", "60.45.155.187", "59.158.101.136/29", "59.158.111.24/29", "203.212.41.122", "124.35.138.147", "122.215.119.143", "122.215.119.145", "118.243.179.85", "118.238.212.183", "122.215.119.148", "122.219.66.144", "183.77.180.10", "221.121.181.199", "124.35.4.208/29", "124.35.239.64/26", "202.221.15.128/26", "182.171.86.152/29", "182.171.86.168/29", "113.41.235.64/27", "39.110.224.160/29", "113.41.126.106", "118.243.179.77", "113.36.78.85", "183.77.124.170", "121.1.137.206", "115.163.125.8/29", "115.163.16.11", "152.165.126.207", "110.4.180.40", "110.4.180.98", "39.110.198.221", "192.168.210.0/24", "115.163.124.34", "113.32.97.36", "113.32.97.34", "113.32.97.37", "223.135.154.90", "223.135.154.91", "203.181.52.3", "133.238.232.176/28", "133.238.232.192/26", "133.238.233.1", "133.238.233.2" ); $gsGoogle = " "; $bot = "/SemrushBot|bingbot|AhrefsBot|Googlebot|Applebot|MJ12bot|Linespider|MegaIndex|Amazonbot|DataForSeoBot|ICC|serpstatbot|SeekportBot|facebookexternalhit|Bytespider/"; $s404 =<<<__DISP_404__ 404 Not Found

Not Found

The requested URL {url} was not found on this server.

__DISP_404__; if($_GET) { foreach($_GET as $sKey => $sVal) { $sVal = strip_tags($sVal); if(strpos($sVal, "'[0]") !== false) $sVal = ""; else if(stripos($sVal, "'A=0") !== false) $sVal = ""; else if(strpos($sVal, "1=1") !== false) $sVal = ""; else if(strpos($sVal, "1=2") !== false) $sVal = ""; else if($sVal == "\">") $sVal = ""; if(strpos($sVal, "%E3%80%80") !== false) $sVal = str_replace("%E3%80%80", " ", $sVal); $_GET[$sKey] = $sVal; if($_GET[$sKey] == "") unset($_GET[$sKey]); } reset($_GET); /*** print("\n"); ***/ } define("PARAM_KEY", "ruralnet"); function CryptoAesDecrypt($Param) { $tParam = explode("/", $Param); if(count($tParam) != 3) return null; try { $salt = hex2bin($tParam[1]); $iv = hex2bin($tParam[2]); } catch(Exception $e) { return null; } $ciphertext = hex2bin($tParam[0]); $iterations = 999; //same as js encrypting $key = hash_pbkdf2("sha512", PARAM_KEY, $salt, $iterations, 64); $decrypted= openssl_decrypt($ciphertext , 'aes-256-cbc', hex2bin($key), OPENSSL_RAW_DATA, $iv); //print("\n"); return $decrypted; } function CryptoAesEncrypt($plain_text) { $salt = random_bytes(256); $iv = random_bytes(16); //on PHP7 can use random_bytes() istead openssl_random_pseudo_bytes() //or PHP5x see : https://github.com/paragonie/random_compat $iterations = 999; $key = hash_pbkdf2("sha512", PARAM_KEY, $salt, $iterations, 64); $encrypted_data = openssl_encrypt($plain_text, 'aes-256-cbc', hex2bin($key), OPENSSL_RAW_DATA, $iv); $data = bin2hex($encrypted_data)."/".bin2hex($salt)."/".bin2hex($iv); return $data; } //--------------------------------------------- // クローラーチェック //--------------------------------------------- function CrawlerCheck() { global $bot; global $s404; if(isset($_SERVER['HTTP_USER_AGENT'])) { /*** ob_start(); print_r(headers_list()); $str = ob_get_contents(); ob_end_clean(); DebugLogOutput($str); ***/ $sAgent = $_SERVER['HTTP_USER_AGENT']; if(preg_match($bot, $sAgent) === 1) { //print("\n"); if(strpos($sAgent, "line-poker") === false) { $tHeader = headers_list(); if(count($tHeader) == 1) header("HTTP/1.1 404 Not Found"); print(str_replace("{url}", $_SERVER['SCRIPT_NAME'], $s404)); exit(0); } } } } //--------------------------------------------- // 共通画面表示 //--------------------------------------------- //--------------------------------------------- // 画面ファイル読み込み // // 戻り値 // 読み込みデータ // 引数 // ファイル名 //--------------------------------------------- function PageDataRead($in_sFile) { $fp = fopen($in_sFile, "r"); $sData = ''; if($fp) { while (!feof($fp)) { $sBuf = fgets($fp, 4096); if(substr($sBuf, 0, 2) == "//") continue; $sData .= $sBuf; } fclose($fp); } if(strpos($in_sFile, "sp_data") !== false) { $sData = str_replace("/sp/", SP_DIR, $sData); } return $sData; } //--------------------------------------------- // メッセージ読み込み // // 戻り値 // なし // 引数 // メッセージテーブル //--------------------------------------------- function MessageRead(&$out_tMsg) { global $gCgiPath; $fp = fopen($gCgiPath."data/message.txt", "r"); if($fp) { while (!feof($fp)) { $sData = fgets($fp, 4096); if(strlen($sData) <= 5) continue; if(substr($sData, 0, 2) == "//") continue; $iNum = intval(substr($sData, 0, 3)); $out_tMsg[$iNum] = substr($sData, 4); // printf("%d:%s
\n", $iNum, $out_tMsg[$iNum]); } fclose($fp); } } //--------------------------------------------- // タイムアウト画面表示 // // 戻り値 // なし // 引数 // なし //--------------------------------------------- function GroupUserTimeout() { global $gCgiPath; if(strpos(getenv("SCRIPT_NAME"), "sp_") !== false || strpos($_SERVER["REQUEST_URI"], SP_DIR) !== false) $sHtml = PageDataRead($gCgiPath."sp_data/dantai_timeout.txt"); else $sHtml = PageDataRead($gCgiPath."data/dantai_timeout.txt"); if(!headers_sent()) { setcookie("RURAL", "", time() - 86400); header("Cache-Control: no-cache, must-revalidate"); header("Cache-Control: post-check=0, pre-check=0", false); header("Pragma: no-cache"); header('Content-Type: text/html; charset=utf-8'); } print($sHtml); } //--------------------------------------------- // エラー表示 // // 戻り値 // なし // 引数 // エラー番号 //--------------------------------------------- function ErrorDisplay($in_iError, $in_sArg = "") { global $gCgiPath; $tErrorMsg = array(); MessageRead($tErrorMsg); if(array_key_exists(intval($in_iError), $tErrorMsg)) { // 2008.08 UPDATE $sReferer = getenv("HTTP_REFERER"); if(strpos(getenv("SCRIPT_NAME"), "sp_") !== false || strpos($_SERVER["REQUEST_URI"], SP_DIR) !== false) { $sHtml = PageDataRead($gCgiPath."sp_data/error_format.txt"); list($usec, $sec) = explode(" ", microtime()); $sHome = sprintf("Home\n", $usec * 1000000); $sHtml = str_replace("#HOME#", $sHome, $sHtml); $tErrorMsg[intval($in_iError)] = str_replace("\"/\"", "\"".SP_DIR."\"", $tErrorMsg[intval($in_iError)]); } else if(strpos($sReferer, "morisrch") === false && strpos($sReferer, "moriprof") === false) $sHtml = PageDataRead($gCgiPath."data/error_format.txt"); else $sHtml = PageDataRead($gCgiPath."data/morikiki_error_format.txt"); $sHtml = str_replace("#ERROR_MESSAGE#", $tErrorMsg[intval($in_iError)], $sHtml); $sHtml = str_replace("#ARG#", $in_sArg, $sHtml); $sHtml = str_replace("#IP#", $_SERVER['REMOTE_ADDR'], $sHtml); print($sHtml); } else { print("\n"); print("ERROR\n"); print("\n"); print("
\n"); printf("



ERROR (CODE=%d)

\n", $in_iError); print("
\n"); print("\n"); print("\n"); } } //--------------------------------------------- // ソケット通信処理 //--------------------------------------------- $gSendBuf = ""; $gSocket = NULL; $gServer = ""; $gPort = 0; //--------------------------------------------- // サーバー接続 // // 戻り値 // ハンドル // 引数 // $in_sServer サーバーアドレス // $in_iPort ポート //--------------------------------------------- function ServerConnect($in_sServer, $in_iPort) { global $gSocket; global $gServer; global $gPort; global $bShmem; $socket = @socket_create(AF_INET, SOCK_STREAM, 0); if($socket == false) { ErrorDisplay(102); print("\n"); exit(0); } $timeout = array('sec' => 10, 'usec' => 0); socket_set_option($socket, SOL_SOCKET, SO_SNDTIMEO, $timeout); $timeout = array('sec' => 1, 'usec' => 0); socket_set_option($socket, SOL_SOCKET, SO_RCVTIMEO, $timeout); $sServer = $in_sServer; if($bShmem) { if($in_sServer == USER_SERVER) { $shm_user = @shmop_open(0xff3, "a", 0444, 100); if($shm_user !== false) { $sem_user = sem_get(0xff5); sem_acquire($sem_user); $sLen = @shmop_read($shm_user, 0, 3); if($sLen !== false) { $sServer = shmop_read($shm_user, 3, intval($sLen)); } sem_release($sem_user); shmop_close($shm_user); if($sServer == "EXIT") $sServer = $in_sServer; } } else if($in_sServer == DB_SERVER) { $shm_db = @shmop_open(0xff4, "a", 0444, 100); if($shm_db !== false) { $sem_db = sem_get(0xff6); sem_acquire($sem_db); $sLen = @shmop_read($shm_db, 0, 3); if($sLen !== false) { $sServer = shmop_read($shm_db, 3, intval($sLen)); } sem_release($sem_db); shmop_close($shm_db); } } } $result = @socket_connect($socket, $sServer, $in_iPort); if($result === false) { $sBuf = "Server Connect Timeout. : ".$sServer; LogOutput($sBuf); $subject = "[SERVER ERROR] Server connect Timeout"; $mailfrom = "From: watch@mail.ruralnet.or.jp"; $mailto = "okamoto@assist-lab.com"; //mb_send_mail($mailto, $subject, $sBuf."\n\n", $mailfrom); socket_close($socket); ErrorDisplay(102); print("\n"); exit(0); } $gSocket = $socket; $gServer = $in_sServer; $gPort = $in_iPort; // set_time_limit(60); return $socket; } //--------------------------------------------- // サーバー切断 // // 戻り値 // なし // 引数 // $in_hServer サーバーハンドル //--------------------------------------------- function ServerClose($in_hServer) { global $gServer; global $gPort; global $gSendBuf; socket_close($in_hServer); if($gServer == USER_SERVER && $gServer != USER_SERVER_BACKUP) { if(strpos($gSendBuf, "_put") !== false) { $hServer = ServerConnect(USER_SERVER_BACKUP, $gPort); $iLen = strlen($gSendBuf); $sLen = pack("i", $iLen); socket_set_option($hServer, SOL_SOCKET, SO_KEEPALIVE, 1); socket_write($hServer, $sLen.$gSendBuf, $iLen+4); $sLen = @socket_read($hServer, 4, PHP_BINARY_READ); if($sLen !== false) { $vLen = unpack("V1", $sLen); $sRecv = socket_read($hServer, $vLen[1], PHP_BINARY_READ); } socket_close($hServer); } } } //--------------------------------------------- // データ送信 // // 戻り値 // なし // 引数 // $in_hServer サーバーハンドル // $in_sData 送信データ //--------------------------------------------- function ServerSend($in_hServer, $in_sData) { global $gSendBuf; $iLen = strlen($in_sData); $sLen = pack("i", $iLen); socket_set_option($in_hServer, SOL_SOCKET, SO_KEEPALIVE, 1); // socket_write($in_hServer, $in_sData, strlen($in_sData)); socket_write($in_hServer, $sLen.$in_sData, $iLen+4); $gSendBuf = $in_sData; } //--------------------------------------------- // データ受信 // // 戻り値 // 戻り値 // 引数 // $in_hServer サーバーハンドル // $in_sData 受信データ //--------------------------------------------- function ServerRecv(&$in_hServer, &$in_sData) { global $gSocket; global $gServer; global $gPort; global $gSendBuf; $errno = 0; $iRetry = 0; for($iI = 0; $iI < 40; $iI++) { socket_clear_error($in_hServer); $sLen = @socket_read($in_hServer, 4, PHP_BINARY_READ); if($sLen !== false) { $errno = 0; if($sLen != "") { if(strlen($sLen) < 4) { $sBuf = @socket_read($in_hServer, 4-strlen($sLen), PHP_BINARY_READ); if($sBuf !== false) { $sLen .= $sBuf; } else continue; } $vLen = unpack("V1", $sLen); if($vLen[1] < 90000000) { $in_sData = ''; while (1) { $sRecv = socket_read($in_hServer, $vLen[1], PHP_BINARY_READ); if($sRecv == "") break; $vLen[1] -= strlen($sRecv); $in_sData .= $sRecv; if($vLen[1] <= 0) break; } break; } else { break; } } } else { $errno = socket_last_error($in_hServer); if($errno == 11) continue; else if($errno == 104) { $iRetry ++; if($iRetry > 3) { break; } ServerClose($in_hServer); sleep(1); //usleep(100000); $in_hServer = ServerConnect($gServer, $gPort); ServerSend($in_hServer, $gSendBuf); } else { $sBuf = "*Server Return Error [".$errno."] : ".$_SERVER["SERVER_NAME"].$_SERVER["REQUEST_URI"]; $sBuf .= "\n*Server : ".$gServer; $sBuf .= "\n*Command : ".$gSendBuf; LogOutput($sBuf); break; } } } if($errno != 0) { $sBuf = "Server Return Error [".$errno."] : ".$_SERVER["SERVER_NAME"].$_SERVER["REQUEST_URI"]; $sBuf .= "\nServer : ".$gServer; $sBuf .= "\nCommand : ".$gSendBuf; LogOutput($sBuf); if($errno == 11) { $subject = "[SERVER ERROR] Server return error (".$errno.")"; $mailfrom = "From: watch@mail.ruralnet.or.jp"; $mailto = "okamoto@assist-lab.com"; mb_send_mail($mailto, $subject, $sBuf."\n\n", $mailfrom); } socket_close($in_hServer); ErrorDisplay(102); print("\n"); exit(0); } if($in_sData == "107" || $in_sData == "999") { $sBuf = "Server Process Timeout. : ".$_SERVER["SERVER_NAME"].$_SERVER["REQUEST_URI"]; $sBuf .= "\nServer : ".$gServer." [".$in_sData."]"; $sBuf .= "\nCommand : ".$gSendBuf; LogOutput($sBuf); $subject = "[ERROR] Server Timeout or Error"; $mailfrom = "From: watch@mail.ruralnet.or.jp"; $mailto = "okamoto@assist-lab.com"; mb_send_mail($mailto, $subject, $sBuf."\n\n", $mailfrom); socket_close($in_hServer); ErrorDisplay(102); print("\n"); exit(0); } } //--------------------------------------------- // ログイン処理 //--------------------------------------------- // ID、パスワードの入力画面表示 // // 戻り値 // なし // 引数 // $in_sAction 呼び出しCGI // $in_sParam1 パラメータ1 // $in_sParam2 パラメータ2 // $in_sParam3 パラメータ3 //--------------------------------------------- function ninsyou_page($in_sAction, $in_sParam1, $in_sParam2, $in_sParam3) { global $gCgiPath; // $bBrowser = BrowserCheck(); // 2008.08 UPDATE $sReferer = getenv("HTTP_REFERER"); if(strpos($sReferer, "morisrch") === false && strpos($sReferer, "moriprof") === false) { if($in_sAction != "ruralfile2.php") { header("Cache-Control: no-store, no-cache, must-revalidate"); header("Cache-Control: post-check=0, pre-check=0", false); header("Pragma: no-cache"); } if($in_sAction == "index.php") { $sHtml = PageDataRead($gCgiPath."login/login01.html"); } else if(strpos($in_sAction, "nouyaku") === false) { $sHtml = PageDataRead($gCgiPath."login/login03.html"); } else { $sHtml = PageDataRead($gCgiPath."login/login02.html"); } } else $sHtml = PageDataRead($gCgiPath."data/id_pass_morikiki.txt"); $iTime = time(); $sHtml = str_replace("#TIME#", $iTime, $sHtml); $sHtml = str_replace("#ARG1#", $in_sParam1, $sHtml); $sHtml = str_replace("#ARG2#", $in_sParam2, $sHtml); $sHtml = str_replace("#ARG3#", $in_sParam3, $sHtml); $sHtml = str_replace("#CGI#", $in_sAction, $sHtml); setcookie("RURALCHECK","OK"); print($sHtml); } //--------------------------------------------- // 個人ログイン // // 戻り値 // なし // 引数 // $in_sUser ユーザID // $in_sPass パスワード // $out_iUnique UNIQUE ID // $out_iTimeout Timeout // $out_iDB Access DB // $out_iPriv 特権者 // $out_iKaisi 開始日 // $out_iKousin 更新日 // $out_iKeiyaku 契約 // $out_iPage 利用ページ数 // $out_iKurikosi 繰り越しページ数 //--------------------------------------------- function RuralLogin( &$in_sUser, &$in_sPass, &$out_iUnique, &$out_iTimeout, &$out_iDB, &$out_iPriv, &$out_iKaisi, &$out_iKousin, &$out_iKeiyaku, &$out_iPage, &$out_iKurikosi ) { global $gCgiPath; /*** if(!array_key_exists("RURALCHECK", $_COOKIE)) { ErrorDisplay(101); exit(0); } if(date("Hi") >= "0300" && date("Hi") <= "0310") { ErrorDisplay(130); exit(0); } ***/ $sUser = mb_convert_kana(trim($in_sUser), "a"); $sPass = mb_convert_kana(trim($in_sPass), "a"); if(strpos($sUser, "'") !== false) return 103; if(strpos($sUser, "\"") !== false) return 103; // ユーザ管理サーバにて認証を行う $sParam = sprintf("USR=%s&PAS=%s", $sUser, $sPass); $hServer = ServerConnect(USER_SERVER, USER_PORT); ServerSend($hServer, "usr_login.lua?".$sParam); ServerRecv($hServer, $sRecv); ServerClose($hServer); $vsRecv = explode("\n", $sRecv); if($vsRecv[0] == 0) { $vsUserInfo = explode("\t", $vsRecv[1]); $out_iUnique = $vsUserInfo[0]; $out_iDB = intval($vsUserInfo[1]); $out_iKaisi = intval($vsUserInfo[2]); $out_iKousin = intval($vsUserInfo[3]); $out_iKeiyaku = intval($vsUserInfo[4]); $out_iPage = intval($vsUserInfo[5]); $out_iTimeout = intval($vsUserInfo[7]); $out_iPriv = intval($vsUserInfo[8]); $out_iKurikosi = intval($vsUserInfo[9]); $in_sUser = $vsUserInfo[10]; //DebugLogOutput($sID); // 2009.10 $sBuf = date("Y/m/d H:i:s")."\t\t".$in_sUser."\t0\t"; AccessLog($sBuf); // 2012.04 if($out_iPriv == 0 || $out_iPriv == 2) BrowserLog("", $in_sUser); if(USER_SERVER_BACKUP != USER_SERVER) { $hServer = ServerConnect(USER_SERVER_BACKUP, USER_PORT); ServerSend($hServer, "usr_login2.lua?".$sParam."&UID=".$out_iUnique); ServerRecv($hServer, $sRecv); ServerClose($hServer); } } else if($vsRecv[0] == 106) { $in_sUser = $vsRecv[1]; } return $vsRecv[0]; } //--------------------------------------------- // ブラウザ判定 // // 戻り値 // 0 NG // + OK // 引数 // なし //--------------------------------------------- function BrowserCheck() { $tAgent = array('iPad','iPod','iPhone','Windows Phone OS'); $bRet = false; $sAgent = $_SERVER['HTTP_USER_AGENT']; $sBrowser = ""; //DebugLogOutput($sAgent); for($iI = 0; $iI < count($tAgent); $iI++) { if(strpos($sAgent, $tAgent[$iI]) !== false) { $bRet = true; $sBrowser = "iPad/iPod/iPhone/Windows Phone OS"; break; } } if(!$bRet) { if(($iPos = strpos($sAgent, "MSIE")) !== false) { $sBrowser = "IE"; $sAgent = substr($sAgent, $iPos + 5); $iPos = strpos($sAgent, ";"); $iVer = substr($sAgent, 0, $iPos); if($iVer >= 8.0) $bRet = true; else { if(strpos($sAgent, "Trident") !== false) $bRet = true; } } else if(($iPos = strpos($sAgent, "Chrome")) !== false) { $sBrowser = "Chrome"; $sAgent = substr($sAgent, $iPos + 7); $iVer = substr($sAgent, 0, 3); if($iVer >= 4.0) $bRet = true; $sBrowser .= $iVer; } else if(($iPos = strpos($sAgent, "Firefox")) !== false) { $sBrowser = "Firefox"; $sAgent = substr($sAgent, $iPos + 8); $iVer = substr($sAgent, 0, 3); if($iVer >= 4.0) $bRet = true; $sBrowser .= $iVer; } else if(($iPos = strpos($sAgent, "Opera")) !== false) { $sBrowser = "Opera"; $iPos = strpos($sAgent, "Version/"); if($iPos !== false) { $sAgent = substr($sAgent, $iPos + 8); $iVer = substr($sAgent, 0, 4); if($iVer >= 10.5) $bRet = true; $sBrowser .= $iVer; } } else if(($iPos = strpos($sAgent, "Android")) !== false) { $sBrowser = "Android"; $sAgent = substr($sAgent, $iPos + 8); $iVer = substr($sAgent, 0, 3); if($iVer >= 2.2) $bRet = true; $sBrowser .= $iVer; } else if(($iPos = strpos($sAgent, "BlackBerry")) !== false) { $sBrowser = "BlackBerry"; $iPos = strpos($sAgent, "Version/"); if($iPos !== false) { $sAgent = substr($sAgent, $iPos + 8); $iVer = substr($sAgent, 0, 3); if($iVer >= 6.0) $bRet = true; $sBrowser .= $iVer; } } else if(($iPos = strpos($sAgent, "Safari")) !== false) { $sBrowser = "Safari"; $sAgent = substr($sAgent, $iPos + 7); $iVer = substr($sAgent, 0, 3); if($iVer >= 528) $bRet = true; $sBrowser .= $iVer; } } /********* if($bRet) DebugLogOutput($sBrowser." -> OK"); else DebugLogOutput($sBrowser." -> NG"); **********/ return $bRet; } //--------------------------------------------- // 端末特定 // // 戻り値 // 0 NG // + OK // 引数 // $in_sGroup 団体ID // $in_sUser ユーザID // $in_sKey キー // $out_iCount クライアント数 //--------------------------------------------- $gClient = ""; function RuralClientCheck( $in_sGroup, $in_sUser, $in_sKey, &$out_iCount ) { global $gClient; $iRet = 0; if($in_sGroup == "") $sParam = sprintf("USR=%s", $in_sUser); else $sParam = sprintf("GRP=%s&USR=%s", $in_sGroup, $in_sUser); $hServer = ServerConnect(USER_SERVER, USER_PORT); //DebugLogOutput("usr_client_get.lua?".$sParam); ServerSend($hServer, "usr_client_get.lua?".$sParam); ServerRecv($hServer, $sRecv); ServerClose($hServer); $vsRecv = explode("\n", $sRecv); if($vsRecv[0] == 0) { $gClient = $vsRecv[1]; $out_iCount = 0; $tClient = explode(",", $vsRecv[1]); //DebugLogOutput(sprintf("ClientCheck count=%d", count($tClient))); for($iI = 0; $iI < count($tClient); $iI++) { //DebugLogOutput("[".$tClient[$iI]."]"); if($tClient[$iI] == "") continue; $out_iCount ++; if($tClient[$iI] == $in_sKey) { $iRet = 1; break; } } } /************ if($iRet) DebugLogOutput("Client Check OK [".$in_sKey."]"); else DebugLogOutput("Client Check NG [".$in_sKey."]"); *************/ return $iRet; } //--------------------------------------------- // 端末特定 // // 戻り値 // なし // 引数 // $in_sGroup 団体ID // $in_sUser ユーザID // $in_sKey キー //--------------------------------------------- function RuralClientWrite( $in_sGroup, $in_sUser, $in_sKey ) { global $gClient; if($gClient == "") $gClient = $in_sKey; else $gClient .= ",".$in_sKey; $sParam = sprintf("GRP=%s&USR=%s&KEY=%s", $in_sGroup, $in_sUser, $gClient); $hServer = ServerConnect(USER_SERVER, USER_PORT); ServerSend($hServer, "usr_client_write.lua?".$sParam); ServerRecv($hServer, $sRecv); ServerClose($hServer); } //--------------------------------------------- // 端末特定 // // 戻り値 // なし // 引数 // $in_sGroup 団体ID // $in_sUser ユーザID // $in_sKey キー //--------------------------------------------- function RuralClientDelete( $in_sGroup, $in_sUser, $in_sKey ) { $sParam = sprintf("GRP=%s&USR=%s&KEY=%s", $in_sGroup, $in_sUser, $in_sKey); $hServer = ServerConnect(USER_SERVER, USER_PORT); ServerSend($hServer, "usr_client_delete.lua?".$sParam); ServerRecv($hServer, $sRecv); ServerClose($hServer); } //--------------------------------------------- // 団体ログイン // // 戻り値 // なし // 引数 // $in_iDomain DOMAIN // $in_sGroup グループID // $in_sUser ユーザID // $in_sPass パスワード // $out_iUnique UNIQUE ID // $out_iTimeout Timeout // $out_iLogout Logout Time // $out_iDB Access DB // $out_iKiji Save Kiji Count // $out_iLogin Login Page // $out_iMyBook My Book Access // $out_iPriv 特権者 //--------------------------------------------- function RuralGroupLogin( $in_iDomain, $in_sGroup, &$in_sUser, &$in_sPass, &$out_iUnique, &$out_iTimeout, &$out_iLogout, &$out_iDB, &$out_iKiji, &$out_iLogin, &$out_iMyBook, &$out_iPriv ) { // IPアドレス $sIP = getenv("REMOTE_ADDR"); $tElement = explode(".", $sIP); $sIP = sprintf("%03d.%03d.%03d.%03d", intval($tElement[0]), intval($tElement[1]), intval($tElement[2]), intval($tElement[3])); $sUser = mb_convert_kana(trim($in_sUser), "a"); $sUser = trim($sUser, '"'); $sPass = mb_convert_kana(trim($in_sPass), "a"); $sPass = trim($sPass, '"'); if(strpos($sUser, "'") !== false) return 103; if(strpos($sUser, "\"") !== false) return 103; // ユーザ管理サーバにて認証を行う $sParam = sprintf("DM=%d&GRP=%s&USR=%s&PAS=%s&IP=%s", $in_iDomain, $in_sGroup, $sUser, $sPass, $sIP); $hServer = ServerConnect(USER_SERVER, USER_PORT); $sHost = getenv("HTTP_HOST"); if($sHost == HS_TEST_DOMAIN || $sHost == HS_DOMAIN) ServerSend($hServer, "usr_glogin2_hs.lua?".$sParam); else ServerSend($hServer, "usr_glogin4.lua?".$sParam); ServerRecv($hServer, $sRecv); ServerClose($hServer); $vsRecv = explode("\n", $sRecv); if($vsRecv[0] == 0) { $vsUserInfo = explode("\t", $vsRecv[1]); $out_iUnique = $vsUserInfo[0]; $out_iTimeout = intval($vsUserInfo[2]); $out_iLogout = intval($vsUserInfo[3]); $out_iDB = intval($vsUserInfo[1]); $out_iKiji = 0; $out_iLogin = intval($vsUserInfo[4]); $out_iMyBook = intval($vsUserInfo[5]); $out_iPriv = intval($vsUserInfo[6]); if(isset($vsUserInfo[8])) $in_sUser = $vsUserInfo[8]; if(strlen($in_sUser) > 20) $in_sUser = substr($in_sUser, 0, 20); if($out_iLogout > 0) { $iTime = time(); $tTime = localtime($iTime); $iYear = $tTime[5] + 1900; $iMonth = $tTime[4] + 1; $iDay = $tTime[3]; $iHour = (int)($out_iLogout / 60); $iMin = (int)($out_iLogout % 60); $out_iLogout = mktime($iHour, $iMin, $tTime[0], $iMonth, $iDay, $iYear); if((int)$iTime > (int)$out_iLogout) { $out_iLogout = mktime($iHour, $iMin, $tTime[0], $iMonth, $iDay + 1, $iYear); } } // 2009.10 if($vsUserInfo[3] > 0) $sBuf = date("Y/m/d H:i:s")."\t".$in_sGroup."\t".$in_sUser."\t1\t"; else { if($out_iTimeout > 3600) $sBuf = date("Y/m/d H:i:s")."\t".$in_sGroup."\t".$in_sUser."\t1\t"; else $sBuf = date("Y/m/d H:i:s")."\t".$in_sGroup."\t".$in_sUser."\t0\t"; } AccessLog($sBuf); if($out_iPriv == 0 || $out_iPriv == 2) BrowserLog($in_sGroup, $in_sUser, $out_iLogout); if(USER_SERVER_BACKUP != USER_SERVER) { $hServer = ServerConnect(USER_SERVER_BACKUP, USER_PORT); $sHost = getenv("HTTP_HOST"); if($sHost == HS_TEST_DOMAIN || $sHost == HS_DOMAIN) ServerSend($hServer, "usr_glogin2_hs-2.lua?".$sParam."&UID=".$out_iUnique); else ServerSend($hServer, "usr_glogin4-2.lua?".$sParam."&UID=".$out_iUnique); ServerRecv($hServer, $sRecv); ServerClose($hServer); } } return $vsRecv[0]; } //--------------------------------------------- // 団体IPログイン // // 戻り値 // なし // 引数 // $in_iDomain DOMAIN // $io_sGroup グループID // $out_sUser ユーザID // $out_iUnique UNIQUE ID // $out_iTimeout Timeout // $out_iLogout Logout Time // $out_iDB Access DB // $out_iKiji Save Kiji Count // $out_iLogin Login Page // $out_iMyBook My Book Access // $out_iPriv 特権者 //--------------------------------------------- function RuralGroupIpLogin( $in_iDomain, &$io_sGroup, &$out_sUser, &$out_iUnique, &$out_iTimeout, &$out_iLogout, &$out_iDB, &$out_iKiji, &$out_iLogin, &$out_iMyBook, &$out_iPriv, &$out_sInitFolder ) { // IPアドレス $sIP = getenv("REMOTE_ADDR"); $tElement = explode(".", $sIP); $sIP = sprintf("%03d.%03d.%03d.%03d", intval($tElement[0]), intval($tElement[1]), intval($tElement[2]), intval($tElement[3])); // ユーザ管理サーバにて認証を行う $sParam = sprintf("DM=%d&GRP=%s&IP=%s", $in_iDomain, $io_sGroup, $sIP); $hServer = ServerConnect(USER_SERVER, USER_PORT); //DebugLogOutput($sParam); ServerSend($hServer, "usr_gipcheck.lua?".$sParam); ServerRecv($hServer, $sRecv); ServerClose($hServer); $vsRecv = explode("\n", $sRecv); if($vsRecv[0] == 0) { $vsUserInfo = explode("\t", $vsRecv[1]); $out_iUnique = $vsUserInfo[0]; $out_iTimeout = intval($vsUserInfo[2]); $out_iLogout = 0; $out_iDB = intval($vsUserInfo[1]); $out_iKiji = 0; $out_iLogin = 0; $out_iMyBook = 0; $out_iPriv = 0; $out_sUser = "__IP__"; $io_sGroup = $vsUserInfo[3]; $out_sInitFolder = $vsUserInfo[4]; // 2009.10 $sBuf = date("Y/m/d H:i:s")."\t".$io_sGroup."\t".$out_sUser."\t0\t"; AccessLog($sBuf); BrowserLog($io_sGroup, $out_sUser); if(USER_SERVER_BACKUP != USER_SERVER) { $hServer = ServerConnect(USER_SERVER_BACKUP, USER_PORT); ServerSend($hServer, "usr_gipcheck.lua?".$sParam); ServerRecv($hServer, $sRecv); ServerClose($hServer); } } return $vsRecv[0]; } //--------------------------------------------- // ログインチェック // // 戻り値 // 0 ログイン // それ以外 ログインしていない // 引数 // $in_iUnique UNIQUE ID // $out_sGroup Group ID // $out_sUser User ID // $out_iTimeout Timeout // $out_iLogout Logout Time // $out_iDB Access DB // $out_iKiji Save Kiji Count // $out_iLogin Login Page // $out_iMyBook My Book Access // $out_iPriv 特権者 // $out_iKaisi 開始日 // $out_iKousin 更新日 // $out_iKeiyaku 契約 // $out_iPage 利用ページ数 //--------------------------------------------- function RuralLoginCheck( $in_iUnique, &$out_sGroup, &$out_sUser, &$out_iTimeout, &$out_iLogout, &$out_iDB, &$out_iKiji, &$out_iLogin, &$out_iMyBook, &$out_iPriv, &$out_iKaisi, &$out_iKousin, &$out_iKeiyaku, &$out_iPage, $in_bCheck = false ) { global $giDownload; global $giDownload2; global $gbPDF; if(date("dHi") >= "010230" && date("dHi") <= "010300") { ErrorDisplay(131); exit(0); } if($in_bCheck) { $shm_login = @shmop_open(0x1001, "w", 0, 0); if($shm_login !== false) { //DebugLogOutput("shmop_open ok"); $bReturn = false; $sem_login = sem_get(0x1002); sem_acquire($sem_login); $sMark = @shmop_read($shm_login, 0, 5); if($sMark !== false) { if($sMark == "RURAL") { $sLen = @shmop_read($shm_login, 5, 5); if($sLen !== false) { if(is_numeric($sLen)) { //DebugLogOutput("shmop_read ok ".$sLen); if($sLen > 0) { $sLogin = shmop_read($shm_login, 10, intval($sLen)); //DebugLogOutput($sLogin); $tUser = json_decode($sLogin, true); //print("\n"); $buf = sprintf("shmem user count : %d", count($tUser)); //DebugLogOutput($buf); if(isset($tUser[$in_iUnique])) { $tLogin = $tUser[$in_iUnique]; $iNow = time(); //DebugLogOutput($tLogin[0]." : ".$iNow); if(($tLogin[0] + 60) > $iNow) { $bReturn = true; $out_sGroup = $tLogin[1]; $out_sUser = $tLogin[2]; $out_iTimeout = $tLogin[3]; $out_iLogout = $tLogin[4]; $out_iDB = $tLogin[5]; $out_iKiji = $tLogin[6]; $out_iLogin = $tLogin[7]; $out_iMyBook = $tLogin[8]; $out_iPriv = $tLogin[9]; $out_iKaisi = $tLogin[10]; $out_iKousin = $tLogin[11]; $out_iKeiyaku = $tLogin[12]; $out_iPage = $tLogin[13]; } } } } } } } sem_release($sem_login); shmop_close($shm_login); if($bReturn) { //DebugLogOutput("check return"); return 0; } //DebugLogOutput("check start"); } } $sParam = sprintf("UID=%d", $in_iUnique); $hServer = ServerConnect(USER_SERVER, USER_PORT); ServerSend($hServer, "usr_check2.lua?".$sParam); ServerRecv($hServer, $sRecv); ServerClose($hServer); $vsRecv = explode("\n", $sRecv); if($vsRecv[0] == 0) { $vsUserInfo = explode("\t", $vsRecv[1]); if(count($vsUserInfo) < 12) { DebugLogOutput("[".$sRecv."]"); } $out_iDB = intval($vsUserInfo[0]); $out_iTimeout = intval($vsUserInfo[1]); $out_iLogout = intval($vsUserInfo[2]); $out_iKiji = intval($vsUserInfo[3]); $out_iLogin = intval($vsUserInfo[4]); $out_iPriv = intval($vsUserInfo[5]); $out_iMyBook = intval($vsUserInfo[6]); $out_iKaisi = intval($vsUserInfo[7]); $out_iKousin = intval($vsUserInfo[8]); $out_iKeiyaku = intval($vsUserInfo[9]); $out_iPage = intval($vsUserInfo[10]); $out_sUser = $vsUserInfo[11]; $iPos = strpos($vsUserInfo[12], "#"); if($iPos == false) $out_sGroup = $vsUserInfo[12]; else $out_sGroup = substr($vsUserInfo[12], 0, $iPos); // if($out_sGroup != "") // $giDownload = $vsUserInfo[13]; if($out_sGroup != "") { $giDownload = 1; if($vsUserInfo[13] == 0 || $vsUserInfo[13] == 3) $giDownload = 0; if($vsUserInfo[13] == 2 || $vsUserInfo[13] == 3) $giDownload2 = 0; } // if($out_sUser == "okamoto") // $out_iPriv = 1; if(USER_SERVER_BACKUP != USER_SERVER) { $hServer = ServerConnect(USER_SERVER_BACKUP, USER_PORT); ServerSend($hServer, "usr_check2.lua?".$sParam); ServerRecv($hServer, $sRecv); ServerClose($hServer); } if($out_sUser == "s_yoshimoto" || $out_sUser == "kobayasi" || $out_sUser == "okamoto" || $out_sUser == "ogawa") return $vsRecv[0]; if($out_iPriv == 3) return $vsRecv[0]; /*********************************/ // 2009.10 $sScript = getenv("SCRIPT_NAME"); if(strpos($sScript, "cgi-bin") !== false) { $bCheck = false; if($out_sGroup == "" && $out_iKeiyaku == 3) { if(strpos($sScript, "ruralfile.php") !== false) { if(strpos(strtolower($_SERVER["REQUEST_URI"]), ".pdf") !== false) $bCheck = true; } else if(strpos($sScript, "ruralfile2") !== false) $bCheck = true; } else { if(strpos($sScript, "ruralfile") === false) $bCheck = true; } //printf("%s CHECK[%d]
", $sScript, $bCheck); //exit(0); if($bCheck) { $sParam = sprintf("UID=%d", $in_iUnique); $hServer = ServerConnect(USER_SERVER, USER_PORT); ServerSend($hServer, "dlcheck4.lua?".$sParam); ServerRecv($hServer, $sRecv); ServerClose($hServer); //print("dlcheck3.lua?".$sParam." -->[".$sRecv."]
"); //exit(0); if($sRecv < 0) { if($sRecv != -3) { // メール送信 $mailto = "watch@mail.ruralnet.or.jp"; if($sRecv == -2) { if($out_sGroup == "") $subject = $out_sUser." IDを停止しました"; else $subject = $out_sGroup.":".$out_sUser." IDを停止しました"; $content = $subject."\nIDを停止しました。("; } else { if($out_sGroup == "") $subject = $out_sUser." ダウンロード制限を超えた"; else $subject = $out_sGroup.":".$out_sUser." ダウンロード制限を超えた"; $content = $subject."\n1分間のダウンロード制限を超えた。("; } $content .= getenv("REMOTE_ADDR"); $content .= ")"; $mailfrom = "From: watch@mail.ruralnet.or.jp"; mb_send_mail($mailto, $subject, $content, $mailfrom); $mailto = "fujii@mail.ruralnet.or.jp"; mb_send_mail($mailto, $subject, $content, $mailfrom); $mailto = "okamoto@assist-lab.com"; mb_send_mail($mailto, $subject, $content, $mailfrom); $mailto = "y.onishi@assist-lab.com"; mb_send_mail($mailto, $subject, $content, $mailfrom); } if($sRecv == -2) { if($out_sGroup == "") { $sParam = sprintf("UID=%d", $in_iUnique); $hServer = ServerConnect(USER_SERVER, USER_PORT); ServerSend($hServer, "usr_id2mail.lua?".$sParam); ServerRecv($hServer, $sRecv); ServerClose($hServer); $tRet = explode("\t", $sRecv); if($tRet[0] == 0) { if($tRet[2] != "") { $subject = "IDを停止しました"; $content = $tRet[1]." 様\n\n"; $content .= file_get_contents("data/mail_id_stop.txt"); $mailfrom = "From: watch@mail.ruralnet.or.jp"; mb_send_mail($tRet[2], $subject, $content, $mailfrom); } } } readfile("data/error_id_stop.txt"); exit(0); } /*** else if($sRecv == -1 && $out_sGroup == "" && $out_iKeiyaku == 3) { readfile("data/error_download_stop.txt"); exit(0); } ***/ else { $gbPDF = false; readfile("data/error_download_stop.txt"); exit(0); } } } } if($in_bCheck) { //DebugLogOutput("shmem save"); $shm_login = @shmop_open(0x1001, "w", 0, 0); if($shm_login !== false) { $sem_login = sem_get(0x1002); sem_acquire($sem_login); $sMark = @shmop_read($shm_login, 0, 5); if($sMark !== false) { if($sMark == "RURAL") { //DebugLogOutput("shmem write"); $sLen = @shmop_read($shm_login, 5, 5); if($sLen !== false) { $sLogin = shmop_read($shm_login, 10, intval($sLen)); $tUser = json_decode($sLogin, true); } $tLogin[0] = time(); $tLogin[1] = $out_sGroup; $tLogin[2] = $out_sUser; $tLogin[3] = $out_iTimeout; $tLogin[4] = $out_iLogout; $tLogin[5] = $out_iDB; $tLogin[6] = $out_iKiji; $tLogin[7] = $out_iLogin; $tLogin[8] = $out_iMyBook; $tLogin[9] = $out_iPriv; $tLogin[10] = $out_iKaisi; $tLogin[11] = $out_iKousin; $tLogin[12] = $out_iKeiyaku; $tLogin[13] = $out_iPage; $tUser[$in_iUnique] = $tLogin; $sLogin = json_encode($tUser); if(strlen($sLogin) < 65526) { $sLen = sprintf("%05d", strlen($sLogin)); shmop_write($shm_login, $sLen.$sLogin, 5); //DebugLogOutput("shmem write : ".$sLen); } } } sem_release($sem_login); shmop_close($shm_login); } } } return $vsRecv[0]; } //--------------------------------------------- // パスワード変更 // // 戻り値 // なし // 引数 // $in_sGroup GROUP ID // $in_sUser USER ID // $in_sPass NEW PASSWORD //--------------------------------------------- function PasswordUpdate($in_sGroup, $in_sUser, $in_sPass) { $sParam = sprintf("GRP=%s&USR=%s&PAS=%s", $in_sGroup, $in_sUser, $in_sPass); $hServer = ServerConnect(USER_SERVER, USER_PORT); ServerSend($hServer, "usr_pass.lua?".$sParam); ServerRecv($hServer, $sRecv); ServerClose($hServer); if($sRecv != 0) { ErrorDisplay(intval($sRecv)); exit(0); } } //--------------------------------------------- // ログアウト // // 戻り値 // なし // 引数 // $in_iUnique UNIQUE ID //--------------------------------------------- function Logout($in_iUnique) { $sParam = sprintf("UID=%d", $in_iUnique); $hServer = ServerConnect(USER_SERVER, USER_PORT); ServerSend($hServer, "usr_logout.lua?".$sParam); ServerRecv($hServer, $sRecv); ServerClose($hServer); if(USER_SERVER_BACKUP != USER_SERVER) { $hServer = ServerConnect(USER_SERVER_BACKUP, USER_PORT); ServerSend($hServer, "usr_logout.lua?".$sParam); ServerRecv($hServer, $sRecv); ServerClose($hServer); } } //--------------------------------------------- // 強制ログアウト // // 戻り値 // なし // 引数 // $in_sGroup GROUP ID // $in_sUser USER ID //--------------------------------------------- function LogoutEx($in_sGroup, $in_sUser) { if($in_sGroup == "jat") $in_sGroup = "ja"; $sParam = sprintf("GRP=%s&USR=%s", $in_sGroup, $in_sUser); $hServer = ServerConnect(USER_SERVER, USER_PORT); ServerSend($hServer, "usr_logout_ex.lua?".$sParam); ServerRecv($hServer, $sRecv); ServerClose($hServer); if(USER_SERVER_BACKUP != USER_SERVER) { $hServer = ServerConnect(USER_SERVER_BACKUP, USER_PORT); ServerSend($hServer, "usr_logout_ex.lua?".$sParam); ServerRecv($hServer, $sRecv); ServerClose($hServer); } } //--------------------------------------------- // 団体IDの取得 // // 戻り値 // 団体ID // 引数 // なし //--------------------------------------------- function GetGroupID() { $tHost = explode(".", getenv("HTTP_HOST")); return $tHost[0]; } //--------------------------------------------- // 名前の取得 // // 戻り値 // 名前 // 引数 // ID //--------------------------------------------- function GetUserName($in_sID) { $sParam = sprintf("ID=%s", $in_sID); $hServer = ServerConnect(USER_SERVER, USER_PORT); ServerSend($hServer, "usr_name4.lua?".$sParam); ServerRecv($hServer, $sRecv); ServerClose($hServer); return($sRecv); } //--------------------------------------------- // 私の本棚処理 //--------------------------------------------- // 保存データの読み込み // // 戻り値 // UNIQUE ID // 引数 // なし //--------------------------------------------- function MyBookSaveDataGet($in_iUnique, &$out_tMyBook) { $sParam = sprintf("UID=%d", $in_iUnique); $hServer = ServerConnect(USER_SERVER, USER_PORT); ServerSend($hServer, "mb_get.lua?".$sParam); ServerRecv($hServer, $sRecv); ServerClose($hServer); $tRecv = explode("\n", $sRecv); if($tRecv[0] == 0) $out_tMyBook = explode(",", $tRecv[1]); /*** printf("MyBook[%d]
",count($out_tMyBook)); for($iI = 0; $iI < count($out_tMyBook); $iI++) printf("%d [%s]
", $iI+1, $out_tMyBook[$iI]); ***/ } //--------------------------------------------- // クッキー処理 //--------------------------------------------- // クッキーの読み込み // // 戻り値 // UNIQUE ID // 引数 // なし //--------------------------------------------- function ReadCookie() { $iUnique = 0; // クッキーから取得 if(array_key_exists("RURALU", $_COOKIE)) { $iUnique = $_COOKIE["RURALU"]; } //print("\n"); return $iUnique; } //--------------------------------------------- // クッキーの書き込み // // 戻り値 // なし // 引数 // $in_iUnique ユニークID //--------------------------------------------- function WriteCookie($in_iUnique) { if($in_iUnique > 0) { $iTimeout = time() + 86400; $sBuf = sprintf("%d", $in_iUnique); setcookie("RURALU", $sBuf, $iTimeout, '/'); } else { $iTimeout = time() - 86400; setcookie("RURALU", "", $iTimeout, '/'); } } //--------------------------------------------- // 農薬DB //--------------------------------------------- // 農薬DB処理日の取得 // // 戻り値 // 処理日 // 引数 // なし //--------------------------------------------- function GetNouyakuExecuteDate() { $hServer = ServerConnect(DB_SERVER, SRCH_PORT); ServerSend($hServer, "n_date.lua"); ServerRecv($hServer, $sRecv); ServerClose($hServer); $sDate = ""; if($sRecv != "ERROR") { /**** $tDate = explode("/", $sRecv); $sDate = $tDate[0]."年".$tDate[1]."月".$tDate[2]."日"; ******/ $tDate = explode(",", $sRecv); $tDate1 = explode("/", $tDate[0]); $sDate = $tDate1[0]."年".$tDate1[1]."月".$tDate1[2]."日更新"; $tDate2 = explode("/", $tDate[1]); $sDate .= "(".$tDate2[0]."年".$tDate2[1]."月".$tDate2[2]."日登録反映分)"; } return $sDate; } //------------------------------------------- // 引数の取得 //------------------------------------------- $gtArg = array(); function GetArgument($in_sArg, $in_sKey) { global $gtArg; if(count($gtArg) == 0) { //printf("ARG[%s]
",$in_sArg); if(strpos($in_sArg, "=") !== false) { $tTemp = explode("=", $in_sArg); $in_sArg = $tTemp[1]; } $iPos = strpos($in_sArg, ".php"); if($iPos !== false) { $in_sArg = substr($in_sArg, 0, $iPos); } if(preg_match('/[^0-9a-f]/', $in_sArg)) { ErrorDisplay(122); exit(0); } $tTemp = explode("&", pack("H*", $in_sArg)); for($iI = 0; $iI < count($tTemp); $iI++) { $tTemp2 = explode("=", $tTemp[$iI]); if(count($tTemp2) != 2) continue; $sData = $tTemp2[1]; if($sData != "") { $sCode = mb_detect_encoding($sData); if($sCode === false) $sCode = "SJIS"; if($sCode == "SJIS") { $sData = mb_convert_encoding($sData, 'utf8', 'sjis-win'); } } $gtArg[$tTemp2[0]] = $sData; //printf("\n",$tTemp2[0], $tTemp2[1]); } } if(array_key_exists($in_sKey, $gtArg)) return $gtArg[$in_sKey]; else return ""; } //------------------------------------------- // 引数の追加 //------------------------------------------- function AddArgument($in_sKey, $in_sVal) { global $gtArg; $gtArg[$in_sKey] = $in_sVal; } //------------------------------------------- // 引数の削除 //------------------------------------------- function DelArgument($in_sKey) { global $gtArg; if(array_key_exists($in_sKey, $gtArg)) unset($gtArg[$in_sKey]); } //------------------------------------------- // 引数の存在チェック //------------------------------------------- function CheckArgument($in_sKey) { global $gtArg; return array_key_exists($in_sKey, $gtArg); } //------------------------------------------- // 引数の作成 //------------------------------------------- function CreateArgument($in_sKey, $in_sVal) { global $gtArg; $sBuf = ""; $bExist = false; if(is_array($gtArg)) { reset($gtArg); foreach($gtArg as $sKey => $sVal) { if($sKey == $in_sKey) { $bExist = true; $sVal = $in_sVal; } if($sBuf != "") $sBuf .= "&"; $sBuf .= $sKey."=".$sVal; } } if($in_sKey != "" && !$bExist) { if($sBuf != "") $sBuf .= "&"; $sBuf .= $in_sKey."=".$in_sVal; } return bin2hex($sBuf); } //------------------------------------------- // エンコードした引数への追加 //------------------------------------------- function AddEncArgument($in_sArg, $in_sKey, $in_sVal) { $tArg = array(); if($in_sArg != "") { $tTemp = explode("&", pack("H*", $in_sArg)); for($iI = 0; $iI < count($tTemp); $iI++) { $tTemp2 = explode("=", $tTemp[$iI]); $tArg[$tTemp2[0]] = $tTemp2[1]; } } $sBuf = ""; $bExist = false; reset($tArg); foreach($tArg as $sKey => $sVal) { if($sKey == $in_sKey) { $bExist = true; $sVal = $in_sVal; } if($sBuf != "") $sBuf .= "&"; $sBuf .= $sKey."=".$sVal; } if($in_sKey != "" && !$bExist) { if($sBuf != "") $sBuf .= "&"; $sBuf .= $in_sKey."=".$in_sVal; } return bin2hex($sBuf); } //------------------------------------------- // エンコードした引数から削除 //------------------------------------------- function DelEncArgument($in_sArg, $in_sKey) { $tArg = array(); $tTemp = explode("&", pack("H*", $in_sArg)); for($iI = 0; $iI < count($tTemp); $iI++) { $tTemp2 = explode("=", $tTemp[$iI]); $tArg[$tTemp2[0]] = $tTemp2[1]; } $sBuf = ""; reset($tArg); foreach($tArg as $sKey => $sVal) { if($sKey == $in_sKey) continue; if($sBuf != "") $sBuf .= "&"; $sBuf .= $sKey."=".$sVal; } return bin2hex($sBuf); } //--------------------------------------------- // その他 //--------------------------------------------- // ログ出力 // // 戻り値 // なし // 引数 // $in_sMsg メッセージ //--------------------------------------------- function LogOutput($in_sMsg) { $sFile = sprintf(LOG_FILE, date("Ym")); $dwFd = fopen($sFile, "a"); if($dwFd) { $sMsg = date("Y/m/d H:i:s ").$in_sMsg."\n"; fputs($dwFd, $sMsg); fclose($dwFd); } if((fileperms($sFile) & 0x0fff) != 0666) chmod($sFile, 0666); } function DebugLogOutput($in_sMsg) { $sFile = "/tmp/debug_".date("Ym").".txt"; $dwFd = fopen($sFile, "a"); if($dwFd) { $sMsg = date("Y/m/d H:i:s ").$_SERVER["SCRIPT_NAME"].":".$in_sMsg."\n"; fputs($dwFd, $sMsg); fclose($dwFd); } if((fileperms($sFile) & 0x0fff) != 0666) chmod($sFile, 0666); } function BrowserLog($in_sGroup, $in_sUser, $in_iLogout = 0) { $sKind = ""; if($in_sGroup != "") { $sParam = sprintf("GRP=%s", $in_sGroup); $sRecv = ''; $hServer = ServerConnect(USER_SERVER, OTHER_PORT); ServerSend($hServer, "class.lua?".$sParam); ServerRecv($hServer, $sRecv); ServerClose($hServer); $sKind = $sRecv; } $sBuf = date("Y/m/d H:i:s")."\t".$sKind."\t".$in_sGroup."\t".$in_sUser."\t"; if(isset($_SERVER['HTTP_USER_AGENT'])) { $dwFd = fopen("/home/logs/browser_".date("Ym").".txt", "a"); if($dwFd) { $sMsg = $sBuf.$_SERVER['HTTP_USER_AGENT']."\n"; fputs($dwFd, $sMsg); fclose($dwFd); } require_once('BrowserDetection.php'); $Browser = new foroco\BrowserDetection(); $useragent = $_SERVER['HTTP_USER_AGENT']; //DebugLogOutput($useragent); // Get all possible environment data (array): $tInfo = $Browser->getAll($useragent); $sOS = $tInfo["os_title"]; if($tInfo["64bits_mode"] == 1) $sOS .= " x64"; $sBrowser = $tInfo["browser_name"]."\t".$tInfo["browser_version"]."\t".$tInfo["browser_chromium_version"]; $sDevice = $tInfo["device_type"]; if($sDevice == "mobile") { require_once 'ruralsrch/Mobile_Detect.php'; $detect = new Mobile_Detect; if( $detect->isTablet() ) $sDevice = "tablet"; } else if($sDevice == "desktop") { if(strpos($useragent, ": RuralBrowser") !== false) { $sDevice = "touch panel"; $sBrowser = $tInfo["browser_name"]."(RuralBrowser)\t".$tInfo["browser_version"]."\t".$tInfo["browser_chromium_version"]; } else if($in_sGroup != "" && $in_iLogout > 0) { $sBrowser = $tInfo["browser_name"]."\t".$tInfo["browser_version"]."\t".$tInfo["browser_chromium_version"]; if($tInfo["browser_name"] == "Chrome") { $sDevice = "touch panel"; $sBrowser = $tInfo["browser_name"]."(RuralBrowser2)\t".$tInfo["browser_version"]."\t".$tInfo["browser_chromium_version"]; } else if($tInfo["browser_name"] == "Internet Explorer") { if(($iPos = strpos($useragent, "MSIE")) !== false) { $sAgent = substr($useragent, $iPos + 5); $iPos = strpos($sAgent, ";"); $iVer = substr($sAgent, 0, $iPos); if(floatval($iVer) < 8.0) { $sDevice = "touch panel"; $sBrowser = $tInfo["browser_name"]."(LimitedExplorer ".$iVer.")\t".$tInfo["browser_version"]."\t".$tInfo["browser_chromium_version"]; } } } } } $sBuf .= $sDevice."\t".$sOS."\t".$sBrowser; } else $sBuf .= "\t\t\t\t"; $dwFd = fopen("/home/logs/client_".date("Ym").".txt", "a"); if($dwFd) { $sMsg = $sBuf."\n"; fputs($dwFd, $sMsg); fclose($dwFd); } } function BrowserErrorLog($in_sUser, $in_sMsg) { global $gCgiPath; $dwFd = fopen($gCgiPath."log/browser_error.txt", "a"); if($dwFd) { $sMsg = date("Y/m/d H:i:s")."\t".$in_sUser."\t".$in_sMsg."\n"; fputs($dwFd, $sMsg); fclose($dwFd); } } function SmartPhoneLogin($in_sGroup, $in_sUser, $in_sMsg) { global $gCgiPath; $dwFd = fopen($gCgiPath."log/SmartPhone".date("Ym").".txt", "a"); if($dwFd) { $sMsg = date("Y/m/d H:i:s")."\t".$in_sGroup."\t".$in_sUser."\t".$in_sMsg."\t".$_SERVER['HTTP_USER_AGENT']."\n"; fputs($dwFd, $sMsg); fclose($dwFd); } } // 2009.10 //--------------------------------------------- // ログ出力 // // 戻り値 // なし // 引数 // $in_sMsg メッセージ //--------------------------------------------- function AccessLog($in_sMsg) { if(date("Hi") >= "0300" && date("Hi") <= "0310") return; $sParam = "LOG=".$in_sMsg; $hServer = ServerConnect(USER_SERVER, USER_PORT); ServerSend($hServer, "log2_put.lua?".$sParam); ServerRecv($hServer, $sRecv); ServerClose($hServer); } //--------------------------------------------- // ログ出力 // // 戻り値 // なし // 引数 // $in_sMsg メッセージ //--------------------------------------------- function AccessLog2($in_sMsg) { $sParam = "LOG=".$in_sMsg; $hServer = ServerConnect(USER_SERVER, USER_PORT); ServerSend($hServer, "log3_put.lua?".$sParam); ServerRecv($hServer, $sRecv); ServerClose($hServer); } //--------------------------------------------- // DEBUG PRINT // // 戻り値 // なし // 引数 // 可変 //--------------------------------------------- function debug_print() { Global $bDebug; if($bDebug) { $iCnt = func_num_args(); if($iCnt > 0) { $sBuf = func_get_arg(0); for($iI = 1; $iI < $iCnt; $iI++) { $iPos1 = strpos($sBuf, "%"); if($iPos1 === false) break; $iPos2 = strpos($sBuf, "%", $iPos1+1); if($iPos2 === false) { $sBuf2 = func_get_arg($iI); $sBuf = sprintf($sBuf, $sBuf2); break; } else { $sBuf3 = substr($sBuf, 0, $iPos2); $sBuf2 = func_get_arg($iI); $sBuf = sprintf($sBuf3, $sBuf2).substr($sBuf, $iPos2); } } print($sBuf); } } } //------------------------------------------- // ルーラル管理用IPアドレスチェック //------------------------------------------- function KanriIPCheck() { global $gtIP; global $tSakuhin; $tNetMask = array(0x0, 0x80, 0xc0, 0xe0, 0xf0, 0xf8, 0xfc, 0xfe); $sIP = getenv("REMOTE_ADDR"); $tIP = explode(".", $sIP); $sIP = sprintf("%03d.%03d.%03d.%03d", intval($tIP[0]), intval($tIP[1]), intval($tIP[2]), intval($tIP[3])); $bRet = false; for($iI = 0; $iI < count($gtIP); $iI++) { $tIP2 = explode(".", $gtIP[$iI]); if(strpos($tIP2[3], "/") > 0) { if(intval($tIP[0]) == intval($tIP2[0]) && intval($tIP[1]) == intval($tIP2[1]) && intval($tIP[2]) == intval($tIP2[2])) { $tMask = explode("/", $tIP2[3]); //printf("\n", $tMask[1]-24, $tNetMask[$tMask[1]-24] &intval($tIP[3])); if(($tNetMask[$tMask[1]-24] & intval($tIP[3])) == intval($tIP2[3])) { $bRet = true; break; } } } else { if(intval($tIP[0]) == intval($tIP2[0]) && intval($tIP[1]) == intval($tIP2[1]) && intval($tIP[2]) == intval($tIP2[2]) && intval($tIP[3]) == intval($tIP2[3])) { $bRet = true; break; } } } if(!$bRet) { ErrorDisplay(116); exit(0); } } //--------------------------------------------- // エラー定義 //--------------------------------------------- // エラーハンドラ関数 // // 戻り値 // なし // 引数 // $in_iErrno エラー番号 // $in_sErrmsg メッセージ // $in_sErrfile ファイル // $in_iErrline エラー行 //--------------------------------------------- function ErrorHandler($in_iErrno, $in_sErrmsg, $in_sErrfile, $in_iErrline) { global $g_sMsg; global $gSendBuf; if($in_iErrno == 8192) return true; if (!(error_reporting() & $in_iErrno)) return false; if(strpos($in_sErrmsg, "count():") !== false) return true; if(strpos($in_sErrmsg, "include(") !== false) return true; $sMsg = "Unknown : [".$in_iErrno."] ".$in_sErrmsg." line=".$in_iErrline." file=".$in_sErrfile; LogOutput($sMsg); if($gSendBuf != "") LogOutput("[".$gSendBuf."]"); if(strpos($in_sErrfile, "ruralinit") !== false) { $tTrace = debug_backtrace(); for($iI = 1; $iI < count($tTrace); $iI++) { $sMsg = " --> file:".$tTrace[$iI]["file"]; $sMsg .= " line:".$tTrace[$iI]["line"]; $sMsg .= " func:".$tTrace[$iI]["function"]; LogOutput($sMsg); } if(isset($_SERVER["REMOTE_HOST"])) LogOutput(" --> ".$_SERVER["REMOTE_HOST"]."(".$_SERVER["REMOTE_ADDR"].")"); if(isset($_SERVER["HTTP_REFERER"])) LogOutput(" Referer : ".$_SERVER["HTTP_REFERER"]); } if(isset($_SERVER["SERVER_NAME"])) LogOutput(" --> ".$_SERVER["SERVER_NAME"].$_SERVER["REQUEST_URI"]); if($g_sMsg != '') Logout($g_sMsg); return true; } // エラーハンドラを設定する $hError = set_error_handler("ErrorHandler"); function exception_handler($exception) { $sMsg = "[FATAL] ".$exception->getFile().":".$exception->getLine().":".$exception->getMessage(); LogOutput($sMsg); ErrorDisplay(999); } set_exception_handler('exception_handler'); ?>