Пример #1
0
function init()
{
    $INPUT_VAR_LIST = array();
    global $___MOD_SRV;
    if (isset($_COOKIE)) {
        $_COOKIE = gstrfilter($_COOKIE);
        foreach ($_COOKIE as $key => $value) {
            $key = (string) $key;
            if ($key != '' && ('a' <= $key[0] && $key[0] <= 'z' || 'A' <= $key[0] && $key[0] <= 'Z' || $key[0] == '_') && check_alnumudline($key)) {
                global ${$key};
                ${$key} = $value;
            }
        }
    }
    if (isset($_POST)) {
        $_POST = gstrfilter($_POST);
        foreach ($_POST as $key => $value) {
            $key = (string) $key;
            if ($key != '' && ('a' <= $key[0] && $key[0] <= 'z' || 'A' <= $key[0] && $key[0] <= 'Z' || $key[0] == '_') && check_alnumudline($key)) {
                global ${$key};
                ${$key} = $value;
            }
        }
    }
    if (isset($_REQUEST)) {
        $_REQUEST = gstrfilter($_REQUEST);
        foreach ($_REQUEST as $key => $value) {
            $key = (string) $key;
            if ($key != '' && ('a' <= $key[0] && $key[0] <= 'z' || 'A' <= $key[0] && $key[0] <= 'Z' || $key[0] == '_') && check_alnumudline($key)) {
                global ${$key};
                ${$key} = $value;
            }
        }
    }
}
Пример #2
0
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();
}