説明:
圧縮ファイルはサーバー上にキャッシュされるため、再アクセス時の再圧縮時間と CPU 使用率が削減されます。
クライアント ファイルのキャッシュ時間を設定し、再リクエストの数を減らすことで、85% 以上削減できます。
イメージはすでに圧縮形式であるため、クライアント キャッシュ時間のみが設定され、圧縮は実行されません。
使用方法:
サーバーは gzip および Rewrite 機能をサポートする必要があります。
次のコード RewriteRule (..css$|..js$|..jpg$|..gif$|.*.png$) gzip.php を、ファイル内の「RewriteBase /」の下の行に追加します。 htacess ファイル ?$1
gzip.phpをルートディレクトリにアップロードします
4. ルート ディレクトリにキャッシュ フォルダーを作成し、読み書きできるようにします。
- /**
- * @著者セラフィム
- * @copyright 2012
- */
- //
- function sendheader($last_modified, $p_type, $content_length = 0 )
- {
- //クライアント キャッシュの有効期間を設定します
- header("Expires: " . gmdate("D, d M Y H:i:s", time() + 15360000) . "GMT");
- header("Cache -Control : max-age=315360000");
- header("Pragma: ");
- // 最終更新時刻を設定します
- header("Last-Modified: " . $last_modified);
- // ファイルタイプ情報を設定します
- header ($p_type);
- header("Content-Length: " . $content_length);
- }
- define('ABSPATH', dirname(__file__) . '/');
- $cache = true;
- $cachedir = 'cache /'; //gz ファイルが保存されるディレクトリは書き込み可能である必要があります
- if (empty($_SERVER['QUERY_STRING']))
- exit();
- $gzip = strstr($_SERVER['HTTP_ACCEPT_ENCODING'], 'gzip ' );
- if (empty($gzip))
- $cache = false;
- $key = array_shift(explode('?', $_SERVER['QUERY_STRING']));
- $key = str_replace('../ ' , '', $key);
- $filename = ABSPATH . $key;
- $symbol = '_';
- $rel_path = str_replace(ABSPATH, '', dirname($filename));
- $namespace = str_replace( ' /', $symbol, $rel_path);
- $cache_filename = ABSPATH . $namespace . $symbol .
- '.gz' // gz ファイルパスを生成します
- $ext( explode ('.', $filename)); //suffix に基づいてファイルタイプ情報を判断します
- $type = "Content-type: text/html" //デフォルトのファイルタイプ
- switch ($ext)
- {
- case ' css ':
- $type = "コンテンツ タイプ: text/css";
- ブレーク;
- case 'js':
- $type = "コンテンツ タイプ: text/javascript";
- ブレーク;
- case 'gif':
- $ キャッシュ = false;
- $type = "コンテンツ タイプ: image/gif";
- ブレーク;
- case 'jpg':
- $cache = false;
- $type = "コンテンツ タイプ: 画像/jpeg";
- ブレーク;
- case 'png':
- $cache = false;
- $type = "Content-type: image/png";
- ブレーク;
- デフォルト:
- exit();
- }
- if ($cache)
- {
- if ( file_exists($cache_filename))
- { // gz ファイルが存在する場合
- $mtime = filemtime($cache_filename);
- $gmt_mtime = gmdate('D, d M Y H:i:s', $mtime) ' GMT' . ;
- if ((isset($_SERVER['HTTP_IF_MODIFIED_SINCE']) && array_shift(explode(';', $_SERVER['HTTP_IF_MODIFIED_SINCE'])) ==
- $gmt_mtime))
- {
- // ブラウザ キャッシュ内のファイルを使用変更日は一致しており、304 が返されます。 header("HTTP/1.1 304 Not Modified");
- // クライアント ヘッダーを送信します
- header("Content-Encoding:gzip");
- sendheader($gmt_mtime, $type);
- }
- else
- {
- // gz ファイル出力を読み取る
- $content = file_get_contents($cache_filename);
- // クライアント ヘッダーを送信する
- sendheader($gmt_mtime, $type, strlen($content));
- header("Content -Encoding: gzip");
- // データを送信
- echo $content;
- }
- }
- else
- if (file_exists($filename))
- { // 対応する gz ファイルがありません
- $mtime = mktime();
- $gmt_mtime = gmdate('D, d M Y H:i:s', $mtime) . ' GMT';
- // ファイルを読み込みます
- $content = file_get_contents($filename);
- // 空白部分を削除します
- / / $content = ltrim($content);
- // ファイルの内容を圧縮します
- $content = gzencode($content, 9, $gzip ? FORCE_GZIP : FORCE_DEFLATE);
- // クライアントヘッダを送信します
- sendheader($gmt_mtime, $type, strlen($content));
- header("Content-Encoding: gzip");
- // データを送信
- echo $content;
- // ファイルを書き込む
- file_put_contents($cache_filename, $content);
- }
- else
- {
- header("HTTP/1.0 404 Not Found");
- }
- }
- else
- { // Gzip モードで出力を処理します。原理は基本的に上記と同じです
- if (file_exists($filename))
- {
- $mtime = filemtime($filename);
- $gmt_mtime = gmdate('D, d M Y H:i:s', $mtime) 。 ' GMT';
- if ((isset($_SERVER['HTTP_IF_MODIFIED_SINCE']) && array_shift(explode(';', $_SERVER['HTTP_IF_MODIFIED_SINCE'])) ==
- $gmt_mtime))
- {
- // ファイル付きブラウザキャッシュ内 変更日は一致しており、304 が返されます header("HTTP/1.1 304 Not Modified");
- // クライアントヘッダーを送信
- sendheader($gmt_mtime, $type, strlen($content));
- header( "Content-Encoding: gzip");
- }
- else
- {
- // ファイル出力を読み取る
- $content = file_get_contents($filename);
- // クライアントヘッダを送信する
- sendheader($gmt_mtime, $type, strlen($content ));
- // データを送信
- echo $content;
- }
- }
- else
- {
- header("HTTP/1.0 404 Not Found");
- }
- }
- ?>
-
-
コードをコピー
|
php、gzip