Subversion Repositories Applications.framework

Rev

Rev 270 | Go to most recent revision | Only display areas with differences | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 270 Rev 272
1
<?php 
1
<?php 
2
class ServiceCacheFichier extends Service {
2
class ServiceCacheFichier extends Service {
3
	
3
	
4
	public function consulter($ressources, $parametres) {
4
	public function consulter($ressources, $parametres) {
5
		$options = array(
5
		$options = array(
6
			'stockage_mode'				 => Cache::STOCKAGE_MODE_FICHIER,
6
			'stockage_mode'				 => Cache::STOCKAGE_MODE_FICHIER,
7
			'stockage_chemin'				 => $this->getTmpDir(),	
7
			'stockage_chemin'				 => Fichier::getDossierTmp(),	
8
			'controle_ecriture'			 => false,
8
			'controle_ecriture'			 => false,
9
			'mise_en_cache'		  		 => true,
9
			'mise_en_cache'		  		 => true,
10
			'cache_id_prefixe'		  		 => null,
10
			'cache_id_prefixe'		  		 => null,
11
			'serialisation_auto'		  	 => false,
11
			'serialisation_auto'		  	 => false,
12
			'nettoyage_auto'				 => 10,
12
			'nettoyage_auto'				 => 10,
13
			'duree_de_vie'			 		 => 3600,
13
			'duree_de_vie'			 		 => 3600,
14
		);
14
		);
15
		 $options_stockage = array(
15
		 $options_stockage = array(
16
			'fichier_verrou' => false,
16
			'fichier_verrou' => false,
17
			'controle_lecture' => false,
17
			'controle_lecture' => false,
18
			'controle_lecture_type' => 'crc32',
18
			'controle_lecture_type' => 'crc32',
19
			'dossier_niveau' => 2,
19
			'dossier_niveau' => 2,
20
			'dossier_umask' => 0707,
20
			'dossier_umask' => 0707,
21
			'fichier_prefixe' => 'tbf',
21
			'fichier_prefixe' => 'tbf',
22
			'fichier_umask' => 0606,
22
			'fichier_umask' => 0606,
23
			'metadonnees_max_taille' => 100
23
			'metadonnees_max_taille' => 100
24
		);
24
		);
25
		$cache = new Cache($options, $options_stockage);
25
		$cache = new Cache($options, $options_stockage);
26
		
26
		
27
		$id = 'monCache'; // id de cache de "ce que l'on veut cacher"
27
		$id = 'monCache'; // id de cache de "ce que l'on veut cacher"
28
		$id01 = $id.'01';
28
		$id01 = $id.'01';
29
		$id02 = $id.'02';
29
		$id02 = $id.'02';
30
		$id03 = $id.'03';
30
		$id03 = $id.'03';
31
		if (!($donnees = $cache->charger($id01))) {
31
		if (!($donnees = $cache->charger($id01))) {
32
			$donnees = 'Mise en cache à : '.strftime('%A %d %B %Y à %H:%M:%S', time()).'<br/>';
32
			$donnees = 'Mise en cache à : '.strftime('%A %d %B %Y à %H:%M:%S', time()).'<br/>';
33
			for ($i = 0; $i < 100000; $i++) {
33
			for ($i = 0; $i < 100000; $i++) {
34
				$donnees .= $i;
34
				$donnees .= $i;
35
			}
35
			}
36
			$cache->sauver($donnees, $id01);
36
			$cache->sauver($donnees, $id01);
37
			$cache->sauver($donnees, $id02, array('tagTest01'));
37
			$cache->sauver($donnees, $id02, array('tagTest01'));
38
			$cache->sauver($donnees, $id03, array('tagTest01','tagTest02', 'tagTest03'));
38
			$cache->sauver($donnees, $id03, array('tagTest01','tagTest02', 'tagTest03'));
39
		}
39
		}
40
		// Affichage des données
40
		// Affichage des données
41
		echo $donnees.'<br/>';
41
		echo $donnees.'<br/>';
42
		
42
		
43
		// Affichage des ids du cache
43
		// Affichage des ids du cache
44
		echo 'Ids des enregistrements en cache : <pre>'.print_r($cache->getIds(), true).'</pre>';
44
		echo 'Ids des enregistrements en cache : <pre>'.print_r($cache->getIds(), true).'</pre>';
45
		
45
		
46
		// Affichage des ids du cache
46
		// Affichage des ids du cache
47
		echo 'Tags des enregistrements en cache : <pre>'.print_r($cache->getTags(), true).'</pre>';
47
		echo 'Tags des enregistrements en cache : <pre>'.print_r($cache->getTags(), true).'</pre>';
48
		
48
		
49
		// Affichage des ids du cache pour un tag donnée
49
		// Affichage des ids du cache pour un tag donnée
50
		$tag01 = 'tagTest01';
50
		$tag01 = 'tagTest01';
51
		$tag02 = 'tagTest02';
51
		$tag02 = 'tagTest02';
52
		$tag03 = 'tagTest03';
52
		$tag03 = 'tagTest03';
53
		echo "Ids avec les tag '$tag02, $tag03' : ".'<pre>'.print_r($cache->getIdsAvecLesTags(array($tag02, $tag03)), true).'</pre>';
53
		echo "Ids avec les tag '$tag02, $tag03' : ".'<pre>'.print_r($cache->getIdsAvecLesTags(array($tag02, $tag03)), true).'</pre>';
54
		echo "Ids possédant le tag '$tag01' : ".'<pre>'.print_r($cache->getIdsAvecUnTag(array($tag01)), true).'</pre>';
54
		echo "Ids possédant le tag '$tag01' : ".'<pre>'.print_r($cache->getIdsAvecUnTag(array($tag01)), true).'</pre>';
55
		echo "Ids sans les tag '$tag01, $tag02' : ".'<pre>'.print_r($cache->getIdsSansLesTags(array($tag01, $tag02)), true).'</pre>';
55
		echo "Ids sans les tag '$tag01, $tag02' : ".'<pre>'.print_r($cache->getIdsSansLesTags(array($tag01, $tag02)), true).'</pre>';
56
		
56
		
57
		// Test du test de l'existence du cache
57
		// Test du test de l'existence du cache
58
		$id_test = $id01;
58
		$id_test = $id01;
59
		echo ($cache->tester($id_test) ? "OK : le cache '$id_test' existe" : "KO : le cache '$id_test' devrait exister").'<br/>';
59
		echo ($cache->tester($id_test) ? "OK : le cache '$id_test' existe" : "KO : le cache '$id_test' devrait exister").'<br/>';
60
		
60
		
61
		// Affichage du pourcentage de remplissage
61
		// Affichage du pourcentage de remplissage
62
		echo 'Pourcentage de remplissage : '.$cache->getPourcentageRemplissage().'%<br/>';
62
		echo 'Pourcentage de remplissage : '.$cache->getPourcentageRemplissage().'%<br/>';
63
		
63
		
64
		// Affichage des métadonnées
64
		// Affichage des métadonnées
65
		$meta03 = $cache->getMetadonnees($id03);
65
		$meta03 = $cache->getMetadonnees($id03);
66
		echo "Métadonnées du cache '$id03' : <pre>".print_r($meta03, true).'</pre>';
66
		echo "Métadonnées du cache '$id03' : <pre>".print_r($meta03, true).'</pre>';
67
		$meta01 = $cache->getMetadonnees($id_test);
67
		$meta01 = $cache->getMetadonnees($id_test);
68
		echo "Métadonnées du cache '$id_test' : <pre>".print_r($meta01, true).'</pre>';
68
		echo "Métadonnées du cache '$id_test' : <pre>".print_r($meta01, true).'</pre>';
69
		
69
		
70
		// Nettoyage & suppression
70
		// Nettoyage & suppression
71
		echo "Temps avant suppression du cache : ".(time() - $meta01['expiration']).'s<br/>';
71
		echo "Temps avant suppression du cache : ".(time() - $meta01['expiration']).'s<br/>';
72
		if ((time() - $meta01['expiration']) >= -30) {
72
		if ((time() - $meta01['expiration']) >= -30) {
73
			// Suppressions
73
			// Suppressions
74
			$cache->supprimer($id_test);
74
			$cache->supprimer($id_test);
75
			echo (!$cache->tester($id_test) ? "OK : le cache '$id_test' a bien été supprimé" : "KO : le cache '$id_test' n'a pas été supprimé").'<br/>';
75
			echo (!$cache->tester($id_test) ? "OK : le cache '$id_test' a bien été supprimé" : "KO : le cache '$id_test' n'a pas été supprimé").'<br/>';
76
			
76
			
77
			// Nettoyage
77
			// Nettoyage
78
			$cache->nettoyer(Cache::NETTOYAGE_MODE_AVEC_LES_TAGS, array($tag02, $tag03));
78
			$cache->nettoyer(Cache::NETTOYAGE_MODE_AVEC_LES_TAGS, array($tag02, $tag03));
79
			echo (!$cache->tester($id03) ? "OK : le cache '$id03' a bien été supprimé" : "KO : le cache '$id03' n'a pas été supprimé").'<br/>';
79
			echo (!$cache->tester($id03) ? "OK : le cache '$id03' a bien été supprimé" : "KO : le cache '$id03' n'a pas été supprimé").'<br/>';
80
			$cache->nettoyer(Cache::NETTOYAGE_MODE_SANS_LES_TAGS, array($tag01));
80
			$cache->nettoyer(Cache::NETTOYAGE_MODE_SANS_LES_TAGS, array($tag01));
81
			echo ($cache->tester($id02) ? "OK : le cache '$id02' n'a pas été supprimé" : "KO : le cache '$id02' a été supprimé").'<br/>';
81
			echo ($cache->tester($id02) ? "OK : le cache '$id02' n'a pas été supprimé" : "KO : le cache '$id02' a été supprimé").'<br/>';
82
			$cache->nettoyer(Cache::NETTOYAGE_MODE_EXPIRATION);
82
			$cache->nettoyer(Cache::NETTOYAGE_MODE_EXPIRATION);
83
			echo ($cache->tester($id02) ? "OK : le cache '$id02' n'a pas été supprimé" : "KO : le cache '$id02' a été supprimé").'<br/>';
83
			echo ($cache->tester($id02) ? "OK : le cache '$id02' n'a pas été supprimé" : "KO : le cache '$id02' a été supprimé").'<br/>';
84
			$cache->nettoyer(Cache::NETTOYAGE_MODE_TOUS);
84
			$cache->nettoyer(Cache::NETTOYAGE_MODE_TOUS);
85
			echo (!$cache->tester($id01) ? "OK : le cache '$id02' a été supprimé" : "KO : le cache '$id02' n'a pas été supprimé").'<br/>';
85
			echo (!$cache->tester($id01) ? "OK : le cache '$id02' a été supprimé" : "KO : le cache '$id02' n'a pas été supprimé").'<br/>';
86
		} else if ((time() - $meta01['expiration']) < -60) {
86
		} else if ((time() - $meta01['expiration']) < -60) {
87
			// Test ajout d'une durée de vie supplémentaire
87
			// Test ajout d'une durée de vie supplémentaire
88
			$meta01 = $cache->getMetadonnees($id_test);
88
			$meta01 = $cache->getMetadonnees($id_test);
89
			echo "Durée de vie du cache '$id_test' : ".$meta01['expiration'].'<br/>';
89
			echo "Durée de vie du cache '$id_test' : ".$meta01['expiration'].'<br/>';
90
			$cache->ajouterSupplementDureeDeVie($id_test, -3540);
90
			$cache->ajouterSupplementDureeDeVie($id_test, -3540);
91
			$meta02 = $cache->getMetadonnees($id_test);
91
			$meta02 = $cache->getMetadonnees($id_test);
92
			echo "Durée de vie du cache '$id_test' après ajout supplément de -3540s : ".$meta02['expiration'].
92
			echo "Durée de vie du cache '$id_test' après ajout supplément de -3540s : ".$meta02['expiration'].
93
				' - diff. : '.($meta02['expiration'] - $meta01['expiration']).'<br/>';
93
				' - diff. : '.($meta02['expiration'] - $meta01['expiration']).'<br/>';
94
		}
94
		}
95
	}
95
	}
96
	
-
 
97
	/**
-
 
98
     * Determine system TMP directory and detect if we have read access
-
 
99
     *
-
 
100
     * inspired from Zend_File_Transfer_Adapter_Abstract & Zend_Cache
-
 
101
     *
-
 
102
     * @return string
-
 
103
     */
-
 
104
    public function getTmpDir() {
-
 
105
        $tmpdir = array();
-
 
106
        foreach (array($_ENV, $_SERVER) as $tab) {
-
 
107
            foreach (array('TMPDIR', 'TEMP', 'TMP', 'windir', 'SystemRoot') as $key) {
-
 
108
                if (isset($tab[$key])) {
-
 
109
                    if (($key == 'windir') or ($key == 'SystemRoot')) {
-
 
110
                        $dir = realpath($tab[$key] . '\\temp');
-
 
111
                    } else {
-
 
112
                        $dir = realpath($tab[$key]);
-
 
113
                    }
-
 
114
                    if ($this->isGoodTmpDir($dir)) {
-
 
115
                        return $dir;
-
 
116
                    }
-
 
117
                }
-
 
118
            }
-
 
119
        }
-
 
120
        $upload = ini_get('upload_tmp_dir');
-
 
121
        if ($upload) {
-
 
122
            $dir = realpath($upload);
-
 
123
            if ($this->isGoodTmpDir($dir)) {
-
 
124
                return $dir;
-
 
125
            }
-
 
126
        }
-
 
127
        if (function_exists('sys_get_temp_dir')) {
-
 
128
            $dir = sys_get_temp_dir();
-
 
129
            if ($this->isGoodTmpDir($dir)) {
-
 
130
                return $dir;
-
 
131
            }
-
 
132
        }
-
 
133
        // Attemp to detect by creating a temporary file
-
 
134
        $tempFile = tempnam(md5(uniqid(rand(), TRUE)), '');
-
 
135
        if ($tempFile) {
-
 
136
            $dir = realpath(dirname($tempFile));
-
 
137
            unlink($tempFile);
-
 
138
            if ($this->isGoodTmpDir($dir)) {
-
 
139
                return $dir;
-
 
140
            }
-
 
141
        }
-
 
142
        if ($this->isGoodTmpDir('/tmp')) {
-
 
143
            return '/tmp';
-
 
144
        }
-
 
145
        if ($this->isGoodTmpDir('\\temp')) {
-
 
146
            return '\\temp';
-
 
147
        }
-
 
148
    }
-
 
149
    
-
 
150
    /**
-
 
151
     * Verify if the given temporary directory is readable and writable
-
 
152
     *
-
 
153
     * @param $dir temporary directory
-
 
154
     * @return boolean true if the directory is ok
-
 
155
     */
-
 
156
    protected function isGoodTmpDir($dir){
-
 
157
        if (is_readable($dir)) {
-
 
158
            if (is_writable($dir)) {
-
 
159
                return true;
-
 
160
            }
-
 
161
        }
-
 
162
        return false;
-
 
163
    }
-
 
164
    
-
 
165
}
96
}
166
?>
97
?>