検索条件
全1件
(1/1ページ)
別の日記に少し書いてますが、ECO-Wiki (acronia)をIf-Modified-Since(条件付きリクエスト)に対応させたので、その方法をメモしておきます。
If-Modified-Sinceを使うと、ページが更新されている時だけデータを送って欲しい、という要求ができます。
PukiWikiの場合、各ページの更新日時をどのような基準で決めるかが問題となります。
この問題は、bodycache適用時の問題と似ています。そこで、今回はbodycacheファイルの更新日時を対応するページの更新日時と見なすようにしました。
主にread.inc.phpを書き換えます。
// Last-Modified header
function header_lastmod_cache($page = NULL)
{
global $lastmod;
if ( is_cache($page) && get_cachetime($page) != 0 ) { //get_cachetime==0の時は、そのキャッシュは破棄予定なので無視
pkwk_headers_sent();
header('Last-Modified: ' .
date('D, d M Y H:i:s', get_cachetime($page)) . ' GMT');
} else if ( is_page($page) ) { //キャッシュが存在しない問いは現在時刻を使う
header('Last-Modified: ' .
date('D, d M Y H:i:s', UTIME) . ' GMT');
}
}
function get_if_modified_since()
{
static $unixtime = null ;
if ($unixtime !== null ) {
return $unixtime ;
}
if (!isset($_SERVER['HTTP_IF_MODIFIED_SINCE'])) {
$unixtime = false ;
return false ; // If-Modified-Since なし
}
$unixtime = strtotime( $_SERVER['HTTP_IF_MODIFIED_SINCE'] );
return $unixtime ;
}
?>
if (is_page($page)) {
// ページを表示
check_readable($page, true, true);
header_lastmod($page);
return array('msg'=>'', 'body'=>'');
if (is_page($page)) {
// ページを表示
check_readable($page, true, true);
$ims = get_if_modified_since();
if ( $ims ) {
$ctm = get_cachetime($page);
if ( $ctm && $ctm <= $ims) {
// 更新されていない
header('HTTP/1.1 304 Not Modified') ;
header_lastmod_cache($page);
exit;
}
}
//header_lastmod($page);
header_lastmod_cache($page);
return array('msg'=>'', 'body'=>'');