200: z6 `5 C( ]; [: w3 C3 C' a) F; j, L
2019 ^' V2 d3 P5 p4 S# z, y( e
202
- n. g! U1 L7 g y203# j" n s0 V' h" `8 l/ m1 i# r1 s
204
; \/ l3 C: C. A# N205
: X* o' |+ D* P: Y3 c4 i1 Y8 |206
! H# Y9 d. U9 V# `4 C207) f/ Y2 }; V M7 c+ g
208: \2 n6 T& K% D5 }* h; C/ c- @
2091 l/ i7 e' f; T1 Q9 ^$ \. V
210
6 K) d7 {" W# Z) U211
' c9 I8 p# ~5 D k5 J212
4 _, |9 K7 J; o& D2 L, Z" |213
) U7 Y# E8 ^, U' { {214 e' u; l% j4 B
215
: W0 |4 M( [ I. s: u216& m( `# a2 ~' o" Z& d. i
217" `0 ^6 o# M2 [2 a ^2 A
218
* [: S+ q% A( V) N219( b# d% s" y; {. o
220: E) c0 S3 ~# c& Y5 \/ Y
2210 T; `5 l( ^# S8 {2 |
222$ c9 J$ i4 U" \6 o" F* q
223
7 f+ o4 q& f& ^& t, [" [; {224: @0 F- r* b: I$ u4 H
225
6 U* ]0 K/ E1 ]- t; j6 K2262 S; `5 Z) O. b2 l" i8 b; A
227% A# U+ g% n4 ^8 H. U' A
228* A0 C3 l8 q" @8 `4 s+ A9 }/ [/ p
229
# a5 }% r/ \3 ?; @" Y& A* I2301 y+ S- |7 X- a' j
231
2 i4 l4 |. N/ o) m8 N3 Q" I2324 Z. P' w3 j. w5 Y A
233
% @1 k: }9 D" v m3 B234
: f3 q5 h. f/ D; i" T3 a235
9 E3 A# F- W' H# y+ C236
5 H- {( ^, f, U9 i237
/ y$ Q7 w \( W! g# u+ G: U2 g4 b7 X238. Q+ T5 ~2 J( w, W7 y/ j3 T6 V. k
239
$ y+ d9 B/ v3 z0 c+ k" M9 j2407 k2 O \2 H+ D9 B# T6 z' J
241
3 b- B/ h$ ~$ o3 l# d( k2422 z# _9 C/ B2 z+ j0 `, l
243
: R: V z5 A& S% n, f' ~9 V' B' N; j244
$ [5 d2 d+ k) P" F( m2459 U: a5 G5 s+ @( {
246
6 h4 X! R; M) J; \/ X2479 T7 L$ u! i0 d
2489 {7 I8 [8 Y; o6 k6 T; ^# n& A5 W
249
9 j9 }0 s9 ?& ?/ Y8 J2 R: Q5 R6 x. D250/ x R6 J g; S) B
251( N( C) T( o" Y2 x
252
2 K/ u/ y" Q' I! F* S9 L- _# B& h2 ]253
3 m/ a( e0 J1 H5 C! a254
2 I7 u1 q: A' ~5 m# v4 Y( h3 Y255
; w" R' C& E* W/ s8 L1 ]5 d) O2567 a' I) ~( v, z4 z
257
7 W" t4 _$ \5 r; n) b- U. j258
& d- Y3 z X! [$ v2 O259+ l! Z0 V8 X T8 I
260
0 N W. F! |0 f9 W+ @+ E2 K9 F5 I261; ^* S% `* J9 K! k, q! E. c1 p
262
7 r/ R8 x0 X% Z263
, F4 D/ Q* G% p/ ?, [% v264
3 g& X" \# L7 d m# B- n265
- C3 s/ c+ J8 m. F) m3 F" _266: P+ E+ c' I% L8 q. R6 R
267
9 l# x$ f! d# ^9 `' x( r8 j ^268
2 i% i! O$ [! |* x269. Z% y# H- c) |
270+ Q& B& Z3 L3 i
271
3 F8 O' d, u) M/ ]3 L' G; l272
3 M$ @7 x# p# _4 A273
5 g6 J' C& M7 k" t) s: I274
) u4 ]) W. g% X$ D1 d- _! y: s275
. t6 m' \+ _/ u" W276
' v9 v5 q" ^) h: J277
$ e; \4 J! \! }278
; o2 c2 U) Q0 X& T( s# a6 h3 X1 ~ z279
& c: ]9 g( z- J# ^" q6 v2809 S" G& o& m3 x% G
2817 D4 w0 K q3 |- Y
282
) r, j/ C4 u; d& P. D$ _283
) z3 T( R9 N [5 N) t d- r$ y4 c$ K6 d284
6 U# n) ^. O- V) x285
2 \* R+ @5 u4 y: H2869 g* _2 f; j& L* z. e2 U8 h+ p E* K
287- C4 V1 |7 |. a4 M
288
% E5 u: O( c, f4 h289
3 y! _5 ^8 Y' Y6 B6 k9 y. F290
6 |. ^( `1 q2 M5 \2914 a" r4 q* L2 Z
292
1 s% \4 k% \. X293- W2 Q; w( v- V
294- b' N, |0 D2 H8 p: b J
2954 D! q8 R* h1 ?+ U/ @5 _
296
$ m' W2 M) i. C% t) z2975 R, M5 j* E2 Z0 D* D+ V
298
; p/ E# S2 F( k3 G299
- a0 b r1 e- W' H3 d0 T300
0 M" j; b+ ~5 d3 E301# f1 B f8 w3 [# b
302
; k$ a8 ^4 A. _) ` i2 Z& m9 K- M2 n- z303) C7 W: }* ^; | k2 H7 h
| define('V_CACHE_FILE', 1);
4 c# J. _4 [" B' k
. N/ H$ W8 O6 t9 N4 z1 |* ]/**
2 y P# b M/ E9 B) f8 n; r *@important Create the cache folder to store the cache data firstly
3 r. R! N8 U ~0 R ( s8 \! Q/ V. U
#create memcache local cache folder
) n" j7 ~5 c. R- A mkdir memcache ; sudo chown nginx:nginx memcache9 H k& o$ ^! o8 U% `8 n
. d% w) o, e9 S0 G */
# H6 L y- u5 m4 X2 Z/ _3 ]function v_cache_file_dir() {: @# {% `& @# x+ y2 h5 f, ?/ S, F
$path = dirname($_SERVER['SCRIPT_FILENAME']);
" e; T7 ~+ V) N #$dir = rtrim($path, '/') .'/'. trim(file_directory_temp(), '/') .'/memcache';
, o5 \$ G' A) o2 D+ C3 m* d& b $dir = rtrim($path, '/') .'/memcache';* y$ G1 n8 }7 q# C4 Y3 u
# ]: n/ R% b, P" g. E# x4 g
if($_GET['debug'] == 'test-cache') {
7 P2 N& Y8 Q$ ?+ q drupal_set_message($dir. '@DIR');
+ x D; h3 B: m+ C }
q) N+ ~' C% g: k7 }& M- F if(!is_dir($dir)) {
' `! }- K% C+ I! v #mkdir($dir);
3 n2 T3 ^4 e: V1 K3 B5 R: R throw new Exception('Create local directory for cache, ' .$dir);% N+ m$ y$ K& X) u
}
& K8 N' h% C) K; F, S& H return $dir;
. m) Z3 M5 ?0 A' b: [4 V2 W" K}* H& Y5 a( ]4 ]" l' T9 m F, k
3 e2 M; w- ~! H6 p
function v_cache_file_set($key, $value) { }/ E' h, X9 \$ Q
$dir = v_cache_file_dir();
4 o7 u0 r+ A, j) d $file = "$key.ser"; ?% o- ]0 A9 `+ Z' H6 D |. d9 w
if($_GET['debug'] == 'test-cache') {8 b% q: _# q/ v- C
drupal_set_message($key. '@FILE_CACHE_SET');/ s1 k7 u$ L" A6 K, e
}8 g1 Z" T7 D2 g& |
file_put_contents($dir .'/'. $file, serialize($value));
: x+ z* I6 ~/ {/ y/ e2 I}
* s" I1 i' [ n# K% e3 W
6 s# C! R$ G9 {7 C% K+ Lfunction v_cache_file_get($key) {8 r8 Q; G7 y6 d8 C6 z0 X
$dir = v_cache_file_dir();' ^* r4 N- }1 A
1 g' [- Y$ A6 ?
$file = "$key.ser";( z% y+ e: @- ]1 ~0 p) G
$file = $dir .'/'. $file;
8 ~* {1 l ?7 d if(file_exists($file)) {
$ M2 c( |7 S( Z1 ~ if($_GET['debug'] == 'test-cache') {4 ^9 \7 D# Z/ ^
drupal_set_message($key.'@FILE_CACHE_GET');
" w. N: y" Q9 k$ f% N9 N! H9 I }) r7 S& p% |6 D8 a+ J; J( N
return unserialize(file_get_contents($file));
* n$ Z9 @9 \! x. I3 t1 y }
: ]6 P3 I6 R0 j$ o `2 p else {- }- s& [7 i6 o
return false;5 n! K- ^$ s7 z0 t
}
; t6 F+ C* ?$ f+ A6 t} \) w, I4 S6 ^$ T& s6 w/ L
- Z& ~& t G- }8 A3 Q3 r( wfunction v_cache_encode_key($key) {, ]% i4 z+ p* s. K8 v$ I% m
$address = $_SERVER['SERVER_ADDR'];
0 t8 q/ B3 V: o0 C- F1 j! ~ //$key = str_ireplace(':', '-', $key);: d. p- ~4 W. m0 v: t
$key = "$key:$address";6 I' L5 S+ |5 t+ M2 k/ a
return $key;* P8 e. L; r7 |: B
}: O q1 ]6 g& s8 v& x0 T6 s3 g
( [3 a* ]! E( z+ V( y: U
function v_cache_set($key, $value, $table = 'cache', $expire = CACHE_PERMANENT) {
) Z! J; I( ] i* p $key_mem = v_cache_encode_key($key);
; e* u' \; H4 e9 R0 E4 g% F if (function_exists('apc_cache_info')) {4 s; f2 h& U* C8 @" v4 t
apc_store($key, $value, 60*60);//1 hour
; Q6 x# _1 I# z9 E* ?% X. n cache_set($key_mem, time(), $table, $expire);
7 d: d6 ^( H- s9 C0 i1 j$ c# z& f }
( F5 {# o" J9 B/ D& Z$ t else if (V_CACHE_FILE) {' |* o6 ]; u2 l5 |
v_cache_file_set($key, $value);//1 hour
7 Z% x$ x% _0 j; ~- B8 H cache_set($key_mem, time(), $table, $expire);- [- {# A K6 H& b' X G
}
- S8 o/ n+ Z# N; p5 W+ T; a1 | { else {8 p9 Y" j, ~( ^: y, F$ R
cache_set($key, $value, $table, $expire);
% e' z4 a0 I; n/ p9 R }% D1 p& f4 C% f3 u4 z
}! @! `7 @* s/ G# E# {0 R
4 L4 i5 ^$ O! c: ^) [* e3 B
function v_cache_get($key, $table = 'cache') {6 e: W9 D& Q& I" y2 h" d
if (function_exists('apc_cache_info') || VIA_CACHE_FILE) {* u& T2 Q* w+ S( r+ z9 C
static $static;: {+ g6 J9 O& d; }1 h! M! a( m
$ret = false;! S- X9 k+ h0 c$ e3 G
if (isset($static[$key])) {5 |2 ^$ N! _: [3 [ @% ~$ i
$ret = $static[$key];) w. G$ z- E* n
}
; X: Y+ w. x |; V. J else {
8 r! V* ^. h3 u3 P" @! o4 J $key_mem = via_cache_encode_key($key);& `% S I/ b" r4 _. I
if(cache_get($key_mem, $table)) {: O! w. r* H8 r+ s
$cache_callback = function_exists('apc_cache_info') ? 'apc_fetch' : 'v_cache_file_get';
) ?1 e7 j" G$ O0 k $value = $cache_callback($key);& o# s7 x1 o! T- D7 ^+ B
if($value) {0 O! g6 S |( m1 l
$cache = new stdClass;. y9 \ M E9 J- K! D
$cache->data = $value;6 i0 \& V7 c, L6 |/ U# h
$static[$key] = $cache;" g+ i9 |- F2 G, a+ L; Q/ [ G
$ret = $cache;: R% i( y8 g$ H$ j( w
}
" z9 f. t# H' o8 [) r9 _ }
. l. H6 \7 z2 n$ ^8 ~" _; ] }! S* B. y6 P" c1 G% x! g4 W1 C
return $ret;
5 w) A/ D: \: y6 g }
; u7 k8 p7 t& d9 u6 p else {+ }# p- s- x5 G( ~
return cache_get($key, $table);0 n% [* S6 l- Z7 {' X
}
2 M( \# ^8 P, O7 d3 {}
6 ?& B |' N3 t+ u) s# O- x ; J% \7 B9 `' ^8 k% m8 v
function v_cache_clear_all($cid = NULL, $table = NULL, $wildcard = FALSE) {- d% u8 y$ V4 E% t; E) y
if ($cid) {, @6 b5 N) F8 T* t0 q8 Z
cache_clear_all($cid, 'cache', TRUE);# r. L( R U, b1 X
//apc_clear_cache('user');
( q" e% g! a# h2 h2 @5 z6 ^0 z }
1 O7 I [2 v. Y} |