まとめ ブログ ダウンロード 掲示板 メール

れぶろぐ

< 2008-05-10 (土) 2008-05-14 (水) > 最新


2008-05-13 (火)

Apache2 互換な ETag の計算方法

sie.php でキャッシュを制御するのに使いたいので、調べてみたところ、 2通りのサンプルコードが見つかった。

ということで、drry+@-> PHP で Apache 風 ETag の生成を次のように変えると Apache と全く同じ ETag を生成できる。

修正した ETag 生成コード

$etag    = sprintf( '"%x-%x-%x"', $stats['ino'], $stats['size'], $stats['mtime'] * 1000000 );

これからすると、Apache の内部では更新時刻をマイクロタイム単位で扱っているようだ。

Sample function that generates apache 2.2 ETag. Useful for scripts serving images or other cachable data.

$file="example.png";

// Inode
$ETag = dechex(fileinode($file));
// Size
$ETag.= "-".dechex(filesize($file));
// Modification time in useconds & (2^33-1)
$ETag.= "-".dechex(((filemtime($file).str_repeat("0",6)+0) & (8589934591)));

header("ETag: \"$ETag\"); 

念のため確認してみたが、確かにどちらのコードも Apache 2 と同じ ETag を出力する。 でも、前者の方がずっと分かりやすい。こちらのコードを使わせてもらおう。

Tags: PHP | このエントリを含む del.icio.us | このエントリを含むはてなブックマーク | このエントリを含む livedoor クリップ | Permalink
本日のリンク元

編集