Rewish

ウェブデザイン、HTML、CSS、JavaScript、PHP、WordPress、Movable Typeなど、Web制作で役立つかも知れないBlog.

Expiresヘッダを送出するPHPのクラスとmod_rewrite

カテゴリー
PHP/MySQL
タグ
Apache, Download

レンタルサーバーではmod_expiresが使えない場合が多いので、PHPとmod_rewriteで頑張って追加してみよう的な感じです。

ただ、以下で示す方法は、画像などの静的ファイルにExpiresヘッダを追加するため、ファイル数分のPHPが動くのでサーバーに大きな負荷をかけてしまいます。

上記理由により、アクセスが多いサイトでは、使用しない方が無難かも知れません。

目次

  1. 概要
  2. ダウンロード
  3. 使い方
  4. まとめ

概要

header関数を利用してExpiresLast-ModifiedCache-controlContent-Typeを送出するPHPのクラスと、それを利用するためのmod_rewriteの設定。

大まかな処理の流れ

  1. リクエストされたファイルが存在する場合、ファイルのフルパスをPHPに渡して処理。
  2. 拡張子からMIMEタイプを判別してContent-Typeを送出。
  3. デフォルトの設定ではGZIP圧縮してからファイルを出力。

ダウンロード

ExpiresHeader.php - v0.1.0

使い方

PHPの設定

適当なPHPファイルを作ってExpiresHeader.phpを読み込み、必要に応じてMIMEタイプの追加やコンフィグの書き換えを行う。

今回はeh.phpと言うファイルを作成。

<?php
// eh.php
require '/path/to/ExpiresHeader.php';
try {
	$eh = new ExpiresHeader();
	// ファイルをセット
	$eh->setFile($_GET['file']);
	// コンフィグ
	$eh->setConfig(array(
		'days' => 7, // キャッシュは7日間有効 (初期値は30)
		'gzip' => false // GZIP圧縮はしない (初期値はtrue)
	));
	// MIMEタイプ追加
	$eh->setMimeType(array(
		'html' => 'text/html',
		'css' => 'text/css'
	));
	$eh->display();
} catch (Exception $e) {
	header('HTTP', true, $e->getCode());
	echo $e->getMessage();
	exit(0);
}

/path/to/の部分は適宜書き換え。

.htaccessの設定

RewriteEngine On
RewriteBase /
# 存在するファイルのみ有効
RewriteCond %{REQUEST_FILENAME} -f
# ヘッダを送出するファイルの拡張子
RewriteCond %{REQUEST_FILENAME} "\.(jpe?g|gif|png|ico|html?|xml|css|js|rdf|rss|xsl|swf|flv)$"
# PHPにファイルのフルパスを渡す
RewriteRule .+ /path/to/eh.php?file=%{REQUEST_FILENAME} [L]

/path/to/の部分は適宜書き換え。

以上で設定は終り。

注意点として、セキュリティ上の理由から、PHPを直接呼び出す事は出来なくなっています。mod_rewriteが使えない環境では、導入を諦めて下さい。南無。

まとめ

  • 適当なPHPファイルでExpiresHeader.phpを読み込む
  • 必要に応じてコンフィグやMIMEタイプリストをいじる
  • RewriteCondでヘッダを送出するファイルの拡張を設定
  • サーバー負荷が高いのでアクセス数が多い場合は使わない方が無難