PageRenderTime 45ms CodeModel.GetById 14ms RepoModel.GetById 0ms app.codeStats 0ms

/_core_/tags/spip-3.0.2/plugins/compresseur/compresseur_fonctions.php

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