@@ -201,6 +201,7 @@ typedef struct {
201
201
202
202
enum {
203
203
MEMC_OP_SET ,
204
+ MEMC_OP_TOUCH ,
204
205
MEMC_OP_ADD ,
205
206
MEMC_OP_REPLACE ,
206
207
MEMC_OP_APPEND ,
@@ -1112,6 +1113,24 @@ PHP_METHOD(Memcached, setByKey)
1112
1113
}
1113
1114
/* }}} */
1114
1115
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
+
1115
1134
/* {{{ Memcached::setMulti(array items [, int expiration ])
1116
1135
Sets the keys/values specified in the items array */
1117
1136
PHP_METHOD (Memcached , setMulti )
@@ -1324,6 +1343,11 @@ static void php_memc_store_impl(INTERNAL_FUNCTION_PARAMETERS, int op, zend_bool
1324
1343
INIT_ZVAL (s_zvalue );
1325
1344
value = & s_zvalue ;
1326
1345
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
+ }
1327
1351
} else {
1328
1352
if (zend_parse_parameters (ZEND_NUM_ARGS () TSRMLS_CC , "ssz|l" , & server_key ,
1329
1353
& 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
1339
1363
INIT_ZVAL (s_zvalue );
1340
1364
value = & s_zvalue ;
1341
1365
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
+ }
1342
1371
} else {
1343
1372
if (zend_parse_parameters (ZEND_NUM_ARGS () TSRMLS_CC , "sz|l" , & key , & key_len ,
1344
1373
& value , & expiration ) == FAILURE ) {
@@ -1368,6 +1397,11 @@ static void php_memc_store_impl(INTERNAL_FUNCTION_PARAMETERS, int op, zend_bool
1368
1397
flags |= MEMC_VAL_COMPRESSED ;
1369
1398
}
1370
1399
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
+
1371
1405
payload = php_memc_zval_to_payload (value , & payload_len , & flags , m_obj -> serializer , m_obj -> compression_type TSRMLS_CC );
1372
1406
if (payload == NULL ) {
1373
1407
i_obj -> rescode = MEMC_RES_PAYLOAD_FAILURE ;
@@ -1384,6 +1418,16 @@ static void php_memc_store_impl(INTERNAL_FUNCTION_PARAMETERS, int op, zend_bool
1384
1418
}
1385
1419
break ;
1386
1420
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
+
1387
1431
case MEMC_OP_ADD :
1388
1432
if (!server_key ) {
1389
1433
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)
3244
3288
ZEND_ARG_INFO (0 , expiration )
3245
3289
ZEND_END_ARG_INFO ()
3246
3290
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
+
3247
3302
ZEND_BEGIN_ARG_INFO_EX (arginfo_setMulti , 0 , 0 , 1 )
3248
3303
ZEND_ARG_ARRAY_INFO (0 , items , 0 )
3249
3304
ZEND_ARG_INFO (0 , expiration )
@@ -3454,6 +3509,8 @@ static zend_function_entry memcached_class_methods[] = {
3454
3509
3455
3510
MEMC_ME (set , arginfo_set )
3456
3511
MEMC_ME (setByKey , arginfo_setByKey )
3512
+ MEMC_ME (touch , arginfo_touch )
3513
+ MEMC_ME (touchByKey , arginfo_touchByKey )
3457
3514
MEMC_ME (setMulti , arginfo_setMulti )
3458
3515
MEMC_ME (setMultiByKey , arginfo_setMultiByKey )
3459
3516
0 commit comments