X-Git-Url: http://git.osdn.net/view?a=blobdiff_plain;f=write.php;h=b3e77af66bfedde1b8443447e9c5033248292436;hb=HEAD;hp=3d8549bfea1f7f765450efe69a9a4c3c657f318b;hpb=c1cb4ba8b6bcbffdc776aa2150e699f40d92e1be;p=trpgtools-onweb%2FAjaxChat.git diff --git a/write.php b/write.php index 3d8549b..b3e77af 100644 --- a/write.php +++ b/write.php @@ -1,64 +1,89 @@ $v) { +// 受信データの成形 +foreach($request as $k => $v) { $data[$k] = htmlspecialchars($v); } - - // PC名がない場合PL名 +// PC名がない場合PL名 if (!$data['c']) $data['c'] = $data['n']; -$ua = getenv("HTTP_USER_AGENT"); - - // コメント本文の処理:(予定)ダイス、カード、タグ有効[b,span,i,u]、オートリンク、禁止語句処理など - // ダイス -if ($dice_max) { - if(preg_match("/(.*)[[]\({0,}([0-9]{1,3})([dD])([0-9]{1,3})([-\+\*\/0-9\s]{0,}[\]])(.*$)/i", $data['m'], $dice)) { - $dice_result = dice_convert($dice[2], $dice[4], $dice[5], $dice_max, $dice_color); - $data['m'] = $dice[1].$dice_result.$dice[6]; +// コメント本文の処理:(予定)ダイス、カード、タグ有効[b,span,i,u]、オートリンク、禁止語句処理など +// 改行 +$data['m'] = convertCr($data['m']); + +// ダイス対応 +if (DICE_MAX != 0) { + // コメント欄 + $data['m'] = convert_dice($data['m']); + // ステータス欄 + if ($data['s'] && $data['t']) { + $data['t'] = convert_dice($data['t']); } } +// HTMLタグ +$data['m'] = convert_html_tag($data['m']); +if ($data['s'] && $data['t']) { + $data['t'] = convert_html_tag($data['t']); +} +// オートリンク +$data['m'] = convert_autolink($data['m']); +if ($data['s'] && $data['t']) { + $data['t'] = convert_autolink($data['t']); +} // 既存ログのチェック if(!is_array($log)){ @@ -80,163 +105,86 @@ if($stopflag==0) { $last_id = 1; } - // 書き込み整形 + // 書き込み成形 $write = ""; // ログイン if ($data['y'] =='in') { - $pcname = $system; - $data['m'] = $data['n'].$online_msg; - $data['l'] = $color_system; + $pcname = SYSTEM; + $data['m'] = $data['n'].ONLINE_MSG; + $data['l'] = COLOR_SYSTEM; $data['s'] = 0; // ログアウト } elseif ($data['y'] == 'out') { - $pcname = $system; - $data['m'] = $data['n'].$offline_msg; - $data['l'] = $color_system; + $pcname = SYSTEM; + $data['m'] = $data['n'].OFFLINE_MSG; + $data['l'] = COLOR_SYSTEM; + $data['s'] = 0; + // カード操作 + } elseif ($data['y'] == 'card') { + $pcname = SYSTEM; + $data['m'] = $data['n'].'さんが'.$data['m']; + $data['l'] = COLOR_SYSTEM; + $data['s'] = 0; + // メンバー削除 + } elseif ($data['y'] == 'delMember') { + $pcname = SYSTEM; + $data['m'] = $data['n'].'さんが'.$data['dn'].'さんを参加者一覧から削除しました'; + $data['l'] = COLOR_SYSTEM; $data['s'] = 0; } else { $pcname = $data['c']; } - if ($data['n'] && $data['p']) { - $pwd = create_hash($data['n'],$data['p']); + $pwd = create_hash($data['n'], $data['p']); + } + $dm = $data['m']; + $dn = $data['n']; + $dw = $data['w']; + $dh = $data['h']; + $dt = $data['t']; + + // 難読化 + if (OBFUSCATION) { + $pcname = obf_xor($pcname); + $dm = obf_xor($dm); + $dn = obf_xor($dn); + if ($dw) $dw = obf_xor($dw); + if ($dt) $dt = obf_xor($dt); } - $write = $last_id."<>".$data['n']."<>".$pcname."<>".$data['l']."<>".$data['m']."<>".time()."<>".$host."<>".$ua."<>".$pwd."<>".$data['w']."<>".$data['h']."<>".$data['s']."<>".$data['t']."<>".$data['a']."\n"; + + $write = $last_id."<>".$dn."<>".$pcname."<>".$data['l']."<>".$dm."<>".time()."<>".$host."<>".$ua."<>".$pwd."<>".$dw."<>".$dh."<>".$data['s']."<>".$dt."<>\n"; array_unshift($log[0], $write); //最大行数を超えていたら最終行を削除 - if (count($log[0]) >= $max_num) { + if (count($log[0]) >= MAX_NUM) { array_pop($log[0]); } // ログファイル更新 - $fp = @fopen($recent_log, "w+") or die("ログファイルを開けません。"); + $fp = @fopen(RECENT_LOG, "w+") or error("ログファイルを開けません。", true); //$bom = "\xef\xbb\xbf"; //fwrite($fp, $bom); - foreach($log[0] as $k => $v) { - fwrite($fp, $v); - } + foreach($log[0] as $k => $v) { + fwrite($fp, $v); + } fclose($fp); } - //直近の過去ログ更新 - write_recent_past($write, $past_log); +//直近の過去ログ更新 +write_recent_past($write, PAST_LOG); - // ロック解除 +// ロック解除 fflush($lfp); fclose($lfp); - //参加者チェッカーに書き込み -member_checker($data['n'], $pwd, $data['y'], $now_member, $getdata_off); - -1; - - -/**** ここから関数 ****/ - -// 直近の過去ログ -function write_recent_past($write, $pdata) { - $pfp = @fopen($pdata, "a+") or die("過去ログファイルを開けません。"); - - fwrite($pfp, $write); - - return true; -} - -function dice_convert($dicenum, $dicenumber, $revision, $dice_max, $color) { - - // ダイス本体 - if($dicenum >= 1 && $dicenum <= $dice_max) { - if ($dicenumber >= 1 && $dicenumber <= 100) { - mt_srand((double) microtime() * 1000000); - $dicesum = 0; - for ($i=0; $i<$dicenum; $i++) { - $d_result[$i] = mt_rand(1,$dicenumber); - $dice_sum += $d_result[$i]; - if ($i != 0) { - $dice_list .= ", ".$d_result[$i]; - } else { - $dice_list = " (".$d_result[$i]; - } - } - $dice_list .= ")"; - } else { - return $dice.' (d2~d100の範囲で指定してください)'; - } - } else { - return $dice.' (ダイスの数は1から'.$dice_max.'の間で指定してください)'; - } - - // 修正値を加えた結果の計算 - if(rtrim($revision, "]")) { - $dice = preg_replace("/\s/","+",$dice); - $value = calc_value($dice_sum, $revision); - } else { - $value = $dice_sum; - } - - if (!is_numeric($value)) { - return ''.$dice.' ('.$value.')'; - } else { - $dice = '['.$dicenum.'d'.$dicenumber.$revision.' :'.$dice_list.' = '.$value.''; - return $dice; - } +//参加者チェッカーに書き込み +if ($data['y'] != 'delMember') { + member_checker($dn, $pwd, $request['y'], false); } -/* ダイス修正値の計算 - */ -function calc_value($dice_sum, $revision) { - $multi = preg_match("/\*/", $revision); - $dev = preg_match("/\//", $revision); - $add = preg_match("/\+/", $revision); - $subtract = preg_match("/\-/", $revision); - - // +-*/で分割 - $revision = preg_replace("/\+/","<>+<>",$revision); - $revision = preg_replace("/\-/","<>-<>",$revision); - $revision = preg_replace("/\*/","<>*<>",$revision); - $revision = preg_replace("/\//","<>/<>",$revision); - $parts = explode("<>",$revision); - array_splice($parts, 0, 1, $dice_sum); - - // 乗算&除算 - if ($multi || $dev) { - foreach ($parts as $k => $v) { - if ($v != '0' && $v == '*') { - if (!preg_match("/[0-9]{1,}/", $parts[$k+1])) return "演算子が連続してます"; - $flg = $k; - array_splice($parts, $k+1, 1, $parts[$k-1] * $parts[$k+1]); - array_splice($parts, $k-1, 1, 0); - array_splice($parts, $k, 1, $parts[$k-2]); - array_splice($parts, $k-2, 1, '+'); - } - if ($v != '0' && $v == '/') { - if (!preg_match("/[0-9]{1,}/", $parts[$k+1])) return "演算子が連続してます"; - array_splice($parts, $k+1, 1, $parts[$k-1] / $parts[$k+1]); - array_splice($parts, $k-1, 1, 0); - array_splice($parts, $k, 1, $parts[$k-2]); - array_splice($parts, $k-2, 1, '+'); - } - } - } - - // 加減算 - foreach ($parts as $k => $v){ - if ($v != '0') { - if ($v == '+') { - if (!preg_match("/[0-9]{1,}/", $parts[$k+1])) return "演算子が連続してます"; - array_splice($parts, 0, 1, $parts[0] + $parts[$k+1]); - } elseif ($v == '-') { - if (!preg_match("/[0-9]{1,}/", $parts[$k+1])) return "演算子が連続してます"; - array_splice($parts, 0, 1, $parts[0] - $parts[$k+1]); - } - } - } - - return round($parts[0], 1); -} +exit; - ?> \ No newline at end of file +?>