@@ -161,6 +161,9 @@ static zend_function_entry redis_functions[] = {
161
161
PHP_ME (Redis , dump , NULL , ZEND_ACC_PUBLIC )
162
162
PHP_ME (Redis , restore , NULL , ZEND_ACC_PUBLIC )
163
163
164
+ PHP_ME (Redis , _prefix , NULL , ZEND_ACC_PUBLIC )
165
+ PHP_ME (Redis , _unserialize , NULL , ZEND_ACC_PUBLIC )
166
+
164
167
/* 1.1 */
165
168
PHP_ME (Redis , mset , NULL , ZEND_ACC_PUBLIC )
166
169
PHP_ME (Redis , msetnx , NULL , ZEND_ACC_PUBLIC )
@@ -5861,7 +5864,7 @@ PHP_METHOD(Redis, dump) {
5861
5864
}
5862
5865
5863
5866
/*
5864
- * {{{ proto RESTORE ttl key value
5867
+ * {{{ proto Redis::restore( ttl, key, value)
5865
5868
*/
5866
5869
PHP_METHOD (Redis , restore ) {
5867
5870
zval * object ;
@@ -5894,5 +5897,64 @@ PHP_METHOD(Redis, restore) {
5894
5897
REDIS_PROCESS_RESPONSE (redis_boolean_response );
5895
5898
}
5896
5899
5900
+ /*
5901
+ * {{{ proto Redis::_prefix(key)
5902
+ */
5903
+ PHP_METHOD (Redis , _prefix ) {
5904
+ zval * object ;
5905
+ RedisSock * redis_sock ;
5906
+ char * key ;
5907
+ int key_len ;
5908
+
5909
+ // Parse our arguments
5910
+ if (zend_parse_method_parameters (ZEND_NUM_ARGS () TSRMLS_CC , getThis (), "Os" , & object , redis_ce ,
5911
+ & key , & key_len ) == FAILURE ) {
5912
+ RETURN_FALSE ;
5913
+ }
5914
+ // Grab socket
5915
+ if (redis_sock_get (object , & redis_sock TSRMLS_CC , 0 ) < 0 ) {
5916
+ RETURN_FALSE ;
5917
+ }
5918
+
5919
+ // Prefix our key if we need to
5920
+ if (redis_sock -> prefix != NULL && redis_sock -> prefix_len > 0 ) {
5921
+ redis_key_prefix (redis_sock , & key , & key_len TSRMLS_CC );
5922
+ RETURN_STRINGL (key , key_len , 0 );
5923
+ } else {
5924
+ RETURN_STRINGL (key , key_len , 1 );
5925
+ }
5926
+ }
5927
+
5928
+ /*
5929
+ * {{{ proto Redis::_unserialize(value)
5930
+ */
5931
+ PHP_METHOD (Redis , _unserialize ) {
5932
+ zval * object ;
5933
+ RedisSock * redis_sock ;
5934
+ char * value ;
5935
+ int value_len ;
5936
+
5937
+ // Parse our arguments
5938
+ if (zend_parse_method_parameters (ZEND_NUM_ARGS () TSRMLS_CC , getThis (), "Os" , & object , redis_ce ,
5939
+ & value , & value_len ) == FAILURE ) {
5940
+ RETURN_FALSE ;
5941
+ }
5942
+ // Grab socket
5943
+ if (redis_sock_get (object , & redis_sock TSRMLS_CC , 0 ) < 0 ) {
5944
+ RETURN_FALSE ;
5945
+ }
5946
+
5947
+ // We only need to attempt unserialization if we have a serializer running
5948
+ if (redis_sock -> serializer != REDIS_SERIALIZER_NONE ) {
5949
+ if (redis_unserialize (redis_sock , value , value_len , & return_value TSRMLS_CC ) == 0 ) {
5950
+ zend_throw_exception (redis_exception_ce , "Invalid serialized data, or unserialization error" , 0 TSRMLS_CC );
5951
+ RETURN_FALSE ;
5952
+ }
5953
+ } else {
5954
+ // Just return the value that was passed to us
5955
+ RETURN_STRINGL (value , value_len , 1 );
5956
+ }
5957
+ }
5958
+
5897
5959
/* vim: set tabstop=4 softtabstop=4 noexpandtab shiftwidth=4: */
5898
5960
0 commit comments