検索条件
全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'=>'');