@@ -202,6 +202,9 @@ static zend_function_entry redis_functions[] = {
202
202
PHP_ME (Redis , getOption , NULL , ZEND_ACC_PUBLIC )
203
203
PHP_ME (Redis , setOption , NULL , ZEND_ACC_PUBLIC )
204
204
205
+ /* config */
206
+ PHP_ME (Redis , config , NULL , ZEND_ACC_PUBLIC )
207
+
205
208
/* aliases */
206
209
PHP_MALIAS (Redis , open , connect , NULL , ZEND_ACC_PUBLIC )
207
210
PHP_MALIAS (Redis , popen , pconnect , NULL , ZEND_ACC_PUBLIC )
@@ -5268,5 +5271,57 @@ PHP_METHOD(Redis, setOption) {
5268
5271
}
5269
5272
/* }}} */
5270
5273
5274
+ /* {{{ proto boolean Redis::config(string op, string key [, mixed value])
5275
+ */
5276
+ PHP_METHOD (Redis , config )
5277
+ {
5278
+ zval * object ;
5279
+ RedisSock * redis_sock ;
5280
+ char * key = NULL , * val = NULL , * cmd , * op = NULL ;
5281
+ int key_len , val_len , cmd_len , op_len ;
5282
+ enum {CFG_GET , CFG_SET } mode ;
5283
+
5284
+ if (zend_parse_method_parameters (ZEND_NUM_ARGS () TSRMLS_CC , getThis (), "Oss|s" ,
5285
+ & object , redis_ce , & op , & op_len , & key , & key_len ,
5286
+ & val , & val_len ) == FAILURE ) {
5287
+ RETURN_FALSE ;
5288
+ }
5289
+
5290
+ /* op must be GET or SET */
5291
+ if (strncasecmp (op , "GET" , 3 ) == 0 ) {
5292
+ mode = CFG_GET ;
5293
+ } else if (strncasecmp (op , "SET" , 3 ) == 0 ) {
5294
+ mode = CFG_SET ;
5295
+ } else {
5296
+ RETURN_FALSE ;
5297
+ }
5298
+
5299
+ if (redis_sock_get (object , & redis_sock TSRMLS_CC ) < 0 ) {
5300
+ RETURN_FALSE ;
5301
+ }
5302
+
5303
+ if (mode == CFG_GET && val == NULL ) {
5304
+ cmd_len = redis_cmd_format_static (& cmd , "CONFIG" , "ss" , op , op_len , key , key_len );
5305
+
5306
+ REDIS_PROCESS_REQUEST (redis_sock , cmd , cmd_len )
5307
+ IF_ATOMIC () {
5308
+ redis_sock_read_multibulk_reply_zipped_strings (INTERNAL_FUNCTION_PARAM_PASSTHRU , redis_sock , NULL , NULL );
5309
+ }
5310
+ REDIS_PROCESS_RESPONSE (redis_sock_read_multibulk_reply_zipped_strings );
5311
+
5312
+ } else if (mode == CFG_SET && val != NULL ) {
5313
+ cmd_len = redis_cmd_format_static (& cmd , "CONFIG" , "sss" , op , op_len , key , key_len , val , val_len );
5314
+
5315
+ REDIS_PROCESS_REQUEST (redis_sock , cmd , cmd_len )
5316
+ IF_ATOMIC () {
5317
+ redis_boolean_response (INTERNAL_FUNCTION_PARAM_PASSTHRU , redis_sock , NULL , NULL );
5318
+ }
5319
+ REDIS_PROCESS_RESPONSE (redis_boolean_response );
5320
+ } else {
5321
+ RETURN_FALSE ;
5322
+ }
5323
+ }
5324
+ /* }}} */
5325
+
5271
5326
/* vim: set tabstop=4 softtabstop=4 noexpandtab shiftwidth=4: */
5272
5327
0 commit comments