source: spip-zone/_plugins_/memoization/memo/filecache.inc @ 32458

Last change on this file since 32458 was 32458, checked in by fil@…, 11 years ago

une version pour eaccelerator + correction de cache_inc et cache_dec sur le memo filecache

File size: 2.2 KB
Line 
1<?php
2
3# l'API de cache_set etc est exactement celle de xcache
4# a ceci pres qu'on se reserve un namespace specifique au site
5# afin de ne pas se melanger sur un serveur mutualise
6#
7# je laisse le soin a qui voudra de refaire ca en mode objet
8
9/*
10mixed cache_get(string name)
11bool  cache_set(string name, mixed value [, int ttl])
12bool  cache_isset(string name)
13bool  cache_unset(string name)
14bool  cache_unset_by_prefix(string prefix)
15int   cache_inc(string name [, int value [, int ttl]])
16int   cache_dec(string name [, int value [, int ttl]])
17*/
18
19@define('_DIR_TMP_XCACHE', (defined('_DIR_TMP') ? _DIR_TMP : 'tmp/').'xcache/');
20
21function cache_filename($u) {
22        if (!is_dir(_DIR_TMP_XCACHE))
23                @mkdir(_DIR_TMP_XCACHE);
24        return _DIR_TMP_XCACHE.substr(md5($u),0,4); # soit 16^4 fichiers max
25}
26function cache_delete_dir($dir) {
27        if ($d = @opendir($dir))
28                while (($f = readdir($d)) !== false)
29                        if (is_file($f))
30                                unlink($f);
31}
32
33function cache_get() {
34        $a = func_get_args();
35        if ($c = @file_get_contents(cache_filename($a[0]))
36        AND $r = unserialize($c)
37        AND $r[1] == $a[0]
38        AND $r[2] <= time())
39                return $r[0];
40}
41
42function cache_set() {
43        $a = func_get_args();
44        $r = array($a[1]);
45        $r[1] = $a[0];
46        $r[2] = isset($a[2])
47                ? time() + intval($a[2])
48                : time() + 365*24*3600;
49        return (
50                $f = cache_filename($a[0])
51                AND $n = @tempnam(dirname($f), 'xc')
52                AND $h = @fopen($n, 'w')
53                AND @fwrite($h, serialize($r))
54                AND @fclose($h)
55                AND @rename($n, $f)
56        );
57}
58
59function cache_isset() {
60        $a = func_get_args();
61        if ($c = file_get_contents(cache_filename($a[0]))
62        AND $r = unserialize($c)
63        AND $r[1] == $a[0]
64        AND $r[2] <= time())
65                return true;
66        else
67                return false;
68}
69
70function cache_unset() {
71        $a = func_get_args();
72        return (
73                $c = file_get_contents($f = cache_filename($a[0]))
74                AND $s = supprimer_fichier($f)
75                AND $r = unserialize($c)
76                AND $r[1] == $a[0]
77                AND $r[2] <= time()
78        );
79}
80
81function cache_unset_by_prefix() {
82        # ici on efface tout aveuglement
83        cache_delete_dir(_DIR_TMP_XCACHE);
84        return true;
85}
86
87function cache_inc() {
88        $a = func_get_args();
89        $a[1] = intval(cache_get($a[0]))+1;
90        return call_user_func_array('cache_set', $a);
91}
92
93function cache_dec() {
94        $a = func_get_args();
95        $a[1] = intval(cache_get($a[0]))-1;
96        return call_user_func_array('cache_set', $a);
97}
98
99?>
Note: See TracBrowser for help on using the repository browser.