>백엔드 개발 >PHP 튜토리얼 >PHP 가상 호스트에서 gzip 압축을 활성화하는 방법

PHP 가상 호스트에서 gzip 압축을 활성화하는 방법

WBOY
WBOY원래의
2016-07-25 08:58:54858검색
  1. define('ABSPATH', dirname(__FILE__).'/');

  2. $cache = true;//Gzip 압축 스위치

  3. $cachedir = 'gzip_cache/';//gz 파일을 저장하고 사용하기 전에 생성하며 쓰기 권한을 부여하는 디렉터리

  4. $gzip = strstr($_SERVER['HTTP_ACCEPT_ENCODING'], 'gzip');

  5. $deflate = strstr($_SERVER['HTTP_ACCEPT_ENCODING'], 'deflate');
  6. $ 인코딩 = $gzip ? 'gzip' : ($deflate ? 'deflate' : '없음');

  7. if(!isset($_SERVER['QUERY_STRING'])) 종료( );

  8. $key=array_shift(explode('?', $_SERVER['QUERY_STRING']));

  9. $key=str_replace('../',' ',$key);
  10. $filename=ABSPATH.$key;
  11. $symbol='^';
  12. $rel_path=str_replace(ABSPATH,'',dirname($filename));
  13. $namespace=str_replace('/',$symbol,$rel_path);
  14. $cache_filename=ABSPATH.$cachedir.$namespace.$symbol.basename($filename).'.gz';//캐시 경로
  15. $type="Content-type: text/html"; //MIME 정보
  16. $ext = array_pop(explode('.', $filename));//파일 확장자 가져오기

  17. < ;p>switch ($ext){//MIME 정보 업데이트
  18. case 'css':
  19. $type="Content-type: text/css";
  20. break;
  21. case ' js' :
  22. $type="Content-type: text/javascript";
  23. break;
  24. 기본값:
  25. exit();
  26. }

  27. < if($cache){
  28. if(file_exists($cache_filename)){//gz 파일이 있는 경우
  29. $mtime = filemtime($cache_filename);
  30. $gmt_mtime = gmdate(' D, d M Y H:i:s', $mtime) . ' GMT';
  31. if( (isset($_SERVER['HTTP_IF_MODIFIED_SINCE']) &&
  32. array_shift(explode(';', $ _SERVER['HTTP_IF_MODIFIED_SINCE'])) == $gmt_mtime)
  33. ){
  34. // 파일이 변경되지 않은 경우 304
  35. 헤더를 반환합니다("HTTP/1.1 304 Not Modified");
  36. header("만료: ");
  37. header("Cache-Control: ");
  38. header("Pragma: ");
  39. header($type);
  40. header(" 팁: 캐시가 수정되지 않음(Gzip)");
  41. 헤더('Content-Length: 0');

  42. }else{

  43. < p> //gz 파일 출력 읽기
  44. $content = file_get_contents($cache_filename);
  45. header("Last-Modified:" . $gmt_mtime);
  46. header("Expires: ");
  47. header ("Cache-Control: ");
  48. header("Pragma: ");
  49. header($type);
  50. header("Tips: Normal Respond (Gzip)");
  51. header ( "Content-Encoding: gzip");
  52. echo $content;
  53. }

  54. }else if(file_exists($filename)){ //해당되는 내용이 없습니다. gz 파일

  55. $mtime = mktime();

  56. $gmt_mtime = gmdate('D, d M Y H:i:s', $mtime) ' GMT';
  57. $content = file_get_contents($filename);
  58. $content = gzencode($content, 9, $gzip ? FORCE_GZIP : FORCE_DEFLATE);//압축된 콘텐츠
  59. 헤더("마지막 수정됨 :" . $gmt_mtime);
  60. header("만료: ");
  61. header("Cache-Control: ");
  62. header("Pragma: ");
  63. header($type) ;
  64. header("팁: Gzip 파일 빌드(Gzip)");
  65. header("Content-Encoding: " . $encoding);
  66. header('Content-Length: ' . strlen($content )) ;
  67. echo $content;

  68. if ($fp = fopen($cache_filename, 'w')) {//쓰기 캐시

  69. fwrite($fp, $ content);
  70. fclose($fp);
  71. }

  72. }else{

  73. header("HTTP/1.0 404 Not Found");
  74. }
  75. }else{ //Gzip 압축 끄기
  76. //by bbs.it-home.org
  77. if(file_exists($filename)){
  78. $mtime = filemtime($filename);
  79. $gmt_mtime = gmdate('D, d M Y H:i:s', $mtime) . ' GMT';
  80. if( (isset($_SERVER['HTTP_IF_MODIFIED_SINCE']) &&
  81. array_shift(explore(';', $_SERVER['HTTP_IF_MODIFIED_SINCE'])) == $gmt_mtime)
  82. ){
  83. 헤더("HTTP/1.1 304 수정되지 않음");
  84. 헤더( "만료: ");
  85. header("Cache-Control: ");
  86. header("Pragma: ");
  87. header($type);
  88. header("팁: 캐시가 수정되지 않음 ") ;
  89. 헤더('콘텐츠 길이: 0');
  90. }else{
  91. header("Last-Modified:" . $gmt_mtime);
  92. 헤더( "만료: ");
  93. header("Cache-Control: ");
  94. header("Pragma: ");
  95. header($type);
  96. header("팁: 일반 응답" );
  97. $content = readfile($filename);
  98. echo $content;
  99. }
  100. }else{
  101. header("HTTP/1.0 404 찾을 수 없음");
  102. }
  103. }
  104. ?>
코드 복사

다음으로 .htaccess(Apache mod_rewrite) 또는 httpd.ini(IIS ISAPI_Rewrite)에 다음 규칙을 추가합니다.

  1. RewriteRule(.*.css$|.*.js$) /gzip.php?$1 [L]
코드를 복사하세요

마지막으로 테스트해 보세요. 웹사이트의 각 페이지를 방문하여 gzip_cache 폴더에 생성된 캐시 파일이 있는지 확인하세요. Baidu 웹마스터 도구를 사용하여 CSS/js 페이지가 압축되었는지 확인할 수도 있습니다.



성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.