⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 msession.c

📁 php-4.4.7学习linux时下载的源代码
💻 C
📖 第 1 页 / 共 2 页
字号:
	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,&param) == 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,&param) == 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, &param);		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, &param);		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 + -