3 if (!defined("_ECRIRE_INC_VERSION")) return;
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))
13 include_spip('inc/compresseur');
14 if (!function_exists($compacte = 'compacte_'.$format))
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
23 $source = url_absolue_css($source);
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)
31 if ((@filemtime
($f) > @filemtime
($source))
32 AND ($GLOBALS['var_mode'] != 'recalcul'))
35 if (!lire_fichier($source, $contenu))
39 $contenu = $compacte($contenu);
41 // ecrire le fichier destination, en cas d'echec renvoyer la source
42 if (ecrire_fichier($f, $contenu, true))
48 // Sinon simple compactage de contenu
49 return $compacte($source);
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>
58 //mod_gzip_can_negotiate Yes
59 //mod_gzip_static_suffix .gz
60 //AddEncoding gzip .gz
61 //mod_gzip_item_include file \.(js|css)$
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);
77 * Embarquer sous forme URI Scheme
78 * data:xxx/yyy;base64,....
83 * @staticvar array $mime
87 * le chemin de base a partir duquel chercher $src
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");
97 if (!file_exists($filename)
98 OR filesize($filename)>$maxsize
99 OR !lire_fichier($filename, $contenu))
102 if (!isset($mime[$extension]))
103 $mime[$extension] = sql_getfetsel('mime_type','spip_types_documents','extension='.sql_quote($extension));
105 $base64 = base64_encode($contenu);
106 $encoded = 'data:'.$mime[$extension].';base64,'.$base64;
113 * Embarquer le 'src' d'une balise html en URI Scheme
118 * @param int $maxsize
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);