#!/usr/bin/php "pasori_test", //デーモン名 "authorEmail" => "admin@genkikko.net", //メールアドレス "appDir" => __DIR__."/", //デーモンが動作する場所 "logLocation" => __DIR__."/pasori_test/pasori_test.log", //ログファイル "appPidLocation" => __DIR__."/pasori_test/pasori_test.pid", //pidファイル "appRunAsUID" => 1000, //動作UID "appRunAsGID" => 1000 //動作GID ); //------基本設定------------------------------------------- $log = true; //ログ吐くかどうか $daemon = true; //デーモン動作するか.trueで無限ループ.falseでループ部分処理せず. $echo = true; //いろんなとこのechoを行うかどうか //------DB設定(カードのIDを登録してる)--------------------- $dbhost = "123.456.78.90"; // postgresqlサーバアドレス $dbport = "5432"; // postgresqlサーバポート $dbuser = "psqluser"; // postgresqlユーザID $dbpassword = "psqlpass"; // postgresqlパスワード $dbtable = "pasori"; // postgresqlテーブル名 //LLLLLLLLLLLLLLLLLLLLLLLLLLL 設定ここまで LLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLLL if($echo) echo "\n"; System_Daemon::setOptions($options); //daemonの設定を書き込む System_Daemon::start(); //ここからDaemon if($log){ $LogStr = "--- PasoriTest Daemon start. ---"; System_Daemon::log(System_Daemon::LOG_INFO, $LogStr ); } /******************************************** * *** ここから無限ループ *** * ********************************************/ while(!System_Daemon::isDying() && $daemon){ $str = `felica_dump | grep "card IDm"`; // カード情報からIDmを取得する. //カードが無ければ$strは空になる. if($str){ $str = str_replace(" ",null,$str); $str = preg_replace("/\n.*/",null,$str); list(,$str) = explode("=",$str); //ここで$strの中身はcard IDmだけになってる. //前回の状態と変わらないときは何もしない if($str != $o_str){ if($echo) echo "-----------------------\n"; //********* PostgreSQL接続 *************** // データベースにあるCard IDmを照会する. //**************************************** $cn = pg_connect("host={$dbhost} port={$dbport} user={$dbuser} password={$dbpassword}"); $rs = pg_query($cn,"select username,status,comment from {$dbtable} where idm = '{$str}'"); pg_close($cn); //******** PostgreSQL切断 **************** $row = pg_num_rows($rs); //照合結果の行数を見る.IDmはuniqueなので1列か0列のはず. if($row == 1){ //$rsが1行ならデータベースに載ってるカード $dat = pg_fetch_array($rs,0); //$datに照合結果を入れる.カラム名の連想配列になってる. if($dat['status'] == 1){ //statusが1になってるカードは使える. if($echo){ echo "OK!\n"; echo "User : {$dat['username']}\n"; echo "Detail : {$dat['comment']}\n"; } if($log){ $LogStr = date('Y/m/d H:i:s')." OK! {$dat['username']} {$dat['comment']}"; System_Daemon::log(System_Daemon::LOG_INFO, $LogStr ); } }else{ //DBにあるけどstatusが1じゃないカードは利用停止中.つまり不正アクセスの試行. if($echo) { echo "Error! Stopped card\n"; echo "使用停止中のカードです\n"; echo "User : {$dat['username']}\n"; echo "Detail : {$dat['comment']}\n"; } if($log){ $LogStr = date('Y/m/d H:i:s')." NG! {$dat['username']} {$dat['comment']}"; System_Daemon::log(System_Daemon::LOG_INFO, $LogStr ); } } }elseif($row == 0){ //$rsが0行なら未登録カード.つまり不正アクセスの試行. if($echo) { echo "Error! Unknown card\n"; echo "登録されていないカードです\n"; } if($log){ $LogStr = date('Y/m/d H:i:s')." NG! Unknown Card! {$str}"; System_Daemon::log(System_Daemon::LOG_INFO, $LogStr ); } }else{ //$rsが0行でも1行でもないってことは多分無い. if($echo) { echo "Error!\n"; echo "不明なエラーです\n"; } if($log){ $LogStr = date('Y/m/d H:i:s')." NG! Unknown Error"; System_Daemon::log(System_Daemon::LOG_INFO, $LogStr ); } } if($echo) echo "-----------------------\n\n"; } }elseif($o_str != $str){ //前回と変わって$strが空ってことは,カードが無くなったってこと. if($echo) { echo "++++++++++++\n"; echo "+ no cards +\n"; echo "++++++++++++\n\n"; } } $o_str = $str; //今回の情報を残して unset($str); //$strを消しておく. usleep(100000); //ちょっと待ってループ System_Daemon::iterate(0); } ?>