PageRenderTime 58ms CodeModel.GetById 32ms RepoModel.GetById 0ms app.codeStats 0ms

/misc/js/gzip.php

https://github.com/skygreen2001/betterlife
PHP | 130 lines | 119 code | 7 blank | 4 comment | 30 complexity | 3a53756acbc72c6dec286482f686a35d MD5 | raw file
  1. <?php
  2. /**
  3. * @see http://mrthink.net/ue-php-gzip-function/
  4. */
  5. require_once(dirname(__FILE__) . "/../../init.php");
  6. UtilAjax::init();
  7. if (extension_loaded('zlib')) {//检查服务器是否开启了zlib拓展
  8. ob_start('ob_gzhandler');
  9. }
  10. header("Cache-Control: must-revalidate");
  11. $offset = 60 * 60 * 24 * 3;
  12. $ExpStr = "Expires: " . gmdate("D, d M Y H:i:s", time() + $offset) . " GMT";
  13. header($ExpStr);
  14. ob_start("compress");
  15. function compress($buffer)
  16. {
  17. //去除文件中的注释
  18. $buffer = preg_replace('!/\*[^*]*\*+([^/][^*]*\*+)*/!', '', $buffer);
  19. return $buffer;
  20. }
  21. $jsFile = @$_GET['js'];
  22. $cssFile = @$_GET['css'];
  23. $group = @$_GET['g'];
  24. $version = @$_GET['v'];
  25. if (isset($jsFile)) {
  26. if (contain($jsFile, "?")) {
  27. $jsFile = substr($jsFile, 0, strpos($jsFile, "?"));
  28. }
  29. if (!endWith($jsFile, ".js")) {
  30. return;
  31. }
  32. header("Content-type: text/javascript; charset: UTF-8");
  33. if (EnumJsFramework::isEnumValue($group)) {
  34. $ajax_root = Gc::$nav_root_path . "misc" . DS . "js" . DS . "ajax" . DS;
  35. $jsFile = str_replace("/", DS, $jsFile);
  36. switch ($group) {
  37. case EnumJsFramework::JS_FW_JQUERY:
  38. case EnumJsFramework::JS_FW_MOOTOOLS:
  39. echo "请使用UtilAjax的load方法,直接加载" . $group . "的js文件;无需使用Gzip压缩!";
  40. die();
  41. break;
  42. case EnumJsFramework::JS_FW_PROTOTYPE:
  43. case EnumJsFramework::JS_FW_DOJO:
  44. case EnumJsFramework::JS_FW_YUI:
  45. case EnumJsFramework::JS_FW_SCRIPTACULOUS:
  46. include($ajax_root . $group . DS . $group . ".js");
  47. break;
  48. case EnumJsFramework::JS_FW_EXTJS:
  49. if ($version < 4) {
  50. $ext_root = $ajax_root . "ext" . DS;
  51. } else {
  52. $ext_root = $ajax_root . "ext4" . DS;
  53. }
  54. $js_header = $ext_root . $jsFile;
  55. include($js_header);
  56. break;
  57. }
  58. } else {
  59. $url_base = UtilNet::urlbase();
  60. if (contain($jsFile, $url_base)) {
  61. $jsFile = str_replace($url_base, "", $jsFile);
  62. $file_sub_dir = str_replace("/", DS, dirname($_SERVER["SCRIPT_FILENAME"])) . DS;
  63. if (contain(Gc::$nav_root_path, "/mnt/") && contain($file_sub_dir, "/var/")) {
  64. $file_sub_dir = str_replace("/var/", "/mnt/", $file_sub_dir);
  65. }
  66. if (contain($file_sub_dir, Gc::$nav_root_path)) {
  67. $jsFile = Gc::$nav_root_path . $jsFile;
  68. } else {
  69. $jsFile = $_SERVER["DOCUMENT_ROOT"] . "/" . $jsFile;
  70. }
  71. $jsFile = str_replace("/", DS, $jsFile);
  72. }
  73. include($jsFile);
  74. }
  75. }
  76. if (isset($cssFile)) {
  77. if (contain($cssFile, "?")) {
  78. $cssFile = substr($cssFile, 0, strpos($cssFile, "?"));
  79. }
  80. if (!endWith($cssFile, ".css")) {
  81. return;
  82. }
  83. header("Content-type: text/css; charset: UTF-8");
  84. if (EnumJsFramework::isEnumValue($group)) {
  85. $ajax_root = Gc::$nav_root_path . "misc" . DS . "js" . DS . "ajax" . DS;
  86. $cssFile = str_replace("/", DS, $cssFile);
  87. switch ($group) {
  88. case EnumJsFramework::JS_FW_EXTJS:
  89. if ($version < 4) {
  90. $ext_root = $ajax_root . "ext" . DS;
  91. } else {
  92. $ext_root = $ajax_root . "ext4" . DS;
  93. }
  94. include($ext_root . $cssFile);
  95. break;
  96. }
  97. } else {
  98. $url_base = UtilNet::urlbase();
  99. if (contain($cssFile, $url_base)) {
  100. $cssFile = str_replace($url_base, "", $cssFile);
  101. $file_sub_dir = str_replace("/", DS, dirname($_SERVER["SCRIPT_FILENAME"])) . DS;
  102. if (contain(Gc::$nav_root_path, "/mnt/") && contain($file_sub_dir, "/var/")) {
  103. $file_sub_dir = str_replace("/var/", "/mnt/", $file_sub_dir);
  104. }
  105. if (contain($file_sub_dir, Gc::$nav_root_path)) {
  106. $cssFile = Gc::$nav_root_path . $cssFile;
  107. } else {
  108. $cssFile = $_SERVER["DOCUMENT_ROOT"] . "/" . $cssFile;
  109. }
  110. $cssFile = str_replace("/", DS, $cssFile);
  111. }
  112. include($cssFile);
  113. }
  114. }
  115. if (extension_loaded("zlib")) {
  116. if (Gc::$is_online_optimize) {
  117. $result = ob_get_clean();
  118. $result = UtilString::online_optimize($result);
  119. echo $result;
  120. } else {
  121. ob_end_flush();//输出buffer中的内容
  122. }
  123. }