@filemtime($source)) and (!defined('_VAR_MODE') or _VAR_MODE != 'recalcul') ) { return $f; } if (!lire_fichier($source, $contenu)) { return $source; } // traiter le contenu $contenu = $minifier($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 minification de contenu return $minifier($source); } /** * Synonyme historique de minifier, pour compatibilite * * @deprecated Utiliser minifier() * * @param string $source * @param string $format * @return string */ function compacte($source, $format = null) { return minifier($source, $format); } /** * Compacte les éléments CSS et JS d'un HTML * * Cette fonction vérifie les réglages du site et traite le compactage * des css et/ou js d'un * * Un fichier .gz est crée pour chaque, qui peut etre utilisé par apache * et lui éviter de recompresser à 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)$ * * * @see compacte_head_files() * * @param string $flux * Partie de contenu du head HTML * @return string * Partie de contenu du head HTML */ 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 ((!test_espace_prive() and $GLOBALS['meta']['auto_compress_css'] == 'oui') or (test_espace_prive() and !defined('_INTERDIRE_COMPACTE_HEAD_ECRIRE'))) { $flux = compacte_head_files($flux, 'css'); } if ((!test_espace_prive() and $GLOBALS['meta']['auto_compress_js'] == 'oui') or (test_espace_prive() and !defined('_INTERDIRE_COMPACTE_HEAD_ECRIRE'))) { $flux = compacte_head_files($flux, 'js'); } } return $flux; } /** * Embarquer sous forme URI Scheme un fichier * * Une URI Scheme est de la forme data:xxx/yyy;base64,.... * * Experimental * * @filtre * * @staticvar array $mime * Couples (extension de fichier => type myme) * @param string $src * Chemin du fichier * @param string $base * Le chemin de base à partir duquel chercher $src * @param int $maxsize * Taille maximale des fichiers à traiter * @return string * URI Scheme du fichier si la compression est faite, * URL du fichier sinon (la source) */ function filtre_embarque_fichier($src, $base = '', $maxsize = 4096) { static $mime = array(); $extension = substr(strrchr($src, '.'), 1); $filename = $base . $src; if (!file_exists($filename) or filesize($filename) > $maxsize or !lire_fichier($filename, $contenu) ) { return $src; } if (!isset($mime[$extension])) { if (isset($GLOBALS['tables_mime']) and isset($GLOBALS['tables_mime'][$extension])) { $mime[$extension] = $GLOBALS['tables_mime'][$extension]; } } if (!isset($mime[$extension])) { if (!function_exists('sql_getfetsel')) { include_spip('base/abstract_sql'); } $mime[$extension] = sql_getfetsel('mime_type', 'spip_types_documents', 'extension=' . sql_quote($extension)); } $base64 = base64_encode($contenu); $encoded = 'data:' . $mime[$extension] . ';base64,' . $base64; return $encoded; } /** * Embarquer le 'src' d'une balise html en URI Scheme * * Experimental * * @param string $img * Code HTML d'une image * @param int $maxsize * Taille maximale des fichiers à traiter * @return string * Code HTML de l'image, avec la source en URI Scheme si cela a été possible. */ function filtre_embarque_src($img, $maxsize = 4096) { $src = extraire_attribut($img, 'src'); if ($src2 = filtre_embarque_fichier($src, '', $maxsize) and $src2 != $src) { $img = inserer_attribut($img, 'src', $src2); } return $img; }