[SPIP] +2.1.12
[velocampus/web/www.git] / www / extensions / compresseur / filtres / compresseur.php
1 <?php
2
3 if (!defined("_ECRIRE_INC_VERSION")) return;
4
5 // Si la source est un chemin, on retourne un chemin avec le contenu compacte
6 // dans _DIR_VAR/cache_$format/
7 // Si c'est un flux on le renvoit compacte
8 // Si on ne sait pas compacter, on renvoie ce qu'on a recu
9 // http://doc.spip.org/@compacte
10 function compacte($source, $format = null) {
11 if (!$format AND preg_match(',\.(js|css)$,', $source, $r))
12 $format = $r[1];
13 include_spip('inc/compresseur');
14 if (!function_exists($compacte = 'compacte_'.$format))
15 return $source;
16
17 // Si on n'importe pas, est-ce un fichier ?
18 if (!preg_match(',[\s{}],', $source)
19 AND preg_match(',\.'.$format.'$,i', $source, $r)
20 AND file_exists($source)) {
21 // si c'est une css, il faut reecrire les url en absolu
22 if ($format=='css')
23 $source = url_absolue_css($source);
24
25 $f = basename($source,'.'.$format);
26 $f = sous_repertoire (_DIR_VAR, 'cache-'.$format)
27 . preg_replace(",(.*?)(_rtl|_ltr)?$,","\\1-compacte-"
28 . substr(md5("$source-compacte"), 0,4) . "\\2", $f, 1)
29 . '.' . $format;
30
31 if ((@filemtime($f) > @filemtime($source))
32 AND ($GLOBALS['var_mode'] != 'recalcul'))
33 return $f;
34
35 if (!lire_fichier($source, $contenu))
36 return $source;
37
38 // traiter le contenu
39 $contenu = $compacte($contenu);
40
41 // ecrire le fichier destination, en cas d'echec renvoyer la source
42 if (ecrire_fichier($f, $contenu, true))
43 return $f;
44 else
45 return $source;
46 }
47
48 // Sinon simple compactage de contenu
49 return $compacte($source);
50 }
51
52 // Cette fonction verifie les reglages du site et traite le compactage
53 // des css et/ou js d'un <head>
54 // un fichier .gz est cree pour chaque, qui peut etre utilise par apache
55 // et lui eviter de recompresser a chaque hit, avec les directives suivantes :
56 //<IfModule mod_gzip.c>
57 //mod_gzip_on Yes
58 //mod_gzip_can_negotiate Yes
59 //mod_gzip_static_suffix .gz
60 //AddEncoding gzip .gz
61 //mod_gzip_item_include file \.(js|css)$
62 //</IfModule>
63 // http://doc.spip.org/@compacte_head
64 function compacte_head($flux){
65 include_spip('inc/compresseur');
66 if (!defined('_INTERDIRE_COMPACTE_HEAD')){
67 // dans l'espace prive on compacte toujours, c'est concu pour
68 if ($GLOBALS['meta']['auto_compress_css'] == 'oui' OR (test_espace_prive() AND !defined('_INTERDIRE_COMPACTE_HEAD_ECRIRE')))
69 $flux = compacte_head_css($flux);
70 if ($GLOBALS['meta']['auto_compress_js'] == 'oui' OR (test_espace_prive() AND !defined('_INTERDIRE_COMPACTE_HEAD_ECRIRE')))
71 $flux = compacte_head_js($flux);
72 }
73 return $flux;
74 }
75
76 /**
77 * Embarquer sous forme URI Scheme
78 * data:xxx/yyy;base64,....
79 * un fichier
80 *
81 * Experimental
82 *
83 * @staticvar array $mime
84 * @param string $src
85 * chemin du fichier
86 * @param string $base
87 * le chemin de base a partir duquel chercher $src
88 * @param int $maxsize
89 * @return string
90 */
91 function filtre_embarque_fichier ($src, $base="", $maxsize = 4096) {
92 static $mime = array();
93 $extension = substr(strrchr($src,'.'),1);
94 $filename = $base . $src;
95 #var_dump("$base:$src:$filename");
96
97 if (!file_exists($filename)
98 OR filesize($filename)>$maxsize
99 OR !lire_fichier($filename, $contenu))
100 return $src;
101
102 if (!isset($mime[$extension]))
103 $mime[$extension] = sql_getfetsel('mime_type','spip_types_documents','extension='.sql_quote($extension));
104
105 $base64 = base64_encode($contenu);
106 $encoded = 'data:'.$mime[$extension].';base64,'.$base64;
107 #var_dump($encoded);
108
109 return $encoded;
110 }
111
112 /**
113 * Embarquer le 'src' d'une balise html en URI Scheme
114 *
115 * Experimental
116 *
117 * @param string $img
118 * @param int $maxsize
119 * @return string
120 */
121 function filtre_embarque_src ($img, $maxsize = 4096){
122 $src = extraire_attribut($img,'src');
123 if ($src2=filtre_embarque_fichier($src) AND $src2!= $src) {
124 $img = inserer_attribut($img, 'src', $src2);
125 }
126 return $img;
127 }
128 ?>