条件付き GET とは

条件付き GET はクライアントキャッシュの一種ですが、
「有効時間」の設定がありません。
その代りに、前回アクセスして以降にページが更新されたかどうかを
Web サーバに問い合わせます。

前回アクセスして以降、ページが更新されていない場合は、
ページデータの取得は行わず、キャッシュを使用します。
一方、ページが更新されている場合は、
キャッシュを無効にして新たにページデータを取得します。

通常のクライアントキャッシュと比べて
更新の有無を確認するためのアクセスが発生しますが、
更新された場合にはそれを速やかに反映させることができます。

条件付き GET を使わない場合と比べると、
ページが更新されている場合にのみデータの送信を行うので、
データ転送量を大幅に軽減することができます。

conditionalGet メソッド

条件付き GET を使用するには、conditionalGet メソッドを使用します。

$ramp->conditionalGet(filename);
$ramp->conditionalGet(filename, filename...);

引数に指定したファイルの更新日時を
「ページの更新日時」として使用します。

複数のファイルを指定した場合は、
それらのファイルの中で一番新しい更新日時を
「ページの更新日時」として使用します。

ちなみに、引数が省略された場合は、
今実行されているプログラムファイルが指定されます。

$ramp->conditionalGet(timestamp);

更新日時を直接指定することもできます。
この場合は、UNIXタイムスタンプで指定してください。

使用例を以下に示します。 // "data1.txt" の更新日時が 2008/1/1 00:00:00
// "data2.txt" の更新日時が 2008/1/2 00:00:00 とすると
// このプログラムが動的に生成するページの「更新日時」は
// 2008/1/2 00:00:00 に設定される。

$ramp->conditionalGet("data1.txt", "data2.txt");

// 前回のアクセスが
// 2008/1/2 00:00:00 より後ならキャッシュが使用され、
// conditionalGet でプログラムは終了する。
// (conditionalGet 以降の処理は実行されない)

// 前回のアクセスが
// 2008/1/2 00:00:00 より前ならキャッシュは無効となり、
// ページの生成処理を行う。


echo "この部分は、キャッシュが無効の場合にのみ実行される。";
// 「更新日時」を60秒前に設定する。
$ramp->conditionalGet(time() - 60);

// 前回のアクセスが60秒以内ならキャッシュが使用され、
// conditionalGet でプログラムは終了する。
// (conditionalGet 以降の処理は実行されない)

// 前回のアクセスが60秒より前ならキャッシュは無効となり、
// ページの生成処理を行う。


echo "この部分は、キャッシュが無効の場合にのみ実行される。";
// ファイルとタイムスタンプを混在して指定することも可能。
// この場合も、ファイルの更新日時とタイムスタンプとを比較して、
// 新しい方が指定される。

$ramp->conditionalGet("data1.txt", time() - 60);

// タイムスタンプを複数指定することも可能。
// この場合も、比較して新しい方が指定される。

$ramp->conditionalGet(filemtime("data1.txt"), time() - 60);

補足

conditionalGetheader を出力します。
したがって、すべての出力の前に実行して下さい。