$___TEMP_CONN_PORT = $chosen; } else { __SOCKET_ERRORLOG__('无法打开gamedata/tmp/server目录。'); } __SOCKET_SEND_TO_SERVER__(); __SOCKET_DEBUGLOG__('Client执行完成。'); die; } else { //否则是由server自行引用的command.php,开始执行 $pagestartime = microtime(true); } } } else { $pagestartime = microtime(true); require GAME_ROOT . './include/common.inc.php'; $timecost2 = get_script_runtime($pagestartime); } //////////////////////////////////////////////////////////////////////////// //////////////////////////游戏前玩家信息检查/////////////////////////////////// //////////////////////////////////////////////////////////////////////////// if (!$cuser || !$cpass) { gexit($_ERROR['no_login'], __FILE__, __LINE__); return; } $result = $db->query("SELECT * FROM {$tablepre}players WHERE name = '{$cuser}' AND type = 0"); if (!$db->num_rows($result)) { $gamedata['url'] = 'valid.php'; ob_clean(); $jgamedata = base64_encode(gzencode(compatible_json_encode($gamedata))); echo $jgamedata; return;
function __SOCKET_SEND_TO_SERVER__() { global $___MOD_CONN_W_DB; global $___TEMP_tablepre, $___TEMP_db; //准备用户输入数据 $___TEMP_data = array(); $_COOKIE = gstrfilter($_COOKIE); foreach ($_COOKIE as $key => $value) { $___TEMP_data[$key] = $value; } $_POST = gstrfilter($_POST); foreach ($_POST as $key => $value) { $___TEMP_data[$key] = $value; } global $cli_pagestartime; $___TEMP_data['___PAGE_STARTTIME_VALUE'] = $cli_pagestartime; if (isset($___TEMP_data['game_roomid'])) { $game_roomid = $___TEMP_data['game_roomid']; } else { $game_roomid = ''; } $___TEMP_data['___GAME_ROOMID'] = $game_roomid; //防止注入,去掉不合法变量名,去掉可能的global名称 $___TEMP_data_keys = array_keys($___TEMP_data); foreach ($___TEMP_data_keys as $keyc) { if (!($keyc != '' && ('a' <= $keyc[0] && $keyc[0] <= 'z' || 'A' <= $keyc[0] && $keyc[0] <= 'Z' || $keyc[0] == '_') && check_alnumudline($keyc))) { unset($___TEMP_data[$keyc]); } } if (isset($___TEMP_data['_COOKIE'])) { unset($___TEMP_data['_COOKIE']); } if (isset($___TEMP_data['_POST'])) { unset($___TEMP_data['_POST']); } if (isset($___TEMP_data['_REQUEST'])) { unset($___TEMP_data['_REQUEST']); } if (isset($___TEMP_data['_GLOBALS'])) { unset($___TEMP_data['_GLOBALS']); } if (isset($___TEMP_data['GLOBALS'])) { unset($___TEMP_data['GLOBALS']); } //存储用户输入数据 $___TEMP_uid = uniqid('', true); //获取唯一ID ob_clean(); var_export($___TEMP_data); $___TEMP_data = ob_get_contents(); ob_clean(); if ($___MOD_CONN_W_DB) { $___TEMP_db->query("INSERT INTO {$___TEMP_tablepre}temp (sid,value) VALUES ('{$___TEMP_uid}','" . base64_encode($___TEMP_data) . "')"); } else { global $___MOD_TMP_FILE_DIRECTORY; if (!file_exists($___MOD_TMP_FILE_DIRECTORY . $game_roomid . '_')) { create_dir($___MOD_TMP_FILE_DIRECTORY . $game_roomid . '_'); } else { if (!is_dir($___MOD_TMP_FILE_DIRECTORY . $game_roomid . '_')) { unlink($___MOD_TMP_FILE_DIRECTORY . $game_roomid . '_'); create_dir($___MOD_TMP_FILE_DIRECTORY . $game_roomid . '_'); } } writeover($___MOD_TMP_FILE_DIRECTORY . $game_roomid . '_/' . $___TEMP_uid, $___TEMP_data); } //连接server global $___TEMP_CONN_PORT; $___TEMP_socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP); if ($___TEMP_socket === false) { __SOCKET_ERRORLOG__("socket_create失败。"); } $___TEMP_connected = socket_connect($___TEMP_socket, '127.0.0.1', $___TEMP_CONN_PORT); if (!$___TEMP_connected) { __SOCKET_ERRORLOG__("socket_connect失败。"); } /* //允许3秒等待 if (!__SOCKET_CHECK_WITH_TIMEOUT__($___TEMP_socket, 'w', 3, 0)) __SOCKET_ERRORLOG__("socket_write等待时间过长。"); */ //发送消息给server global $___MOD_CONN_PASSWD; if (!socket_write($___TEMP_socket, $___MOD_CONN_PASSWD . $game_roomid . '_/' . $___TEMP_uid . "\n")) { __SOCKET_ERRORLOG__("socket_write失败"); } __SOCKET_DEBUGLOG__("消息已发送,等待回应。"); /* //允许3秒等待 if (!__SOCKET_CHECK_WITH_TIMEOUT__($___TEMP_socket, 'r', 3, 0)) __SOCKET_ERRORLOG__("socket_read等待时间过长。"); */ $___TEMP_ret = socket_read($___TEMP_socket, 1024, PHP_NORMAL_READ); if ($___TEMP_ret === false) { socket_shutdown($___TEMP_socket); __SOCKET_ERRORLOG__("socket_read失败。关闭连接。"); } else { __SOCKET_DEBUGLOG__("回应已读取,关闭连接。"); socket_shutdown($___TEMP_socket); } $___TEMP_ret = substr($___TEMP_ret, 0, -1); //去掉换行 if ($___TEMP_ret != $___MOD_CONN_PASSWD . '_ok') { __SOCKET_ERRORLOG__("未知返回信息 " . $___TEMP_ret . ' 。'); } if ($___MOD_CONN_W_DB) { $result = $___TEMP_db->query("SELECT value FROM {$___TEMP_tablepre}temp WHERE sid='{$___TEMP_uid}'"); if (!$___TEMP_db->num_rows($result)) { __SOCKET_ERRORLOG__("数据库中没有记录名为 {$___TEMP_uid} 的记录。"); } $___TEMP_res = $___TEMP_db->fetch_array($result); $___TEMP_res = $___TEMP_res['value']; $___TEMP_res = base64_decode($___TEMP_res); $___TEMP_db->query("DELETE FROM {$___TEMP_tablepre}temp WHERE sid='{$___TEMP_uid}'"); } else { global $___MOD_TMP_FILE_DIRECTORY; $___TEMP_res = file_get_contents($___MOD_TMP_FILE_DIRECTORY . $game_roomid . '_/' . $___TEMP_uid); if (!defined('MOD_REPLAY')) { //如果录像模式开启,最后删缓存的工作由录像模块进行 unlink($___MOD_TMP_FILE_DIRECTORY . $room_prefix . '_/' . $___TEMP_uid); } } __SOCKET_DEBUGLOG__("已载入回应文件。"); global $cli_pagestartime; $timecost = get_script_runtime($cli_pagestartime); if ($timecost > 0.15) { __SOCKET_WARNLOG__("警告:本次操作耗时较长,耗时为 " . $timecost . " 秒。"); } /* $___TEMP_res = str_replace('_____PAGE_RUNNING_TIME_____',(string)$timecost,$___TEMP_res); */ ob_clean(); echo $___TEMP_res; ob_end_flush(); }