Subversion Repositories Applications.framework

Rev

Rev 269 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 269 Rev 282
Line 1... Line 1...
1
<?php
1
<?php
2
class CacheFichier {
2
class CacheFichier {
3
	/**
3
	/**
4
	 * Available options
4
	 * Options disponibles
-
 
5
	 * 
-
 
6
	 * ====> (string) stockage_chemin :
-
 
7
	 * Chemin vers  le dossier devant contenir l'arborescence du cache.
-
 
8
	 * 
-
 
9
	 * =====> (boolean) fichier_verrou :
-
 
10
	 * - Active / Désactive le verrouillage des fichiers
-
 
11
	 * - Peut éviter la corruption du cache dans de mauvaises circonstances, mais cela ne fonctionne pas sur des serveur 
-
 
12
	 * multithread et sur les systèmes de fichiers NFS par exemple.
-
 
13
	 *
-
 
14
	 * =====> (boolean) controle_lecture :
-
 
15
	 * - Activer / désactiver le contrôle de lecture
-
 
16
	 * - S'il est activé, une clé de contrôle est ajoutée dans le fichier de cache et cette clé est comparée avec celle calculée
-
 
17
	 * après la lecture.
-
 
18
	 *
-
 
19
	 * =====> (string) controle_lecture_type :
-
 
20
	 * Type de contrôle de lecture (seulement si le contrôle de lecture est activé).
-
 
21
	 * Les valeurs disponibles sont:
-
 
22
	 * - «md5» pour un contrôle md5 (le meilleur mais le plus lent)
-
 
23
	 * - «crc32» pour un contrôle de hachage crc32 (un peu moins sécurisé, mais plus rapide, un meilleur choix)
-
 
24
	 * - «adler32» pour un contrôle de hachage adler32  (excellent choix aussi, plus rapide que crc32)
-
 
25
	 * - «strlen» pour un test de longueur uniquement (le plus rapide)
-
 
26
	 *
-
 
27
	 * =====> (int) dossier_niveau :
-
 
28
	 * - Permet de réglez le nombre de niveau de sous-dossier que contiendra l'arborescence des dossiers du cache.
-
 
29
	 * 0 signifie "pas de sous-dossier pour le cache", 
-
 
30
	 * 1 signifie "un niveau de sous-dossier", 
-
 
31
	 * 2 signifie "deux niveaux" ...
-
 
32
	 * Cette option peut accélérer le cache seulement lorsque vous avez plusieurs centaines de fichiers de cache. 
-
 
33
	 * Seuls des tests spécifiques peuvent vous aider à choisir la meilleure valeur possible pour vous.
-
 
34
	 * 1 ou 2 peut être est un bon début.
-
 
35
	 *
-
 
36
	 * =====> (int) dossier_umask :
-
 
37
	 * - Umask pour les sous-dossiers de l'arborescence du cache.
-
 
38
	 *
-
 
39
	 * =====> (string) fichier_prefixe :
-
 
40
	 * - préfixe pour les fichiers du cache
-
 
41
	 * - ATTENTION : faite vraiment attention avec cette option, car une valeur trop générique dans le dossier cache du système
-
 
42
	 * (comme /tmp) peut provoquer des catastrophes lors du nettoyage du cache.
5
	 *
43
	 *
6
	 * =====> (string) cache_dir :
44
	 * =====> (int) fichier_umask :
7
	 * - Directory where to put the cache files
45
	 * - Umask pour les fichiers de cache
8
	 *
46
	 *
9
	 * =====> (boolean) file_locking :
-
 
10
	 * - Enable / disable file_locking
-
 
11
	 * - Can avoid cache corruption under bad circumstances but it doesn't work on multithread
-
 
12
	 * webservers and on NFS filesystems for example
-
 
13
	 *
-
 
14
	 * =====> (boolean) read_control :
-
 
15
	 * - Enable / disable read control
-
 
16
	 * - If enabled, a control key is embeded in cache file and this key is compared with the one
-
 
17
	 * calculated after the reading.
-
 
18
	 *
-
 
19
	 * =====> (string) read_control_type :
-
 
20
	 * - Type of read control (only if read control is enabled). Available values are :
-
 
21
	 *   'md5' for a md5 hash control (best but slowest)
-
 
22
	 *   'crc32' for a crc32 hash control (lightly less safe but faster, better choice)
-
 
23
	 *   'adler32' for an adler32 hash control (excellent choice too, faster than crc32)
-
 
24
	 *   'strlen' for a length only test (fastest)
-
 
25
	 *
-
 
26
	 * =====> (int) hashed_directory_level :
-
 
27
	 * - Hashed directory level
-
 
28
	 * - Set the hashed directory structure level. 0 means "no hashed directory
-
 
29
	 * structure", 1 means "one level of directory", 2 means "two levels"...
-
 
30
	 * This option can speed up the cache only when you have many thousands of
-
 
31
	 * cache file. Only specific benchs can help you to choose the perfect value
-
 
32
	 * for you. Maybe, 1 or 2 is a good start.
-
 
33
	 *
-
 
34
	 * =====> (int) hashed_directory_umask :
-
 
35
	 * - Umask for hashed directory structure
-
 
36
	 *
-
 
37
	 * =====> (string) file_name_prefix :
-
 
38
	 * - prefix for cache files
-
 
39
	 * - be really carefull with this option because a too generic value in a system cache dir
-
 
40
	 *   (like /tmp) can cause disasters when cleaning the cache
-
 
41
	 *
-
 
42
	 * =====> (int) cache_file_umask :
-
 
43
	 * - Umask for cache files
-
 
44
	 *
-
 
45
	 * =====> (int) metatadatas_array_max_size :
47
	 * =====> (int) metadonnees_max_taille :
46
	 * - max size for the metadatas array (don't change this value unless you
48
	 * - taille maximum pour le tableau de métadonnées du cache (ne changer pas cette valeur sauf si vous savez ce que vous faite)
47
	 *   know what you are doing)
-
 
48
	 *
49
	 *
49
	 * @var array available options
50
	 * @var array options disponibles
50
	 */
51
	 */
51
	protected $options = array(
52
	protected $options = array(
52
		'stockage_chemin' => null,
53
		'stockage_chemin' => null,
53
		'fichier_verrou' => true,
54
		'fichier_verrou' => true,
54
		'controle_lecture' => true,
55
		'controle_lecture' => true,
Line 76... Line 77...
76
	 * @throws Zend_Cache_Exception
77
	 * @throws Zend_Cache_Exception
77
	 * @return void
78
	 * @return void
78
	 */
79
	 */
79
	public function __construct(array $options = array(), Cache $cache) {
80
	public function __construct(array $options = array(), Cache $cache) {
80
		$this->Cache = $cache;
81
		$this->Cache = $cache;
-
 
82
		$this->initialiserOptionsParConfig();
81
		$this->setOptions($options);
83
		$this->setOptions($options);
Line 82... Line 84...
82
 
84
 
83
		if (isset($this->options['prefixe_fichier'])) {
85
		if (isset($this->options['prefixe_fichier'])) {
84
			if (!preg_match('~^[a-zA-Z0-9_]+$~D', $this->options['prefixe_fichier'])) {
86
			if (!preg_match('~^[a-zA-Z0-9_]+$~D', $this->options['prefixe_fichier'])) {
Line 96... Line 98...
96
			// See #ZF-4422
98
			// See #ZF-4422
97
			$this->options['fichier_umask'] = octdec($this->options['fichier_umask']);
99
			$this->options['fichier_umask'] = octdec($this->options['fichier_umask']);
98
		}
100
		}
99
	}
101
	}
Line -... Line 102...
-
 
102
	
-
 
103
	private function initialiserOptionsParConfig() {
-
 
104
		while (list($nom, $valeur) = each($this->options)) {
-
 
105
			if (Config::existe($nom)) {
-
 
106
				$this->options[$nom] = Config::get($nom);
-
 
107
			}
-
 
108
		}
-
 
109
	}
100
	
110
	
101
	private function setOptions($options) {
111
	private function setOptions($options) {
102
		while (list($nom, $valeur) = each($options)) {
112
		while (list($nom, $valeur) = each($options)) {
103
			if (!is_string($nom)) {
113
			if (!is_string($nom)) {
104
				trigger_error("Nom d'option incorecte : $nom", E_USER_WARNING);
114
				trigger_error("Nom d'option incorecte : $nom", E_USER_WARNING);