ホームページ > バックエンド開発 > PHPチュートリアル > php で gzip 圧縮を有効にしてウェブサイトを高速化します

php で gzip 圧縮を有効にしてウェブサイトを高速化します

WBOY
リリース: 2016-07-25 08:45:07
オリジナル
1023 人が閲覧しました
php、gzip


説明:

圧縮ファイルはサーバー上にキャッシュされるため、再アクセス時の再圧縮時間と CPU 使用率が削減されます。 クライアント ファイルのキャッシュ時間を設定し、再リクエストの数を減らすことで、85% 以上削減できます。 イメージはすでに圧縮形式であるため、クライアント キャッシュ時間のみが設定され、圧縮は実行されません。

使用方法:

サーバーは gzip および Rewrite 機能をサポートする必要があります。 次のコード RewriteRule (..css$|..js$|..jpg$|..gif$|.*.png$) gzip.php を、ファイル内の「RewriteBase /」の下の行に追加します。 htacess ファイル ?$1 gzip.phpをルートディレクトリにアップロードします

4. ルート ディレクトリにキャッシュ フォルダーを作成し、読み書きできるようにします。

  1. /**
  2. * @著者セラフィム
  3. * @copyright 2012
  4. */
  5. //
  6. function sendheader($last_modified, $p_type, $content_length = 0 )
  7. {
  8. //クライアント キャッシュの有効期間を設定します
  9. header("Expires: " . gmdate("D, d M Y H:i:s", time() + 15360000) . "GMT");
  10. header("Cache -Control : max-age=315360000");
  11. header("Pragma: ");
  12. // 最終更新時刻を設定します
  13. header("Last-Modified: " . $last_modified);
  14. // ファイルタイプ情報を設定します
  15. header ($p_type);
  16. header("Content-Length: " . $content_length);
  17. }
  18. define('ABSPATH', dirname(__file__) . '/');
  19. $cache = true;
  20. $cachedir = 'cache /'; //gz ファイルが保存されるディレクトリは書き込み可能である必要があります
  21. if (empty($_SERVER['QUERY_STRING']))
  22. exit();
  23. $gzip = strstr($_SERVER['HTTP_ACCEPT_ENCODING'], 'gzip ' );
  24. if (empty($gzip))
  25. $cache = false;
  26. $key = array_shift(explode('?', $_SERVER['QUERY_STRING']));
  27. $key = str_replace('../ ' , '', $key);
  28. $filename = ABSPATH . $key;
  29. $symbol = '_';
  30. $rel_path = str_replace(ABSPATH, '', dirname($filename));
  31. $namespace = str_replace( ' /', $symbol, $rel_path);
  32. $cache_filename = ABSPATH . $namespace . $symbol .
  33. '.gz' // gz ファイルパスを生成します
  34. $ext( explode ('.', $filename)); //suffix に基づいてファイルタイプ情報を判断します
  35. $type = "Content-type: text/html" //デフォルトのファイルタイプ
  36. switch ($ext)
  37. {
  38. case ' css ':
  39. $type = "コンテンツ タイプ: text/css";
  40. ブレーク;
  41. case 'js':
  42. $type = "コンテンツ タイプ: text/javascript";
  43. ブレーク;
  44. case 'gif':
  45. $ キャッシュ = false;
  46. $type = "コンテンツ タイプ: image/gif";
  47. ブレーク;
  48. case 'jpg':
  49. $cache = false;
  50. $type = "コンテンツ タイプ: 画像/jpeg";
  51. ブレーク;
  52. case 'png':
  53. $cache = false;
  54. $type = "Content-type: image/png";
  55. ブレーク;
  56. デフォルト:
  57. exit();
  58. }
  59. if ($cache)
  60. {
  61. if ( file_exists($cache_filename))
  62. { // gz ファイルが存在する場合
  63. $mtime = filemtime($cache_filename);
  64. $gmt_mtime = gmdate('D, d M Y H:i:s', $mtime) ' GMT' . ;
  65. if ((isset($_SERVER['HTTP_IF_MODIFIED_SINCE']) && array_shift(explode(';', $_SERVER['HTTP_IF_MODIFIED_SINCE'])) ==
  66. $gmt_mtime))
  67. {
  68. // ブラウザ キャッシュ内のファイルを使用変更日は一致しており、304 が返されます。 header("HTTP/1.1 304 Not Modified");
  69. // クライアント ヘッダーを送信します
  70. header("Content-Encoding:gzip");
  71. sendheader($gmt_mtime, $type);
  72. }
  73. else
  74. {
  75. // gz ファイル出力を読み取る
  76. $content = file_get_contents($cache_filename);
  77. // クライアント ヘッダーを送信する
  78. sendheader($gmt_mtime, $type, strlen($content));
  79. header("Content -Encoding: gzip");
  80. // データを送信
  81. echo $content;
  82. }
  83. }
  84. else
  85. if (file_exists($filename))
  86. { // 対応する gz ファイルがありません
  87. $mtime = mktime();
  88. $gmt_mtime = gmdate('D, d M Y H:i:s', $mtime) . ' GMT';
  89. // ファイルを読み込みます
  90. $content = file_get_contents($filename);
  91. // 空白部分を削除します
  92. / / $content = ltrim($content);
  93. // ファイルの内容を圧縮します
  94. $content = gzencode($content, 9, $gzip ? FORCE_GZIP : FORCE_DEFLATE);
  95. // クライアントヘッダを送信します
  96. sendheader($gmt_mtime, $type, strlen($content));
  97. header("Content-Encoding: gzip");
  98. // データを送信
  99. echo $content;
  100. // ファイルを書き込む
  101. file_put_contents($cache_filename, $content);
  102. }
  103. else
  104. {
  105. header("HTTP/1.0 404 Not Found");
  106. }
  107. }
  108. else
  109. { // Gzip モードで出力を処理します。原理は基本的に上記と同じです
  110. if (file_exists($filename))
  111. {
  112. $mtime = filemtime($filename);
  113. $gmt_mtime = gmdate('D, d M Y H:i:s', $mtime) 。 ' GMT';
  114. if ((isset($_SERVER['HTTP_IF_MODIFIED_SINCE']) && array_shift(explode(';', $_SERVER['HTTP_IF_MODIFIED_SINCE'])) ==
  115. $gmt_mtime))
  116. {
  117. // ファイル付きブラウザキャッシュ内 変更日は一致しており、304 が返されます header("HTTP/1.1 304 Not Modified");
  118. // クライアントヘッダーを送信
  119. sendheader($gmt_mtime, $type, strlen($content));
  120. header( "Content-Encoding: gzip");
  121. }
  122. else
  123. {
  124. // ファイル出力を読み取る
  125. $content = file_get_contents($filename);
  126. // クライアントヘッダを送信する
  127. sendheader($gmt_mtime, $type, strlen($content ));
  128. // データを送信
  129. echo $content;
  130. }
  131. }
  132. else
  133. {
  134. header("HTTP/1.0 404 Not Found");
  135. }
  136. }
  137. ?>
コードをコピー

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート