OSDN Git Service

trpgchat ver2.6.1
[trpgtools-onweb/AjaxChat.git] / write.php
1 <?php
2 /*
3  Ajax Chat for TRPG ver.2.6.1
4  (c)2007-2009 Cake All Rights Reserved.
5  Mail : cake_67@users.sourceforge.jp
6  Home : http://trpgtools-onweb.sourceforge.jp/
7  */
8
9 /* 発言書込み */
10
11 // デバッグ用設定
12 ini_set('log_errors', false);
13 ini_set('error_log', "./php_error.log");
14
15 // 設定ファイルの読み込み
16 require_once './trpgchat-ini.php';
17 require_once './lib/trpgchat.php';
18 require_once './lib/write.php';
19 require_once './lib/member_check.php';
20
21 // 設定セット
22 set_config(read_config());
23 if (DICE_MAX != 0) {
24     require_once './lib/trpg.php';
25 }
26
27 // ユーザの情報
28 if (REC_UA) {
29     $host = gethostbyaddr($_SERVER['REMOTE_ADDR']);
30     $ua = getenv("HTTP_USER_AGENT");
31 }
32
33 // 書き込みブロック
34 write_block();
35
36 // アクセスブロック
37 access_block();
38
39 // リクエスト受信
40 if (!$request = $_GET) {
41     error('データを受信できません');
42 }
43
44 // PL名・コメントがなければ書込みはできない(含ロボット対策)
45 if (!$request['n']) error("書きこみできません");
46 if (($request['y'] != 'in' && $request['y'] != 'out') && $request['m'] == '') error("書きこみできません。");
47
48 // ファイルロック
49 $lfp = fopen(LOCK,"w");
50 stream_set_write_buffer($lfp, 0);
51 flock($lfp,LOCK_EX);
52
53 // 既存ファイル内容の格納
54 $log = array();
55 $log[] = file(RECENT_LOG);
56
57 // 受信データの成形
58 foreach($request as $k => $v) {
59     $data[$k] = htmlspecialchars($v);
60 }
61 // PC名がない場合PL名
62 if (!$data['c']) $data['c'] = $data['n'];
63
64 // コメント本文の処理:(予定)ダイス、カード、タグ有効[b,span,i,u]、オートリンク、禁止語句処理など
65 // ダイス対応
66 if (DICE_MAX != 0) {
67     // コメント欄
68     $data['m'] = convert_dice($data['m']);
69     // ステータス欄
70     if ($data['s'] && $data['t']) {
71         $data['t'] = convert_dice($data['t']);
72     }
73 }
74 // HTMLタグ
75 $data['m'] = convert_html_tag($data['m']);
76 if ($data['s'] && $data['t']) {
77     $data['t'] = convert_html_tag($data['t']);
78 }
79 // オートリンク
80 $data['m'] = convert_autolink($data['m']);
81 if ($data['s'] && $data['t']) {
82     $data['t'] = convert_autolink($data['t']);
83 }
84
85 // 既存ログのチェック
86 if(!is_array($log)){
87     $log = array();
88 } else {
89     $stopflag=0;
90     foreach ($log[0] as $k => $v){
91         $temp[$k] = explode("<>", $v);
92     }
93 }
94
95 // 書込み
96 if($stopflag==0) {
97
98     // 最新ログNO
99     if ($temp[0][0]) {
100         $last_id = $temp[0][0]+1;
101     } else {
102         $last_id = 1;
103     }
104
105     // 書き込み成形
106     $write = "";
107         // ログイン
108     if ($data['y'] =='in') {
109         $pcname = SYSTEM;
110         $data['m'] = $data['n'].ONLINE_MSG;
111         $data['l'] = COLOR_SYSTEM;
112         $data['s'] = 0;
113         // ログアウト
114     } elseif ($data['y'] == 'out') {
115         $pcname = SYSTEM;
116         $data['m'] = $data['n'].OFFLINE_MSG;
117         $data['l'] = COLOR_SYSTEM;
118         $data['s'] = 0;
119         // カード操作
120     } elseif ($data['y'] == 'card') {
121         $pcname = SYSTEM;
122         $data['m'] = $data['n'].'さんが'.$data['m'];
123         $data['l'] = COLOR_SYSTEM;
124         $data['s'] = 0;
125     } else {
126         $pcname = $data['c'];
127     }
128     if ($data['n'] && $data['p']) {
129         $pwd = create_hash($data['n'],$data['p']);
130     }
131     $dm = $data['m'];
132     $dn = $data['n'];
133     $dw = $data['w'];
134     $dh = $data['h'];
135     $dt = $data['t'];
136
137     // 難読化
138     if (OBFUSCATION) {
139         $pcname = obf_xor($pcname);
140         $dm = obf_xor($dm);
141         $dn = obf_xor($dn);
142         if ($dw) $dw = obf_xor($dw);
143         if ($dt) $dt = obf_xor($dt);
144     }
145
146
147     $write = $last_id."<>".$dn."<>".$pcname."<>".$data['l']."<>".$dm."<>".time()."<>".$host."<>".$ua."<>".$pwd."<>".$dw."<>".$dh."<>".$data['s']."<>".$dt."<>\n";
148
149     array_unshift($log[0], $write);
150
151     //最大行数を超えていたら最終行を削除
152     if (count($log[0]) >= MAX_NUM) {
153         array_pop($log[0]);
154     }
155
156     // ログファイル更新
157     $fp = @fopen(RECENT_LOG, "w+") or error("ログファイルを開けません。", true);
158     //$bom = "\xef\xbb\xbf";
159     //fwrite($fp, $bom);
160
161     foreach($log[0] as $k => $v) {
162         fwrite($fp, $v);
163     }
164     fclose($fp);
165 }
166
167 //直近の過去ログ更新
168 write_recent_past($write, PAST_LOG);
169
170 // ロック解除
171 fflush($lfp);
172 fclose($lfp);
173
174 //参加者チェッカーに書き込み
175 member_checker($dn, $pwd, $request['y'], false);
176
177 exit;
178
179 ?>