📄 msession.c
字号:
szsession = Z_STRVAL_PP(session); szname = Z_STRVAL_PP(name); szvalue = Z_STRVAL_PP(value); FormatRequest(&s_reqb, REQ_GETVAL, szsession, szname, szvalue,0); PHPDoRequest(&s_conn, &s_reqb); if(s_reqb->req.stat==REQ_OK) { szvalue = safe_estrdup(s_reqb->req.datum); RETURN_STRING(szvalue, 0) } else { php_error(E_WARNING, s_szErrFmt, get_active_function_name(TSRMLS_C), ReqbErr(s_reqb)); RETURN_NULL(); } IFCONNECT_END}/* }}} *//* {{{ proto string msession_uniq(int num_chars) Get uniq id */PHP_FUNCTION(msession_uniq){ IFCONNECT_BEGIN long val; zval **param; if(ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1,¶m) == FAILURE) { WRONG_PARAM_COUNT; } convert_to_long_ex(param); val = Z_LVAL_PP(param); FormatRequest(&s_reqb, REQ_UNIQ,"", "", "",val); PHPDoRequest(&s_conn, &s_reqb); if(s_reqb->req.stat==REQ_OK) { char *szval = safe_estrdup(s_reqb->req.datum); RETURN_STRING(szval, 0) } else { php_error(E_WARNING, s_szErrFmt, get_active_function_name(TSRMLS_C), ReqbErr(s_reqb)); RETURN_NULL(); } IFCONNECT_END}/* }}} *//* {{{ proto string msession_randstr(int num_chars) Get random string */PHP_FUNCTION(msession_randstr){ IFCONNECT_BEGIN long val; zval **param; if(ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1,¶m) == FAILURE) { WRONG_PARAM_COUNT; } convert_to_long_ex(param); val = Z_LVAL_PP(param); FormatRequest(&s_reqb, REQ_RANDSTR,"", "", "",val); PHPDoRequest(&s_conn, &s_reqb); if(s_reqb->req.stat==REQ_OK) { char *szval = safe_estrdup(s_reqb->req.datum); RETURN_STRING(szval, 0) } else { php_error(E_WARNING, s_szErrFmt, get_active_function_name(TSRMLS_C), ReqbErr(s_reqb)); RETURN_NULL(); } IFCONNECT_END}/* }}} *//* {{{ proto array msession_find(string name, string value) Find all sessions with name and value */PHP_FUNCTION(msession_find){ IFCONNECT_BEGIN char *szname; char *szvalue; zval **name; zval **value; if(ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &name, &value) == FAILURE) { WRONG_PARAM_COUNT; } convert_to_string_ex(name); convert_to_string_ex(value); szname = Z_STRVAL_PP(name); szvalue = Z_STRVAL_PP(value); FormatRequest(&s_reqb, REQ_FIND, "", szname, szvalue,0); PHPDoRequest(&s_conn,&s_reqb); if(s_reqb->req.stat==REQ_OK && s_reqb->req.param) { int i; char *str = s_reqb->req.datum; array_init(return_value); for(i=0; i < s_reqb->req.param; i++) { int cbstr = strlen(str); char *data = safe_estrdup(str); add_index_string(return_value, i, data, 0); str += (cbstr+1); } } else if(s_reqb->req.stat != REQ_OK) { php_error(E_WARNING, s_szErrFmt, get_active_function_name(TSRMLS_C), ReqbErr(s_reqb)); RETURN_NULL(); } IFCONNECT_END}/* }}} *//* {{{ proto array msession_list(void) List all sessions */PHP_FUNCTION(msession_list){ IFCONNECT_BEGIN FormatRequest(&s_reqb, REQ_LIST, "", "", "",0); PHPDoRequest(&s_conn,&s_reqb); if(s_reqb->req.stat==REQ_OK && s_reqb->req.param) { int i; char *str = s_reqb->req.datum; array_init(return_value); for(i=0; i < s_reqb->req.param; i++) { int cbstr = strlen(str); char *data = safe_estrdup(str); add_index_string(return_value, i, data, 0); str += (cbstr+1); } } else if(s_reqb->req.stat != REQ_OK) { /* May this should be an error? */ if(s_reqb->req.param != REQE_NOSESSION) php_error(E_WARNING, s_szErrFmt, get_active_function_name(TSRMLS_C), ReqbErr(s_reqb)); RETURN_NULL(); } IFCONNECT_END}/* }}} *//* {{{ proto array msession_get_array(string session) Get array of msession variables */PHP_FUNCTION(msession_get_array){ IFCONNECT_BEGIN char *szsession; zval **session; if(ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &session) == FAILURE) { WRONG_PARAM_COUNT; } convert_to_string_ex(session); szsession = Z_STRVAL_PP(session); FormatRequest(&s_reqb, REQ_GETALL, szsession, "", "",0); PHPDoRequest(&s_conn,&s_reqb); array_init(return_value); if(s_reqb->req.stat == REQ_OK) { int i; char *str = s_reqb->req.datum; int num = s_reqb->req.param*2; for(i=0; i < num; i+=2) { int cbvalue; int cbname; char *szvalue; char *szname; cbname = strlen(str); szname = safe_estrndup(str,cbname); str += (cbname+1); cbvalue = strlen(str); szvalue = safe_estrndup(str,cbvalue); str += (cbvalue+1); add_assoc_string(return_value, szname, szvalue, 0); } } else { if(s_reqb->req.param != REQE_NOSESSION) php_error(E_WARNING, s_szErrFmt, get_active_function_name(TSRMLS_C), ReqbErr(s_reqb)); RETURN_NULL(); } IFCONNECT_END}/* }}} *//* {{{ proto bool msession_set_array(string session, array tuples) Set msession variables from an array*/PHP_FUNCTION(msession_set_array){ IFCONNECT_BEGIN zval **session; zval **tuples; HashPosition pos; zval **entry; char *key;#ifdef PHP_4_1 uint keylen;#endif#ifdef PHP_4_0 ulong keylen;#endif ulong numndx; int ndx=0; char **pairs; HashTable *htTuples; int i; int countpair; if(ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &session, &tuples) == FAILURE) { WRONG_PARAM_COUNT; } htTuples = Z_ARRVAL_PP(tuples); countpair = zend_hash_num_elements(htTuples); pairs = (char **)emalloc(sizeof(char *) * countpair * 2); if(!pairs) { ELOG("no pairs"); RETURN_FALSE; } ELOG("have pairs"); /* Initializes pos */ zend_hash_internal_pointer_reset_ex(htTuples, &pos); ELOG("reset pointer"); for(i=0; i < countpair; i++) { if(zend_hash_get_current_data_ex(htTuples, (void **)&entry, &pos) != SUCCESS) break; if(entry) { char *szentry; convert_to_string_ex(entry); szentry = Z_STRVAL_PP(entry); if(zend_hash_get_current_key_ex(htTuples,&key,&keylen,&numndx,0,&pos)== HASH_KEY_IS_STRING) {#ifdef ERR_DEBUG{ char buffer [256]; sprintf(buffer, "%s=%s\n", key, szentry); ELOG(buffer);}#endif pairs[ndx++] = key; pairs[ndx++] = szentry; } } zend_hash_move_forward_ex(htTuples, &pos); } ELOG("FormatMulti"); FormatRequestMulti(&s_reqb, REQ_SETVAL, Z_STRVAL_PP(session), countpair, pairs,0); PHPDoRequest(&s_conn,&s_reqb); if(s_reqb->req.stat != REQ_OK) php_error(E_WARNING, s_szErrFmt, get_active_function_name(TSRMLS_C), ReqbErr(s_reqb)); efree((void *)pairs); IFCONNECT_END}/* }}} *//* {{{ proto array msession_listvar(string name) return associative array of value:session for all sessions with a variable named 'name' */PHP_FUNCTION(msession_listvar){ IFCONNECT_BEGIN zval **name; if(ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &name) == FAILURE) { WRONG_PARAM_COUNT; } convert_to_string_ex(name); FormatRequest(&s_reqb, REQ_LISTVAR, "", Z_STRVAL_PP(name), "",0); PHPDoRequest(&s_conn,&s_reqb); array_init(return_value); if(s_reqb->req.stat == REQ_OK) { int i; char *str = s_reqb->req.datum; int num = s_reqb->req.param*2; for(i=0; i < num; i+=2) { int cbvalue; int cbname; char *szvalue; char *szname; cbname= strlen(str); szname= safe_estrndup(str,cbname); str += (cbname+1); cbvalue = strlen(str); szvalue = safe_estrndup(str,cbvalue); str += (cbvalue+1); add_assoc_string(return_value, szname, szvalue, 0); } } else { php_error(E_WARNING, s_szErrFmt, get_active_function_name(TSRMLS_C), ReqbErr(s_reqb)); RETURN_NULL(); } IFCONNECT_END}/* }}} *//* {{{ proto int msession_timeout(string session [, int param ]) Set/get session timeout */PHP_FUNCTION(msession_timeout){ IFCONNECT_BEGIN zval **session; int ac = ZEND_NUM_ARGS(); int zstat = FAILURE; int timeout = 0; if(ac == 1) { zstat = zend_get_parameters_ex(1, &session); } else if(ac == 2) { zval **param; zstat = zend_get_parameters_ex(2, &session, ¶m); convert_to_long_ex(param); timeout = Z_LVAL_PP(param); } if(zstat == FAILURE) { WRONG_PARAM_COUNT; } convert_to_string_ex(session); FormatRequest(&s_reqb, REQ_TIMEOUT, Z_STRVAL_PP(session), "","",timeout); PHPDoRequest(&s_conn,&s_reqb); if(s_reqb->req.stat == REQ_OK) { RETURN_LONG( s_reqb->req.param); } else { php_error(E_WARNING, s_szErrFmt, get_active_function_name(TSRMLS_C), ReqbErr(s_reqb)); RETURN_NULL(); } IFCONNECT_END}/* }}} *//* {{{ proto string msession_inc(string session, string name) Increment value in session */PHP_FUNCTION(msession_inc){ IFCONNECT_BEGIN char *val; zval **session; zval **name; if(ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &session, &name) == FAILURE) { WRONG_PARAM_COUNT; } convert_to_string_ex(session); convert_to_string_ex(name); FormatRequest(&s_reqb, REQ_INC, Z_STRVAL_PP(session), Z_STRVAL_PP(name),0,0); PHPDoRequest(&s_conn, &s_reqb); if(s_reqb->req.stat==REQ_OK) { val = safe_estrdup(s_reqb->req.datum); RETURN_STRING(val, 0) } else { php_error(E_WARNING, s_szErrFmt, get_active_function_name(TSRMLS_C), ReqbErr(s_reqb)); RETURN_FALSE; } IFCONNECT_END}/* }}} *//* {{{ proto string msession_get_data(string session) Get data session unstructured data. (PHP sessions use this) */PHP_FUNCTION(msession_get_data){ IFCONNECT_BEGIN char *val; zval **session; if(ZEND_NUM_ARGS() != 1 || zend_get_parameters_ex(1, &session) == FAILURE) { WRONG_PARAM_COUNT; } convert_to_string_ex(session); val = PHPMsessionGetData(Z_STRVAL_PP(session) TSRMLS_CC); if(val) { RETURN_STRING(val, 0) } else { RETURN_NULL(); } IFCONNECT_END}/* }}} *//* {{{ proto bool msession_set_data(string session, string value) Set data session unstructured data. (PHP sessions use this) */PHP_FUNCTION(msession_set_data){ IFCONNECT_BEGIN zval **session; zval **value; if(ZEND_NUM_ARGS() != 2 || zend_get_parameters_ex(2, &session, &value) == FAILURE) { WRONG_PARAM_COUNT; } convert_to_string_ex(session); convert_to_string_ex(value); if(PHPMsessionSetData(Z_STRVAL_PP(session), Z_STRVAL_PP(value) TSRMLS_CC)) { RETURN_TRUE; } else { RETURN_FALSE; } IFCONNECT_END}/* }}} *//* {{{ proto string msession_plugin(string session, string val [, string param ]) Call the personality plugin escape function */PHP_FUNCTION(msession_plugin){ IFCONNECT_BEGIN int ret; char *retval; zval **session; zval **val; zval **param=NULL; if(ZEND_NUM_ARGS() == 3) { ret = zend_get_parameters_ex(3, &session, &val, ¶m); convert_to_string_ex(param); } else if(ZEND_NUM_ARGS() == 2) { ret = zend_get_parameters_ex(2, &session, &val); } else { WRONG_PARAM_COUNT; } if(ret == FAILURE) { WRONG_PARAM_COUNT; } convert_to_string_ex(session); convert_to_string_ex(val); ret = atoi(Z_STRVAL_PP(val)); FormatRequest(&s_reqb, REQ_PLUGIN, Z_STRVAL_PP(session), Z_STRVAL_PP(val), param ? Z_STRVAL_PP(param) : "",ret); PHPDoRequest(&s_conn, &s_reqb); if(s_reqb->req.stat==REQ_OK && s_reqb->req.len) { retval = safe_estrdup(s_reqb->req.datum); RETURN_STRING(retval, 0) } else if(s_reqb->req.stat != REQ_OK) { php_error(E_WARNING, s_szErrFmt, get_active_function_name(TSRMLS_C), ReqbErr(s_reqb)); RETURN_FALSE; } IFCONNECT_END}/* }}} */#define MAX_EXT_VAL 5/* {{{ proto string msession_call(string fn_name, [, string param1 ], ... [,string param4]) Call the plugin function named fn_name */PHP_FUNCTION(msession_call){ IFCONNECT_BEGIN int n; int i; int ret; char *retval; zval **val[MAX_EXT_VAL]; char *strings[MAX_EXT_VAL+1];/* zval **param=NULL; */ n = ZEND_NUM_ARGS(); if((n < 1) || (n > MAX_EXT_VAL)) { WRONG_PARAM_COUNT; } ret = zend_get_parameters_ex(ZEND_NUM_ARGS(), &val[0],&val[1],&val[2],&val[3],&val[4]); if(ret == FAILURE) { WRONG_PARAM_COUNT; } for(i=0; i < n; i++) { convert_to_string_ex(val[i]); strings[i] = Z_STRVAL_PP(val[i]); } FormatRequestStrings(&s_reqb, REQ_CALL, NULL , n, strings); PHPDoRequest(&s_conn, &s_reqb); if(s_reqb->req.stat==REQ_OK && s_reqb->req.len) { retval = safe_estrdup(s_reqb->req.datum); RETURN_STRING(retval, 0) } else if(s_reqb->req.stat != REQ_OK) { php_error(E_WARNING, s_szErrFmt, get_active_function_name(TSRMLS_C), ReqbErr(s_reqb)); RETURN_FALSE; } IFCONNECT_END}/* }}} */#ifdef HAVE_PHP_SESSIONPS_OPEN_FUNC(msession){ int port; int len = strlen(save_path)+1; char * path = emalloc(len); char * szport; strcpy(path, save_path); szport = strchr(path, ':'); if(szport) { *szport++=0; port = atoi(szport); } else { port = s_port; } ELOG( "ps_open_msession"); PS_SET_MOD_DATA((void *)1); /* session.c needs a non-zero here! */ if (PHPMsessionConnect(path, port)) { efree(path); return SUCCESS; } else { efree(path); return FAILURE; }}PS_CLOSE_FUNC(msession){ ELOG( "ps_close_msession"); PHPMsessionDisconnect(); return SUCCESS;}PS_READ_FUNC(msession){ ELOG( "ps_read_msession"); *val = PHPMsessionGetData(key TSRMLS_CC); if(*val) { *vallen = strlen(*val); } else { *val = emalloc(1); **val=0; *vallen = 0; } return SUCCESS;}PS_WRITE_FUNC(msession){ ELOG( "ps_write_msession"); return (PHPMsessionSetData(key, val TSRMLS_CC)) ? SUCCESS : FAILURE;}PS_DESTROY_FUNC(msession){ ELOG( "ps_destroy_msession"); return (PHPMsessionDestroy(key TSRMLS_CC)) ? SUCCESS : FAILURE;}PS_GC_FUNC(msession){ ELOG( "ps_gc_msession"); return SUCCESS;}#ifdef HAVE_PHP_SESSION_CREATESIDPS_CREATE_SID_FUNC(msession){ if(s_reqb && s_conn) { ELOG("Should create a new session"); FormatRequest(&s_reqb, REQ_UNIQ,"", "", "",SID_LEN); PHPDoRequest(&s_conn, &s_reqb); if(s_reqb->req.stat==REQ_OK) { if(newlen) *newlen = SID_LEN; return safe_estrdup(s_reqb->req.datum); } else { php_error(E_WARNING, s_szErrFmt, get_active_function_name(TSRMLS_C), ReqbErr(s_reqb)); } } ELOG("Yikes, could not get sid from msession"); return php_session_create_id(mod_data, newlen TSRMLS_CC);}#endif /* HAVE_PHP_SESSION_CREATESID */#endif /* HAVE_PHP_SESSION */#endif /* HAVE_MSESSION */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -