@@ -198,6 +198,7 @@ typedef struct {
198
198
199
199
enum {
200
200
MEMC_OP_SET ,
201
+ MEMC_OP_TOUCH ,
201
202
MEMC_OP_ADD ,
202
203
MEMC_OP_REPLACE ,
203
204
MEMC_OP_APPEND ,
@@ -1090,6 +1091,24 @@ PHP_METHOD(Memcached, setByKey)
1090
1091
}
1091
1092
/* }}} */
1092
1093
1094
+ /* {{{ Memcached::touch(string key, [, int expiration ])
1095
+ Sets a new expiration for the given key */
1096
+ PHP_METHOD (Memcached , touch )
1097
+ {
1098
+ php_memc_store_impl (INTERNAL_FUNCTION_PARAM_PASSTHRU , MEMC_OP_TOUCH , 0 );
1099
+ }
1100
+ /* }}} */
1101
+
1102
+ /* {{{ Memcached::touchbyKey(string key, [, int expiration ])
1103
+ Sets a new expiration for the given key */
1104
+ PHP_METHOD (Memcached , touchByKey )
1105
+ {
1106
+ php_memc_store_impl (INTERNAL_FUNCTION_PARAM_PASSTHRU , MEMC_OP_TOUCH , 1 );
1107
+ }
1108
+ /* }}} */
1109
+
1110
+
1111
+
1093
1112
/* {{{ Memcached::setMulti(array items [, int expiration ])
1094
1113
Sets the keys/values specified in the items array */
1095
1114
PHP_METHOD (Memcached , setMulti )
@@ -1274,6 +1293,11 @@ static void php_memc_store_impl(INTERNAL_FUNCTION_PARAMETERS, int op, zend_bool
1274
1293
INIT_ZVAL (s_zvalue );
1275
1294
value = & s_zvalue ;
1276
1295
ZVAL_STRINGL (value , s_value , s_value_len , 0 );
1296
+ } else if (op == MEMC_OP_TOUCH ) {
1297
+ if (zend_parse_parameters (ZEND_NUM_ARGS () TSRMLS_CC , "ss|l" , & server_key ,
1298
+ & server_key_len , & key , & key_len , & expiration ) == FAILURE ) {
1299
+ return ;
1300
+ }
1277
1301
} else {
1278
1302
if (zend_parse_parameters (ZEND_NUM_ARGS () TSRMLS_CC , "ssz|l" , & server_key ,
1279
1303
& server_key_len , & key , & key_len , & value , & expiration ) == FAILURE ) {
@@ -1289,6 +1313,11 @@ static void php_memc_store_impl(INTERNAL_FUNCTION_PARAMETERS, int op, zend_bool
1289
1313
INIT_ZVAL (s_zvalue );
1290
1314
value = & s_zvalue ;
1291
1315
ZVAL_STRINGL (value , s_value , s_value_len , 0 );
1316
+ } else if (op == MEMC_OP_TOUCH ) {
1317
+ if (zend_parse_parameters (ZEND_NUM_ARGS () TSRMLS_CC , "s|l" , & key ,
1318
+ & key_len , & expiration ) == FAILURE ) {
1319
+ return ;
1320
+ }
1292
1321
} else {
1293
1322
if (zend_parse_parameters (ZEND_NUM_ARGS () TSRMLS_CC , "sz|l" , & key , & key_len ,
1294
1323
& value , & expiration ) == FAILURE ) {
@@ -1318,6 +1347,11 @@ static void php_memc_store_impl(INTERNAL_FUNCTION_PARAMETERS, int op, zend_bool
1318
1347
flags |= MEMC_VAL_COMPRESSED ;
1319
1348
}
1320
1349
1350
+ if (op == MEMC_OP_TOUCH && !memcached_behavior_get (m_obj -> memc , MEMCACHED_BEHAVIOR_BINARY_PROTOCOL )) {
1351
+ php_error_docref (NULL TSRMLS_CC , E_WARNING , "touch is only supported with binary protocol" );
1352
+ RETURN_FALSE ;
1353
+ }
1354
+
1321
1355
payload = php_memc_zval_to_payload (value , & payload_len , & flags , m_obj -> serializer , m_obj -> compression_type TSRMLS_CC );
1322
1356
if (payload == NULL ) {
1323
1357
i_obj -> rescode = MEMC_RES_PAYLOAD_FAILURE ;
@@ -1334,6 +1368,16 @@ static void php_memc_store_impl(INTERNAL_FUNCTION_PARAMETERS, int op, zend_bool
1334
1368
}
1335
1369
break ;
1336
1370
1371
+ case MEMC_OP_TOUCH :
1372
+ if (!server_key ) {
1373
+ status = memcached_touch (m_obj -> memc , key , key_len , expiration );
1374
+ } else {
1375
+ status = memcached_touch_by_key (m_obj -> memc , server_key , server_key_len , key ,
1376
+ key_len , expiration );
1377
+ }
1378
+ break ;
1379
+
1380
+
1337
1381
case MEMC_OP_ADD :
1338
1382
if (!server_key ) {
1339
1383
status = memcached_add (m_obj -> memc , key , key_len , payload , payload_len , expiration , flags );
@@ -3113,6 +3157,17 @@ ZEND_BEGIN_ARG_INFO_EX(arginfo_setByKey, 0, 0, 3)
3113
3157
ZEND_ARG_INFO (0 , expiration )
3114
3158
ZEND_END_ARG_INFO ()
3115
3159
3160
+ ZEND_BEGIN_ARG_INFO_EX (arginfo_touch , 0 , 0 , 2 )
3161
+ ZEND_ARG_INFO (0 , key )
3162
+ ZEND_ARG_INFO (0 , expiration )
3163
+ ZEND_END_ARG_INFO ()
3164
+
3165
+ ZEND_BEGIN_ARG_INFO_EX (arginfo_touchByKey , 0 , 0 , 3 )
3166
+ ZEND_ARG_INFO (0 , server_key )
3167
+ ZEND_ARG_INFO (0 , key )
3168
+ ZEND_ARG_INFO (0 , expiration )
3169
+ ZEND_END_ARG_INFO ()
3170
+
3116
3171
ZEND_BEGIN_ARG_INFO_EX (arginfo_setMulti , 0 , 0 , 1 )
3117
3172
ZEND_ARG_ARRAY_INFO (0 , items , 0 )
3118
3173
ZEND_ARG_INFO (0 , expiration )
@@ -3317,6 +3372,8 @@ static zend_function_entry memcached_class_methods[] = {
3317
3372
3318
3373
MEMC_ME (set , arginfo_set )
3319
3374
MEMC_ME (setByKey , arginfo_setByKey )
3375
+ MEMC_ME (touch , arginfo_touch )
3376
+ MEMC_ME (touchByKey , arginfo_touchByKey )
3320
3377
MEMC_ME (setMulti , arginfo_setMulti )
3321
3378
MEMC_ME (setMultiByKey , arginfo_setMultiByKey )
3322
3379
0 commit comments