$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');
?>