X-Git-Url: http://git.cyclocoop.org/?p=velocampus%2Fweb%2Fwww.git;a=blobdiff_plain;f=www%2Fextensions%2Fcompresseur%2Ffiltres%2Fcompresseur.php;fp=www%2Fextensions%2Fcompresseur%2Ffiltres%2Fcompresseur.php;h=a3adfe44c53c865fe396d39ace565d34ca68d9e0;hp=0000000000000000000000000000000000000000;hb=80b4d3e85f78d402ed2e73f8f5d1bf4c19962eed;hpb=aaf970bf4cdaf76689ecc10609048e18d073820c diff --git a/www/extensions/compresseur/filtres/compresseur.php b/www/extensions/compresseur/filtres/compresseur.php new file mode 100644 index 0000000..a3adfe4 --- /dev/null +++ b/www/extensions/compresseur/filtres/compresseur.php @@ -0,0 +1,128 @@ + @filemtime($source)) + AND ($GLOBALS['var_mode'] != 'recalcul')) + return $f; + + if (!lire_fichier($source, $contenu)) + return $source; + + // traiter le contenu + $contenu = $compacte($contenu); + + // ecrire le fichier destination, en cas d'echec renvoyer la source + if (ecrire_fichier($f, $contenu, true)) + return $f; + else + return $source; + } + + // Sinon simple compactage de contenu + return $compacte($source); +} + +// Cette fonction verifie les reglages du site et traite le compactage +// des css et/ou js d'un +// un fichier .gz est cree pour chaque, qui peut etre utilise par apache +// et lui eviter de recompresser a chaque hit, avec les directives suivantes : +// +//mod_gzip_on Yes +//mod_gzip_can_negotiate Yes +//mod_gzip_static_suffix .gz +//AddEncoding gzip .gz +//mod_gzip_item_include file \.(js|css)$ +// +// http://doc.spip.org/@compacte_head +function compacte_head($flux){ + include_spip('inc/compresseur'); + if (!defined('_INTERDIRE_COMPACTE_HEAD')){ + // dans l'espace prive on compacte toujours, c'est concu pour + if ($GLOBALS['meta']['auto_compress_css'] == 'oui' OR (test_espace_prive() AND !defined('_INTERDIRE_COMPACTE_HEAD_ECRIRE'))) + $flux = compacte_head_css($flux); + if ($GLOBALS['meta']['auto_compress_js'] == 'oui' OR (test_espace_prive() AND !defined('_INTERDIRE_COMPACTE_HEAD_ECRIRE'))) + $flux = compacte_head_js($flux); + } + return $flux; +} + +/** + * Embarquer sous forme URI Scheme + * data:xxx/yyy;base64,.... + * un fichier + * + * Experimental + * + * @staticvar array $mime + * @param string $src + * chemin du fichier + * @param string $base + * le chemin de base a partir duquel chercher $src + * @param int $maxsize + * @return string + */ +function filtre_embarque_fichier ($src, $base="", $maxsize = 4096) { + static $mime = array(); + $extension = substr(strrchr($src,'.'),1); + $filename = $base . $src; + #var_dump("$base:$src:$filename"); + + if (!file_exists($filename) + OR filesize($filename)>$maxsize + OR !lire_fichier($filename, $contenu)) + return $src; + + if (!isset($mime[$extension])) + $mime[$extension] = sql_getfetsel('mime_type','spip_types_documents','extension='.sql_quote($extension)); + + $base64 = base64_encode($contenu); + $encoded = 'data:'.$mime[$extension].';base64,'.$base64; + #var_dump($encoded); + + return $encoded; +} + +/** + * Embarquer le 'src' d'une balise html en URI Scheme + * + * Experimental + * + * @param string $img + * @param int $maxsize + * @return string + */ +function filtre_embarque_src ($img, $maxsize = 4096){ + $src = extraire_attribut($img,'src'); + if ($src2=filtre_embarque_fichier($src) AND $src2!= $src) { + $img = inserer_attribut($img, 'src', $src2); + } + return $img; +} +?> \ No newline at end of file