@@ -201,6 +201,7 @@ typedef struct {
201201
202202enum {
203203 MEMC_OP_SET ,
204+ MEMC_OP_TOUCH ,
204205 MEMC_OP_ADD ,
205206 MEMC_OP_REPLACE ,
206207 MEMC_OP_APPEND ,
@@ -1112,6 +1113,24 @@ PHP_METHOD(Memcached, setByKey)
11121113}
11131114/* }}} */
11141115
1116+ /* {{{ Memcached::touch(string key, [, int expiration ])
1117+ Sets a new expiration for the given key */
1118+ PHP_METHOD (Memcached , touch )
1119+ {
1120+ php_memc_store_impl (INTERNAL_FUNCTION_PARAM_PASSTHRU , MEMC_OP_TOUCH , 0 );
1121+ }
1122+ /* }}} */
1123+
1124+ /* {{{ Memcached::touchbyKey(string key, [, int expiration ])
1125+ Sets a new expiration for the given key */
1126+ PHP_METHOD (Memcached , touchByKey )
1127+ {
1128+ php_memc_store_impl (INTERNAL_FUNCTION_PARAM_PASSTHRU , MEMC_OP_TOUCH , 1 );
1129+ }
1130+ /* }}} */
1131+
1132+
1133+
11151134/* {{{ Memcached::setMulti(array items [, int expiration ])
11161135 Sets the keys/values specified in the items array */
11171136PHP_METHOD (Memcached , setMulti )
@@ -1324,6 +1343,11 @@ static void php_memc_store_impl(INTERNAL_FUNCTION_PARAMETERS, int op, zend_bool
13241343 INIT_ZVAL (s_zvalue );
13251344 value = & s_zvalue ;
13261345 ZVAL_STRINGL (value , s_value , s_value_len , 0 );
1346+ } else if (op == MEMC_OP_TOUCH ) {
1347+ if (zend_parse_parameters (ZEND_NUM_ARGS () TSRMLS_CC , "ss|l" , & server_key ,
1348+ & server_key_len , & key , & key_len , & expiration ) == FAILURE ) {
1349+ return ;
1350+ }
13271351 } else {
13281352 if (zend_parse_parameters (ZEND_NUM_ARGS () TSRMLS_CC , "ssz|l" , & server_key ,
13291353 & server_key_len , & key , & key_len , & value , & expiration ) == FAILURE ) {
@@ -1339,6 +1363,11 @@ static void php_memc_store_impl(INTERNAL_FUNCTION_PARAMETERS, int op, zend_bool
13391363 INIT_ZVAL (s_zvalue );
13401364 value = & s_zvalue ;
13411365 ZVAL_STRINGL (value , s_value , s_value_len , 0 );
1366+ } else if (op == MEMC_OP_TOUCH ) {
1367+ if (zend_parse_parameters (ZEND_NUM_ARGS () TSRMLS_CC , "s|l" , & key ,
1368+ & key_len , & expiration ) == FAILURE ) {
1369+ return ;
1370+ }
13421371 } else {
13431372 if (zend_parse_parameters (ZEND_NUM_ARGS () TSRMLS_CC , "sz|l" , & key , & key_len ,
13441373 & value , & expiration ) == FAILURE ) {
@@ -1368,6 +1397,11 @@ static void php_memc_store_impl(INTERNAL_FUNCTION_PARAMETERS, int op, zend_bool
13681397 flags |= MEMC_VAL_COMPRESSED ;
13691398 }
13701399
1400+ if (op == MEMC_OP_TOUCH && !memcached_behavior_get (m_obj -> memc , MEMCACHED_BEHAVIOR_BINARY_PROTOCOL )) {
1401+ php_error_docref (NULL TSRMLS_CC , E_WARNING , "touch is only supported with binary protocol" );
1402+ RETURN_FALSE ;
1403+ }
1404+
13711405 payload = php_memc_zval_to_payload (value , & payload_len , & flags , m_obj -> serializer , m_obj -> compression_type TSRMLS_CC );
13721406 if (payload == NULL ) {
13731407 i_obj -> rescode = MEMC_RES_PAYLOAD_FAILURE ;
@@ -1384,6 +1418,16 @@ static void php_memc_store_impl(INTERNAL_FUNCTION_PARAMETERS, int op, zend_bool
13841418 }
13851419 break ;
13861420
1421+ case MEMC_OP_TOUCH :
1422+ if (!server_key ) {
1423+ status = memcached_touch (m_obj -> memc , key , key_len , expiration );
1424+ } else {
1425+ status = memcached_touch_by_key (m_obj -> memc , server_key , server_key_len , key ,
1426+ key_len , expiration );
1427+ }
1428+ break ;
1429+
1430+
13871431 case MEMC_OP_ADD :
13881432 if (!server_key ) {
13891433 status = memcached_add (m_obj -> memc , key , key_len , payload , payload_len , expiration , flags );
@@ -3244,6 +3288,17 @@ ZEND_BEGIN_ARG_INFO_EX(arginfo_setByKey, 0, 0, 3)
32443288 ZEND_ARG_INFO (0 , expiration )
32453289ZEND_END_ARG_INFO ()
32463290
3291+ ZEND_BEGIN_ARG_INFO_EX (arginfo_touch , 0 , 0 , 2 )
3292+ ZEND_ARG_INFO (0 , key )
3293+ ZEND_ARG_INFO (0 , expiration )
3294+ ZEND_END_ARG_INFO ()
3295+
3296+ ZEND_BEGIN_ARG_INFO_EX (arginfo_touchByKey , 0 , 0 , 3 )
3297+ ZEND_ARG_INFO (0 , server_key )
3298+ ZEND_ARG_INFO (0 , key )
3299+ ZEND_ARG_INFO (0 , expiration )
3300+ ZEND_END_ARG_INFO ()
3301+
32473302ZEND_BEGIN_ARG_INFO_EX (arginfo_setMulti , 0 , 0 , 1 )
32483303 ZEND_ARG_ARRAY_INFO (0 , items , 0 )
32493304 ZEND_ARG_INFO (0 , expiration )
@@ -3454,6 +3509,8 @@ static zend_function_entry memcached_class_methods[] = {
34543509
34553510 MEMC_ME (set , arginfo_set )
34563511 MEMC_ME (setByKey , arginfo_setByKey )
3512+ MEMC_ME (touch , arginfo_touch )
3513+ MEMC_ME (touchByKey , arginfo_touchByKey )
34573514 MEMC_ME (setMulti , arginfo_setMulti )
34583515 MEMC_ME (setMultiByKey , arginfo_setMultiByKey )
34593516
0 commit comments