outputfilter.gzcompress.php
上传用户:xjjlds
上传日期:2015-12-05
资源大小:22823k
文件大小:3k
源码类别:

多媒体编程

开发平台:

Visual C++

  1. <?php 
  2. /*
  3. * Smarty plugin
  4. * -------------------------------------------------------------
  5. * Type:outputfilter
  6. * Name:gzip
  7. * Version:0.1
  8. * Date:2003-02-13
  9. * Author:Joscha Feth, joscha@feth.com
  10. * Purpose:gzip the output, before it is sent to the client
  11. * ATTENTION: this filter does only work if caching is disabled,
  12. * because the cached page would be gzipped and it seems as Smarty
  13. * can not (yet) handle that, even if you send the Content-Encoding yourself.
  14. * (However, you need not worry about this, if caching is enabled, this filter just returns the source
  15. * without compression.)
  16. * Why does it not work with caching (yet)?
  17. * ----------------------------------------
  18. * This is because of Smarty adds some information to the beginning of a cached page in ASCII
  19. * format.
  20. * Also the file should then be opened in "rb" mode on windows, right now it is (still) opened
  21. * in "normal" "r" mode.
  22. * Install:  Drop into the plugin directory, call
  23. * ####    $smarty_object->load_filter('output','gzcompress');
  24. * from application.
  25. * -------------------------------------------------------------
  26. */
  27. function smarty_outputfilter_gzcompress($tpl_source, &$smarty)
  28. {
  29. /*~ the compression level to use
  30. default: 9
  31. -------------------------------------
  32. 0->9
  33. less compressed ->better compressed
  34. less CPU usage->more CPU usage
  35. The trade off between CPU usage and compression isn't worth going above level 1 or 2 in most cases.
  36. 9 will not compress most pages more than a few bytes better than levels 1 & 2, but server load dramatically increases.
  37. -------------------------------------
  38. */
  39. $compression_level = 9;
  40. /*~ force compression, even if gzip is not sent in HTTP_ACCEPT_ENCODING,
  41. for example Norton Internet Security filters this, but 95% percent of
  42. the browsers do support output compression, including Phoenix and Opera.
  43. default: yes
  44. */
  45. $force_compression=false;
  46. //~ message to append to the template source, if it is compressed
  47. $append_message = "n<!-- zlib compression level ".$compression_level." -->";
  48. if(!headers_sent() //~ headers are not yet sent
  49. && extension_loaded("zlib") //~ zlib is loaded
  50. && !$smarty->caching //~ caching is disabled
  51. && (ereg("gzip", $_SERVER["HTTP_ACCEPT_ENCODING"]) || $force_compression))
  52. {
  53. //~ correct encoding is sent, or compression is forced
  54. $tpl_source = gzencode($tpl_source.$append_message, $compression_level);
  55. header("Content-Encoding: gzip");
  56. header("Vary: Accept-Encoding");
  57. header("Content-Length: ".strlen($tpl_source));
  58. }
  59. return $tpl_source;
  60. }
  61. ?>