-
- /**
- * @著者セラフィム
- * @copyright 2012
- * @link http://bbs.it-home.org
- */
- //
- function sendheader($last_modified, $p_type, $content_length = 0)
- {
- //クライアントキャッシュの有効期間を設定します
- header("Expires: " . gmdate("D, d M Y H:i:s", time() + 15360000) . "GMT"); 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; cache/'; //gz ファイルが保存されているディレクトリ。書き込み可能であることを確認します。
- if (empty($_SERVER['QUERY_STRING']))
- $gzip = strstr($_SERVER['HTTP_ACCEPT_ENCODING') ], 'gzip ');
- if (empty($gzip))
- $key = array_shift('?', $_SERVER['QUERY_STRING'])); '../ ', '', $key);
- $filename = '_';
- $rel_path(ABSPATH, '', dirname($filename)); namespace = str_replace( '/', $symbol, $rel_path);
- $cache_filename = $namespace . $symbol .gz'; ext = array_pop(explode('.', $filename)); //suffixに基づいてファイルタイプ情報を判断します
- $type = "Content-type: text/html" //デフォルトのファイルタイプ
- switch ($ext); {
- case ' css':
- $type = "コンテンツ タイプ: text/css";
- case 'js':
- $type = "コンテンツ タイプ: text/javascript"; gif':
- $cache = false;
- $type = "コンテンツ タイプ: image/gif";
- case 'jpg':
- $type = "コンテンツ タイプ: image/jpeg ";
- break ;
- case 'png':
- $cache = false;
- $type = "Content-type: image/png";
- break;
- default:
- 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)
- // ファイルを読み取ります
- $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");
- //データを送信
- $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)); "Content-Encoding: gzip");
- }
- else
- {
- // ファイル出力を読み取る
- $content = file_get_contents($filename);
- // クライアントヘッダーを送信する
- sendheader($gmt_mtime, $type, strlen($content) ));
- //データを送信
- echo $content;
- }
- }
- header("HTTP/1.0 404 Not Found")
- }
- }
- ?>
-
-
-
-
-
添付ファイル--------------
例証します:
1. 圧縮ファイルはサーバー上にキャッシュされ、再圧縮時間と CPU 使用率を削減するために再度アクセスされます。
2. クライアント ファイルのキャッシュ時間を設定して再リクエストの数を減らすと、85% 以上削減できます。
3. イメージはすでに圧縮形式であるため、クライアント キャッシュ時間のみが設定され、圧縮は実行されません。
使用方法:
1. サーバーは gzip および Rewrite 機能をサポートする必要があります。
2. .htacess ファイルの「RewriteBase/」の下の行に次のコードを追加します。
RewriteRule (.*.css$|.*.js$|.*.jpg$|.*.gif$|.*.png$) gzip.php?$1 [L]
3. gzip.php をルート ディレクトリにアップロードします
4. ルート ディレクトリにキャッシュ フォルダーを作成し、読み取りと書き込みが可能であることを確認します。
|